1 ! Copyright (C) 2020 Doug Coleman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors alien.c-types alien.data alien.strings
4 constructors destructors io.encodings.string io.encodings.utf8
5 kernel namespaces rocksdb.ffi sequences ;
8 ! https://github.com/facebook/rocksdb/blob/c08c0ae73131457a2ac74507da58ff49870c1ee6/db/c_test.c
10 : rocksdb-ptr-error ( ptr/f error-ptrptr -- ptr/f )
13 [ void* deref alien>native-string throw ] if ;
15 TUPLE: rocksdb-handle < disposable ptr ;
16 CONSTRUCTOR: <rocksdb-handle> rocksdb-handle ( ptr -- handle ) ;
17 M: rocksdb-handle dispose
20 TUPLE: rocksdb-options < disposable ptr ;
21 CONSTRUCTOR: <rocksdb-options> rocksdb-options ( ptr -- options ) ;
22 M: rocksdb-options dispose
23 ptr>> rocksdb_options_destroy ;
25 : set-create-if-missing ( options -- options )
26 [ 1 rocksdb_options_set_create_if_missing ] keep ;
28 : create-rocksdb ( path -- ptr )
30 rocksdb_options_create [ <rocksdb-options> &dispose drop ] keep
33 [ rocksdb_open ] keep rocksdb-ptr-error ;
35 SYMBOL: rocksdb-handle-var
37 : with-rocksdb ( path quot -- )
40 create-rocksdb [ <rocksdb-handle> &dispose drop ] keep
41 dup rocksdb-handle-var
44 ] with-destructors ; inline
47 SYMBOL: rocksdb-write-options-var
49 TUPLE: rocksdb-write-options < disposable ptr ;
50 CONSTRUCTOR: <rocksdb-write-options> rocksdb-write-options ( ptr -- options ) ;
51 M: rocksdb-write-options dispose
52 ptr>> rocksdb_writeoptions_destroy ;
54 : make-write-options-sync ( -- write-options )
55 rocksdb_writeoptions_create [ 1 rocksdb_writeoptions_set_sync ] keep
56 [ <rocksdb-write-options> &dispose drop ] keep ;
58 : make-write-options-async ( -- write-options )
59 rocksdb_writeoptions_create [ 0 rocksdb_writeoptions_set_sync ] keep
60 [ <rocksdb-write-options> &dispose drop ] keep ;
62 : rocksdb-put* ( db write-options key value -- error/f )
63 [ utf8 encode dup length ] bi@
66 dup [ void* deref alien>native-string ] when ;
70 SYMBOL: rocksdb-read-options-var
72 TUPLE: rocksdb-read-options < disposable ptr ;
73 CONSTRUCTOR: <rocksdb-read-options> rocksdb-read-options ( ptr -- options ) ;
74 M: rocksdb-read-options dispose
75 ptr>> rocksdb_readoptions_destroy ;
78 : make-read-options ( -- read-options )
79 rocksdb_readoptions_create
80 [ <rocksdb-read-options> &dispose drop ] keep ;
82 ! : with-default-rocksdb-read-options ( quot -- )
83 ! [ make-read-options rocksdb-read-options-var ] dip with-variable ; inline
85 : rocksdb-get* ( db read-options key -- value/f error/f )
86 utf8 encode dup length
90 dup [ void* deref alien>native-string ] when
94 [ size_t deref memory>byte-array ] dip
99 : rocksdb-delete* ( db write-options key -- error/f )
100 utf8 encode dup length
102 [ rocksdb_delete ] keep
103 dup [ void* deref alien>native-string ] when ;