Coverage report: /home/ellis/comp/core/ffi/rocksdb/slicetransform.lisp

KindCoveredAll%
expression017 0.0
branch00nil
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 ;;; rocksdb/slicetransform.lisp --- RocksDB SliceTransform
2
 
3
 ;; SliceTransformations (prefix extraction for bloom filters)
4
 
5
 ;;; Refs:
6
 
7
 ;; https://github.com/facebook/rocksdb/wiki/Prefix-Seek
8
 ;; https://github.com/facebook/rocksdb/blob/main/include/rocksdb/slice_transform.h
9
 
10
 ;;; Commentary:
11
 
12
 #|
13
 A SliceTransform is a generic pluggable way of transforming one string to
14
 another. Its primary use-case is in configuring rocksdb to store prefix blooms
15
 by setting prefix_extractor in ColumnFamilyOptions.
16
 |#
17
 
18
 ;;; Code:
19
 (in-package :rocksdb)
20
 
21
 (defvar *rocksdb-transform-lambda-list*
22
   '((key (* unsigned-char))
23
     (len size-t)
24
     (dst-len (* size-t))))
25
 
26
 (defvar *rocksdb-in-domain-lambda-list*
27
   '((state (* t))
28
     (key (* unsigned-char))
29
     (len size-t)))
30
 
31
 (defvar *rocksdb-in-range-lambda-list*
32
   '((state (* t))
33
     (key (* unsigned-char))
34
     (len size-t)))
35
 
36
 (define-alien-type rocksdb-transform-function
37
     (function (* unsigned-char)
38
               (* unsigned-char)
39
               size-t
40
               (* size-t)))
41
 
42
 (define-alien-type rocksdb-in-domain-function
43
   (function boolean
44
             (* t) ;;state
45
             (array unsigned-char) ;;key
46
             size-t)) ;;len
47
 
48
 (define-alien-type rocksdb-in-range-function
49
   (function unsigned-char
50
             (* t) ;;state
51
             (array unsigned-char) ;;key 
52
             size-t)) ;;len
53
 
54
 (defar rocksdb-slicetransform-create (* rocksdb-slicetransform)
55
   (state (* t))
56
   (destructor (* rocksdb-destructor-function))
57
   (transform (* rocksdb-transform-function))
58
   (in-domain (* rocksdb-in-domain-function))
59
   (in-range (* rocksdb-in-range-function))
60
   (name (* rocksdb-name-function)))
61
 
62
 (defar rocksdb-slicetransform-create-noop (* rocksdb-slicetransform))
63
 
64
 (defar rocksdb-slicetransform-create-fixed-prefix (* rocksdb-slicetransform)
65
   (n size-t))
66
 
67
 (defar rocksdb-slicetransform-destroy void (st (* rocksdb-slicetransform)))
68
 
69
 (define-alien-callable rocksdb-transform-default (* unsigned-char)
70
     ((key (* unsigned-char))
71
      (isize size-t)
72
      (osize (* size-t)))
73
   key)
74
 
75
 (define-alien-callable rocksdb-in-domain-default boolean
76
     ((state (* t))
77
      (key (array unsigned-char))
78
      (len size-t))
79
   1)
80
 
81
 (define-alien-callable rocksdb-in-range-default boolean
82
     ((state (* unsigned))
83
      (key (* unsigned-char))
84
      (len size-t))
85
   ;; (declare (ignore state key len))
86
   1)