forestdb: Embrace the forestdb handle vs kvs handle idiom. Update tests.
parent
5e48dfb1e6
commit
91ba68cafe
|
@ -232,7 +232,7 @@ FUNCTION: fdb_status fdb_end_transaction ( fdb_file_handle* fhandle, fdb_commit_
|
||||||
FUNCTION: fdb_status fdb_abort_transaction ( fdb_file_handle* fhandle ) ;
|
FUNCTION: fdb_status fdb_abort_transaction ( fdb_file_handle* fhandle ) ;
|
||||||
FUNCTION: fdb_status fdb_kvs_open ( fdb_file_handle* fhandle,
|
FUNCTION: fdb_status fdb_kvs_open ( fdb_file_handle* fhandle,
|
||||||
fdb_kvs_handle** ptr_handle,
|
fdb_kvs_handle** ptr_handle,
|
||||||
char* kvs_name,
|
c-string kvs_name,
|
||||||
fdb_kvs_config* config ) ;
|
fdb_kvs_config* config ) ;
|
||||||
|
|
||||||
|
|
||||||
|
@ -242,5 +242,5 @@ FUNCTION: fdb_status fdb_kvs_open_default ( fdb_file_handle* fhandle,
|
||||||
|
|
||||||
FUNCTION: fdb_status fdb_kvs_close ( fdb_kvs_handle* handle ) ;
|
FUNCTION: fdb_status fdb_kvs_close ( fdb_kvs_handle* handle ) ;
|
||||||
|
|
||||||
FUNCTION: fdb_status fdb_kvs_remove ( fdb_file_handle* fhandle, char* kvs_name ) ;
|
FUNCTION: fdb_status fdb_kvs_remove ( fdb_file_handle* fhandle, c-string kvs_name ) ;
|
||||||
FUNCTION: char* fdb_error_msg ( fdb_status err_code ) ;
|
FUNCTION: char* fdb_error_msg ( fdb_status err_code ) ;
|
||||||
|
|
|
@ -6,7 +6,7 @@ combinators.short-circuit constructors continuations destructors
|
||||||
forestdb.ffi forestdb.utils fry generalizations io.directories
|
forestdb.ffi forestdb.utils fry generalizations io.directories
|
||||||
io.encodings.string io.encodings.utf8 io.files.temp io.pathnames
|
io.encodings.string io.encodings.utf8 io.files.temp io.pathnames
|
||||||
kernel layouts libc make math math.parser math.ranges multiline
|
kernel layouts libc make math math.parser math.ranges multiline
|
||||||
namespaces sequences system tools.test ;
|
namespaces sequences system tools.test nested-comments ;
|
||||||
IN: forestdb.lib
|
IN: forestdb.lib
|
||||||
|
|
||||||
{ [ cell-bits 32 = ] [ os windows? ] } 0&& [
|
{ [ cell-bits 32 = ] [ os windows? ] } 0&& [
|
||||||
|
@ -18,17 +18,21 @@ IN: forestdb.lib
|
||||||
{ "val123" } [
|
{ "val123" } [
|
||||||
delete-test-db-0
|
delete-test-db-0
|
||||||
test-db-0 [
|
test-db-0 [
|
||||||
|
"test123" [
|
||||||
"key123" "val123" fdb-set-kv
|
"key123" "val123" fdb-set-kv
|
||||||
"key123" fdb-get-kv
|
"key123" fdb-get-kv
|
||||||
] with-forestdb-path
|
] with-kvs
|
||||||
|
] with-forestdb
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ "val12345" } [
|
{ "val12345" } [
|
||||||
delete-test-db-0
|
delete-test-db-0
|
||||||
test-db-0 [
|
test-db-0 [
|
||||||
|
"test123" [
|
||||||
"key123" "val12345" fdb-set-kv
|
"key123" "val12345" fdb-set-kv
|
||||||
"key123" fdb-get-kv
|
"key123" fdb-get-kv
|
||||||
] with-forestdb-path
|
] with-kvs
|
||||||
|
] with-forestdb
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! Get
|
! Get
|
||||||
|
@ -42,9 +46,10 @@ IN: forestdb.lib
|
||||||
"key1" "meta" "val" [
|
"key1" "meta" "val" [
|
||||||
fdb_doc>doc [ key>> ] [ body>> ] bi 2array
|
fdb_doc>doc [ key>> ] [ body>> ] bi 2array
|
||||||
] with-create-doc
|
] with-create-doc
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
{ "key1" f "val1" }
|
{ "key1" f "val1" }
|
||||||
} [
|
} [
|
||||||
|
@ -55,7 +60,7 @@ IN: forestdb.lib
|
||||||
fdb-get
|
fdb-get
|
||||||
fdb_doc>doc [ key>> ] [ meta>> ] [ body>> ] tri 3array
|
fdb_doc>doc [ key>> ] [ meta>> ] [ body>> ] tri 3array
|
||||||
] with-create-doc
|
] with-create-doc
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +74,7 @@ IN: forestdb.lib
|
||||||
fdb-get-byseq fdb_doc>doc
|
fdb-get-byseq fdb_doc>doc
|
||||||
[ key>> ] [ meta>> ] [ body>> ] tri 3array
|
[ key>> ] [ meta>> ] [ body>> ] tri 3array
|
||||||
] with-doc
|
] with-doc
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -82,16 +87,15 @@ IN: forestdb.lib
|
||||||
fdb-get-byseq fdb_doc>doc
|
fdb-get-byseq fdb_doc>doc
|
||||||
[ key>> ] [ meta>> ] [ body>> ] tri 3array
|
[ key>> ] [ meta>> ] [ body>> ] tri 3array
|
||||||
] with-doc
|
] with-doc
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
||||||
! Filename is only valid inside with-forestdb
|
! Filename is only valid inside with-forestdb
|
||||||
{ f } [
|
{ f } [
|
||||||
delete-test-db-0
|
delete-test-db-0
|
||||||
test-db-0 [
|
test-db-0 [
|
||||||
fdb-get-info filename>> alien>native-string empty?
|
fdb-get-info filename>> alien>native-string empty?
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! Test fdb_doc_create
|
! Test fdb_doc_create
|
||||||
|
@ -101,7 +105,7 @@ IN: forestdb.lib
|
||||||
"key123" "meta blah" "some body" [
|
"key123" "meta blah" "some body" [
|
||||||
[ keylen>> ] [ metalen>> ] [ bodylen>> ] tri
|
[ keylen>> ] [ metalen>> ] [ bodylen>> ] tri
|
||||||
] with-create-doc
|
] with-create-doc
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ 7 8 15 } [
|
{ 7 8 15 } [
|
||||||
|
@ -111,7 +115,7 @@ IN: forestdb.lib
|
||||||
[ "new meta" "some other body" fdb-doc-update ]
|
[ "new meta" "some other body" fdb-doc-update ]
|
||||||
[ [ keylen>> ] [ metalen>> ] [ bodylen>> ] tri ] bi
|
[ [ keylen>> ] [ metalen>> ] [ bodylen>> ] tri ] bi
|
||||||
] with-create-doc
|
] with-create-doc
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ 1 1 } [
|
{ 1 1 } [
|
||||||
|
@ -120,7 +124,7 @@ IN: forestdb.lib
|
||||||
1 set-kv-n
|
1 set-kv-n
|
||||||
fdb-commit-normal
|
fdb-commit-normal
|
||||||
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ 6 5 } [
|
{ 6 5 } [
|
||||||
|
@ -130,7 +134,7 @@ IN: forestdb.lib
|
||||||
5 set-kv-nth
|
5 set-kv-nth
|
||||||
fdb-commit-normal
|
fdb-commit-normal
|
||||||
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ 5 5 } [
|
{ 5 5 } [
|
||||||
|
@ -139,10 +143,12 @@ IN: forestdb.lib
|
||||||
5 set-kv-n
|
5 set-kv-n
|
||||||
fdb-commit-normal
|
fdb-commit-normal
|
||||||
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! Snapshots
|
! Snapshots
|
||||||
|
|
||||||
|
/*
|
||||||
{ 5 5 } [
|
{ 5 5 } [
|
||||||
delete-test-db-1
|
delete-test-db-1
|
||||||
test-db-1 [
|
test-db-1 [
|
||||||
|
@ -151,8 +157,10 @@ IN: forestdb.lib
|
||||||
FDB_SNAPSHOT_INMEM [
|
FDB_SNAPSHOT_INMEM [
|
||||||
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
||||||
] with-forestdb-snapshot
|
] with-forestdb-snapshot
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
! Snapshots can only occur on commits. If you commit five keys at once,
|
! Snapshots can only occur on commits. If you commit five keys at once,
|
||||||
|
@ -167,11 +175,10 @@ IN: forestdb.lib
|
||||||
FDB_SNAPSHOT_INMEM [
|
FDB_SNAPSHOT_INMEM [
|
||||||
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi
|
||||||
] with-forestdb-snapshot
|
] with-forestdb-snapshot
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] [
|
] [
|
||||||
T{ fdb-error { error FDB_RESULT_NO_DB_INSTANCE } } =
|
T{ fdb-error { error FDB_RESULT_NO_DB_INSTANCE } } =
|
||||||
] must-fail-with
|
] must-fail-with
|
||||||
*/
|
|
||||||
|
|
||||||
! Test that we take two snapshots and their seqnums/doc counts are right.
|
! Test that we take two snapshots and their seqnums/doc counts are right.
|
||||||
! XXX: Buggy, want to see the first snapshot's document count at 5 too
|
! XXX: Buggy, want to see the first snapshot's document count at 5 too
|
||||||
|
@ -194,9 +201,10 @@ IN: forestdb.lib
|
||||||
FDB_SNAPSHOT_INMEM [
|
FDB_SNAPSHOT_INMEM [
|
||||||
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi 2array
|
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi 2array
|
||||||
] with-forestdb-snapshot
|
] with-forestdb-snapshot
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
||||||
! Same test as above, but with buggy behavior for now so it passes
|
! Same test as above, but with buggy behavior for now so it passes
|
||||||
{
|
{
|
||||||
7
|
7
|
||||||
|
@ -217,10 +225,12 @@ IN: forestdb.lib
|
||||||
FDB_SNAPSHOT_INMEM [
|
FDB_SNAPSHOT_INMEM [
|
||||||
fdb-get-kvs-info last_seqnum>>
|
fdb-get-kvs-info last_seqnum>>
|
||||||
] with-forestdb-snapshot
|
] with-forestdb-snapshot
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
! Rollback test
|
! Rollback test
|
||||||
! Make sure the doc_count is correct after a rollback
|
! Make sure the doc_count is correct after a rollback
|
||||||
{
|
{
|
||||||
|
@ -244,9 +254,11 @@ IN: forestdb.lib
|
||||||
FDB_SNAPSHOT_INMEM [
|
FDB_SNAPSHOT_INMEM [
|
||||||
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi 2array
|
fdb-get-kvs-info [ last_seqnum>> ] [ doc_count>> ] bi 2array
|
||||||
] with-forestdb-snapshot
|
] with-forestdb-snapshot
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
! Iterators test
|
! Iterators test
|
||||||
! No matching keys
|
! No matching keys
|
||||||
|
@ -262,7 +274,7 @@ IN: forestdb.lib
|
||||||
fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
|
fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
|
||||||
] with-fdb-normal-iterator
|
] with-fdb-normal-iterator
|
||||||
] { } make
|
] { } make
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! All the keys
|
! All the keys
|
||||||
|
@ -284,7 +296,7 @@ IN: forestdb.lib
|
||||||
fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
|
fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
|
||||||
] with-fdb-normal-iterator
|
] with-fdb-normal-iterator
|
||||||
] { } make
|
] { } make
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! Test that keys at extremes get returned
|
! Test that keys at extremes get returned
|
||||||
|
@ -302,7 +314,7 @@ IN: forestdb.lib
|
||||||
fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
|
fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
|
||||||
] with-fdb-normal-iterator
|
] with-fdb-normal-iterator
|
||||||
] { } make
|
] { } make
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -319,7 +331,7 @@ IN: forestdb.lib
|
||||||
fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
|
fdb_doc>doc [ seqnum>> ] [ key>> ] [ body>> ] tri 3array ,
|
||||||
] with-fdb-normal-iterator
|
] with-fdb-normal-iterator
|
||||||
] { } make
|
] { } make
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
||||||
|
@ -335,7 +347,7 @@ IN: forestdb.lib
|
||||||
fdb_doc>doc
|
fdb_doc>doc
|
||||||
] with-fdb-byseq-map
|
] with-fdb-byseq-map
|
||||||
[ seqnum>> ] map
|
[ seqnum>> ] map
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! Deleting 5 keys gives you 5 new seqnums that are those docs, but deleted
|
! Deleting 5 keys gives you 5 new seqnums that are those docs, but deleted
|
||||||
|
@ -351,7 +363,7 @@ IN: forestdb.lib
|
||||||
fdb_doc>doc
|
fdb_doc>doc
|
||||||
] with-fdb-byseq-map
|
] with-fdb-byseq-map
|
||||||
[ [ seqnum>> ] [ deleted?>> ] bi 2array ] map
|
[ [ seqnum>> ] [ deleted?>> ] bi 2array ] map
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -373,7 +385,7 @@ IN: forestdb.lib
|
||||||
[ [ key>> ] [ keylen>> ] bi alien/length>string ] bi 2array ,
|
[ [ key>> ] [ keylen>> ] bi alien/length>string ] bi 2array ,
|
||||||
] with-fdb-byseq-each
|
] with-fdb-byseq-each
|
||||||
] { } make
|
] { } make
|
||||||
] with-forestdb-path
|
] with-forestdb-tester
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
] unless
|
] unless
|
|
@ -10,8 +10,7 @@ IN: forestdb.lib
|
||||||
|
|
||||||
/*
|
/*
|
||||||
! Issues
|
! Issues
|
||||||
! 4) byseq iteration doesn't have bodies, weird.
|
! Get byseq ignores seqnum and uses key instead if key is set
|
||||||
! 5) Get byseq ignores seqnum and uses key instead if key is set
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ERROR: fdb-error error ;
|
ERROR: fdb-error error ;
|
||||||
|
@ -19,6 +18,7 @@ ERROR: fdb-error error ;
|
||||||
: fdb-check-error ( ret -- )
|
: fdb-check-error ( ret -- )
|
||||||
dup FDB_RESULT_SUCCESS = [ drop ] [ fdb-error ] if ;
|
dup FDB_RESULT_SUCCESS = [ drop ] [ fdb-error ] if ;
|
||||||
|
|
||||||
|
|
||||||
TUPLE: fdb-kvs-handle < disposable handle ;
|
TUPLE: fdb-kvs-handle < disposable handle ;
|
||||||
: <fdb-kvs-handle> ( handle -- obj )
|
: <fdb-kvs-handle> ( handle -- obj )
|
||||||
fdb-kvs-handle new-disposable
|
fdb-kvs-handle new-disposable
|
||||||
|
@ -36,35 +36,10 @@ TUPLE: fdb-file-handle < disposable handle ;
|
||||||
M: fdb-file-handle dispose*
|
M: fdb-file-handle dispose*
|
||||||
handle>> fdb_close fdb-check-error ;
|
handle>> fdb_close fdb-check-error ;
|
||||||
|
|
||||||
|
|
||||||
SYMBOL: current-fdb-file-handle
|
SYMBOL: current-fdb-file-handle
|
||||||
SYMBOL: current-fdb-kvs-handle
|
SYMBOL: current-fdb-kvs-handle
|
||||||
|
|
||||||
: get-kvs-default-config ( -- kvs-config )
|
|
||||||
S{ fdb_kvs_config
|
|
||||||
{ create_if_missing t }
|
|
||||||
{ custom_cmp f }
|
|
||||||
} clone ;
|
|
||||||
|
|
||||||
: fdb-open-kvs' ( file-handle fdb-kvs-handle kvs-config -- file-handle handle )
|
|
||||||
[ dup handle>> ] 2dip
|
|
||||||
[ handle>> ] dip
|
|
||||||
[ fdb_kvs_open_default fdb-check-error ] 2keep drop
|
|
||||||
void* deref <fdb-kvs-handle> ;
|
|
||||||
|
|
||||||
: fdb-open-kvs ( fdb-file-handle kvs-config -- file-handle handle )
|
|
||||||
[ f void* <ref> <fdb-kvs-handle> ] dip fdb-open-kvs' ;
|
|
||||||
|
|
||||||
: fdb-open ( path config kvs-config -- file-handle handle )
|
|
||||||
[
|
|
||||||
[ f void* <ref> ] 2dip
|
|
||||||
[ absolute-path ensure-fdb-filename-directory ] dip
|
|
||||||
[ fdb_open fdb-check-error ] 3keep
|
|
||||||
2drop void* deref <fdb-file-handle>
|
|
||||||
] dip fdb-open-kvs ;
|
|
||||||
|
|
||||||
: fdb-open-default-config ( path -- file-handle handle )
|
|
||||||
fdb_get_default_config get-kvs-default-config fdb-open ;
|
|
||||||
|
|
||||||
: get-file-handle ( -- handle )
|
: get-file-handle ( -- handle )
|
||||||
current-fdb-file-handle get handle>> ;
|
current-fdb-file-handle get handle>> ;
|
||||||
|
|
||||||
|
@ -174,16 +149,6 @@ SYMBOL: current-fdb-kvs-handle
|
||||||
: fdb-compact-commit ( new-path -- )
|
: fdb-compact-commit ( new-path -- )
|
||||||
fdb-compact fdb-commit-wal-flush ;
|
fdb-compact fdb-commit-wal-flush ;
|
||||||
|
|
||||||
: fdb-swap-current-db ( new-path -- )
|
|
||||||
current-fdb-kvs-handle [ dispose f ] change
|
|
||||||
fdb-open-default-config
|
|
||||||
[ current-fdb-file-handle set ]
|
|
||||||
[ current-fdb-kvs-handle set ] bi* ;
|
|
||||||
|
|
||||||
: fdb-compact-and-swap-db ( path -- )
|
|
||||||
next-vnode-version-name
|
|
||||||
[ fdb-compact fdb-commit-wal-flush ]
|
|
||||||
[ fdb-swap-current-db ] bi ;
|
|
||||||
|
|
||||||
! Call from within with-foresdb
|
! Call from within with-foresdb
|
||||||
: fdb-open-snapshot ( seqnum -- handle )
|
: fdb-open-snapshot ( seqnum -- handle )
|
||||||
|
@ -328,6 +293,33 @@ T{ doc
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
||||||
|
: get-kvs-default-config ( -- kvs-config )
|
||||||
|
S{ fdb_kvs_config
|
||||||
|
{ create_if_missing t }
|
||||||
|
{ custom_cmp f }
|
||||||
|
} clone ;
|
||||||
|
|
||||||
|
: fdb-open ( path config -- file-handle )
|
||||||
|
[ f void* <ref> ] 2dip
|
||||||
|
[ absolute-path ensure-fdb-filename-directory ] dip
|
||||||
|
[ fdb_open fdb-check-error ] 3keep
|
||||||
|
2drop void* deref <fdb-file-handle> ;
|
||||||
|
|
||||||
|
: fdb-open-default-config ( path -- file-handle )
|
||||||
|
fdb_get_default_config fdb-open ;
|
||||||
|
|
||||||
|
: fdb-kvs-open-config ( name config -- kvs-handle )
|
||||||
|
[
|
||||||
|
current-fdb-file-handle get handle>>
|
||||||
|
f void* <ref>
|
||||||
|
] 2dip
|
||||||
|
[ fdb_kvs_open fdb-check-error ] 3keep 2drop
|
||||||
|
void* deref <fdb-kvs-handle> ;
|
||||||
|
|
||||||
|
: fdb-kvs-open ( name -- kvs-handle )
|
||||||
|
get-kvs-default-config fdb-kvs-open-config ;
|
||||||
|
|
||||||
: with-fdb-map ( start-key end-key fdb_iterator_opt_t iterator-init iterator-next quot: ( obj -- ) -- )
|
: with-fdb-map ( start-key end-key fdb_iterator_opt_t iterator-init iterator-next quot: ( obj -- ) -- )
|
||||||
[ execute ] 2dip
|
[ execute ] 2dip
|
||||||
swap
|
swap
|
||||||
|
@ -351,6 +343,27 @@ PRIVATE>
|
||||||
[ FDB_ITR_NONE \ fdb-iterator-byseq-init \ fdb_iterator_next ] dip
|
[ FDB_ITR_NONE \ fdb-iterator-byseq-init \ fdb_iterator_next ] dip
|
||||||
with-fdb-map ; inline
|
with-fdb-map ; inline
|
||||||
|
|
||||||
|
|
||||||
|
: with-kvs ( name quot -- )
|
||||||
|
[
|
||||||
|
[ fdb-kvs-open &dispose current-fdb-kvs-handle ] dip with-variable
|
||||||
|
] with-destructors ; inline
|
||||||
|
|
||||||
|
|
||||||
|
: with-default-kvs ( quot -- )
|
||||||
|
[ "default" ] dip with-kvs ; inline
|
||||||
|
|
||||||
|
: with-forestdb ( path quot -- )
|
||||||
|
[
|
||||||
|
[ fdb-open-default-config &dispose current-fdb-file-handle ] dip with-variable
|
||||||
|
] with-destructors ; inline
|
||||||
|
|
||||||
|
: with-forestdb-kvs ( path name quot -- )
|
||||||
|
'[
|
||||||
|
_ _ with-kvs
|
||||||
|
] with-forestdb ; inline
|
||||||
|
|
||||||
|
/*
|
||||||
! Do not try to commit here, as it will fail with FDB_RESULT_RONLY_VIOLATION
|
! Do not try to commit here, as it will fail with FDB_RESULT_RONLY_VIOLATION
|
||||||
! fdb-current is weird, it gets replaced if you call fdb-rollback
|
! fdb-current is weird, it gets replaced if you call fdb-rollback
|
||||||
! Therefore, only clean up fdb-current once, and clean it up at the end
|
! Therefore, only clean up fdb-current once, and clean it up at the end
|
||||||
|
@ -398,3 +411,4 @@ PRIVATE>
|
||||||
: with-forestdb-path ( path quot -- )
|
: with-forestdb-path ( path quot -- )
|
||||||
[ absolute-path fdb-open-default-config ] dip with-forestdb-handles-commit-wal ; inline
|
[ absolute-path fdb-open-default-config ] dip with-forestdb-handles-commit-wal ; inline
|
||||||
! [ absolute-path fdb-open-default-config ] dip with-forestdb-handle-commit-normal ; inline
|
! [ absolute-path fdb-open-default-config ] dip with-forestdb-handle-commit-normal ; inline
|
||||||
|
*/
|
|
@ -1,12 +1,17 @@
|
||||||
! Copyright (C) 2014 Doug Coleman.
|
! Copyright (C) 2014 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: assocs continuations forestdb.lib io.directories
|
USING: assocs continuations forestdb.lib fry io.directories
|
||||||
io.files.temp kernel math.parser math.ranges sequences ;
|
io.files.temp kernel math.parser math.ranges sequences ;
|
||||||
IN: forestdb.utils
|
IN: forestdb.utils
|
||||||
|
|
||||||
: test-db-0 ( -- path ) "0.forestdb.0" temp-file ;
|
: test-db-0 ( -- path ) "0.forestdb.0" temp-file ;
|
||||||
: test-db-1 ( -- path ) "1.forestdb.0" temp-file ;
|
: test-db-1 ( -- path ) "1.forestdb.0" temp-file ;
|
||||||
|
|
||||||
|
: with-forestdb-tester ( path quot -- )
|
||||||
|
'[
|
||||||
|
"default" _ with-kvs
|
||||||
|
] with-forestdb ; inline
|
||||||
|
|
||||||
: delete-test-db-0 ( -- ) [ test-db-0 delete-file ] ignore-errors ;
|
: delete-test-db-0 ( -- ) [ test-db-0 delete-file ] ignore-errors ;
|
||||||
: delete-test-db-1 ( -- ) [ test-db-1 delete-file ] ignore-errors ;
|
: delete-test-db-1 ( -- ) [ test-db-1 delete-file ] ignore-errors ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue