rocksdb-native 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/binding.c +257 -98
- package/index.js +9 -5
- package/lib/batch.js +182 -63
- package/lib/iterator.js +38 -31
- package/package.json +2 -1
- package/prebuilds/darwin-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/darwin-arm64/rocksdb-native.node +0 -0
- package/prebuilds/darwin-x64/rocksdb-native.bare +0 -0
- package/prebuilds/darwin-x64/rocksdb-native.node +0 -0
- package/prebuilds/linux-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/linux-arm64/rocksdb-native.node +0 -0
- package/prebuilds/linux-x64/rocksdb-native.bare +0 -0
- package/prebuilds/linux-x64/rocksdb-native.node +0 -0
- package/prebuilds/win32-x64/rocksdb-native.bare +0 -0
- package/prebuilds/win32-x64/rocksdb-native.node +0 -0
- package/vendor/librocksdb/include/rocksdb.h +57 -58
- package/vendor/librocksdb/src/rocksdb.cc +57 -184
package/README.md
CHANGED
|
@@ -13,13 +13,13 @@ const RocksDB = require('rocksdb-native')
|
|
|
13
13
|
|
|
14
14
|
const db = new RocksDB('./example.db')
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
const w = db.write()
|
|
17
|
+
w.put('hello', 'world')
|
|
18
|
+
await w.flush()
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const p = b.add('hello')
|
|
22
|
-
b.read()
|
|
20
|
+
const r = db.read()
|
|
21
|
+
const p = r.get('hello')
|
|
22
|
+
r.flush()
|
|
23
23
|
|
|
24
24
|
console.log(await p)
|
|
25
25
|
```
|
package/binding.c
CHANGED
|
@@ -59,10 +59,9 @@ typedef struct {
|
|
|
59
59
|
} rocksdb_native_iterator_t;
|
|
60
60
|
|
|
61
61
|
typedef struct {
|
|
62
|
-
|
|
62
|
+
rocksdb_read_batch_t handle;
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
rocksdb_slice_t *values;
|
|
64
|
+
rocksdb_read_t *reads;
|
|
66
65
|
char **errors;
|
|
67
66
|
|
|
68
67
|
size_t capacity;
|
|
@@ -70,7 +69,20 @@ typedef struct {
|
|
|
70
69
|
js_env_t *env;
|
|
71
70
|
js_ref_t *ctx;
|
|
72
71
|
js_ref_t *on_status;
|
|
73
|
-
}
|
|
72
|
+
} rocksdb_native_read_batch_t;
|
|
73
|
+
|
|
74
|
+
typedef struct {
|
|
75
|
+
rocksdb_write_batch_t handle;
|
|
76
|
+
|
|
77
|
+
rocksdb_write_t *writes;
|
|
78
|
+
char **errors;
|
|
79
|
+
|
|
80
|
+
size_t capacity;
|
|
81
|
+
|
|
82
|
+
js_env_t *env;
|
|
83
|
+
js_ref_t *ctx;
|
|
84
|
+
js_ref_t *on_status;
|
|
85
|
+
} rocksdb_native_write_batch_t;
|
|
74
86
|
|
|
75
87
|
static void
|
|
76
88
|
rocksdb_native__on_free (js_env_t *env, void *data, void *finalize_hint) {
|
|
@@ -282,17 +294,13 @@ static js_value_t *
|
|
|
282
294
|
rocksdb_native_iterator_init (js_env_t *env, js_callback_info_t *info) {
|
|
283
295
|
int err;
|
|
284
296
|
|
|
285
|
-
size_t argc =
|
|
286
|
-
js_value_t *argv[
|
|
297
|
+
size_t argc = 4;
|
|
298
|
+
js_value_t *argv[4];
|
|
287
299
|
|
|
288
300
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
289
301
|
assert(err == 0);
|
|
290
302
|
|
|
291
|
-
assert(argc ==
|
|
292
|
-
|
|
293
|
-
rocksdb_native_t *db;
|
|
294
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
295
|
-
assert(err == 0);
|
|
303
|
+
assert(argc == 4);
|
|
296
304
|
|
|
297
305
|
js_value_t *handle;
|
|
298
306
|
|
|
@@ -300,22 +308,19 @@ rocksdb_native_iterator_init (js_env_t *env, js_callback_info_t *info) {
|
|
|
300
308
|
err = js_create_arraybuffer(env, sizeof(rocksdb_native_iterator_t), (void **) &iterator, &handle);
|
|
301
309
|
assert(err == 0);
|
|
302
310
|
|
|
303
|
-
err = rocksdb_iterator_init(&db->handle, &iterator->handle);
|
|
304
|
-
assert(err == 0);
|
|
305
|
-
|
|
306
311
|
iterator->env = env;
|
|
307
312
|
iterator->handle.data = (void *) iterator;
|
|
308
313
|
|
|
309
|
-
err = js_create_reference(env, argv[
|
|
314
|
+
err = js_create_reference(env, argv[0], 1, &iterator->ctx);
|
|
310
315
|
assert(err == 0);
|
|
311
316
|
|
|
312
|
-
err = js_create_reference(env, argv[
|
|
317
|
+
err = js_create_reference(env, argv[1], 1, &iterator->on_open);
|
|
313
318
|
assert(err == 0);
|
|
314
319
|
|
|
315
|
-
err = js_create_reference(env, argv[
|
|
320
|
+
err = js_create_reference(env, argv[2], 1, &iterator->on_close);
|
|
316
321
|
assert(err == 0);
|
|
317
322
|
|
|
318
|
-
err = js_create_reference(env, argv[
|
|
323
|
+
err = js_create_reference(env, argv[3], 1, &iterator->on_read);
|
|
319
324
|
assert(err == 0);
|
|
320
325
|
|
|
321
326
|
return handle;
|
|
@@ -400,37 +405,41 @@ static js_value_t *
|
|
|
400
405
|
rocksdb_native_iterator_open (js_env_t *env, js_callback_info_t *info) {
|
|
401
406
|
int err;
|
|
402
407
|
|
|
403
|
-
size_t argc =
|
|
404
|
-
js_value_t *argv[
|
|
408
|
+
size_t argc = 7;
|
|
409
|
+
js_value_t *argv[7];
|
|
405
410
|
|
|
406
411
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
407
412
|
assert(err == 0);
|
|
408
413
|
|
|
409
|
-
assert(argc ==
|
|
414
|
+
assert(argc == 7);
|
|
415
|
+
|
|
416
|
+
rocksdb_native_t *db;
|
|
417
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
418
|
+
assert(err == 0);
|
|
410
419
|
|
|
411
420
|
rocksdb_native_iterator_t *iterator;
|
|
412
|
-
err = js_get_arraybuffer_info(env, argv[
|
|
421
|
+
err = js_get_arraybuffer_info(env, argv[1], (void **) &iterator, NULL);
|
|
413
422
|
assert(err == 0);
|
|
414
423
|
|
|
415
424
|
rocksdb_range_t range;
|
|
416
425
|
|
|
417
|
-
err = js_get_typedarray_info(env, argv[
|
|
426
|
+
err = js_get_typedarray_info(env, argv[2], NULL, (void **) &range.gt.data, &range.gt.len, NULL, NULL);
|
|
418
427
|
assert(err == 0);
|
|
419
428
|
|
|
420
|
-
err = js_get_typedarray_info(env, argv[
|
|
429
|
+
err = js_get_typedarray_info(env, argv[3], NULL, (void **) &range.gte.data, &range.gte.len, NULL, NULL);
|
|
421
430
|
assert(err == 0);
|
|
422
431
|
|
|
423
|
-
err = js_get_typedarray_info(env, argv[
|
|
432
|
+
err = js_get_typedarray_info(env, argv[4], NULL, (void **) &range.lt.data, &range.lt.len, NULL, NULL);
|
|
424
433
|
assert(err == 0);
|
|
425
434
|
|
|
426
|
-
err = js_get_typedarray_info(env, argv[
|
|
435
|
+
err = js_get_typedarray_info(env, argv[5], NULL, (void **) &range.lte.data, &range.lte.len, NULL, NULL);
|
|
427
436
|
assert(err == 0);
|
|
428
437
|
|
|
429
438
|
bool reverse;
|
|
430
|
-
err = js_get_value_bool(env, argv[
|
|
439
|
+
err = js_get_value_bool(env, argv[6], &reverse);
|
|
431
440
|
assert(err == 0);
|
|
432
441
|
|
|
433
|
-
err = rocksdb_iterator_open(&iterator->handle, range, reverse, rocksdb_native__on_iterator_open);
|
|
442
|
+
err = rocksdb_iterator_open(&db->handle, &iterator->handle, range, reverse, rocksdb_native__on_iterator_open);
|
|
434
443
|
assert(err == 0);
|
|
435
444
|
|
|
436
445
|
return NULL;
|
|
@@ -591,41 +600,34 @@ rocksdb_native_iterator_read (js_env_t *env, js_callback_info_t *info) {
|
|
|
591
600
|
}
|
|
592
601
|
|
|
593
602
|
static js_value_t *
|
|
594
|
-
|
|
603
|
+
rocksdb_native_read_init (js_env_t *env, js_callback_info_t *info) {
|
|
595
604
|
int err;
|
|
596
605
|
|
|
597
|
-
size_t argc =
|
|
598
|
-
js_value_t *argv[
|
|
606
|
+
size_t argc = 1;
|
|
607
|
+
js_value_t *argv[1];
|
|
599
608
|
|
|
600
609
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
601
610
|
assert(err == 0);
|
|
602
611
|
|
|
603
|
-
assert(argc ==
|
|
604
|
-
|
|
605
|
-
rocksdb_native_t *db;
|
|
606
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
607
|
-
assert(err == 0);
|
|
612
|
+
assert(argc == 1);
|
|
608
613
|
|
|
609
614
|
js_value_t *handle;
|
|
610
615
|
|
|
611
|
-
|
|
612
|
-
err = js_create_arraybuffer(env, sizeof(
|
|
613
|
-
assert(err == 0);
|
|
614
|
-
|
|
615
|
-
err = rocksdb_batch_init(&db->handle, &batch->handle);
|
|
616
|
+
rocksdb_native_read_batch_t *batch;
|
|
617
|
+
err = js_create_arraybuffer(env, sizeof(rocksdb_native_read_batch_t), (void **) &batch, &handle);
|
|
616
618
|
assert(err == 0);
|
|
617
619
|
|
|
618
620
|
batch->env = env;
|
|
619
621
|
batch->handle.data = (void *) batch;
|
|
620
622
|
|
|
621
|
-
err = js_create_reference(env, argv[
|
|
623
|
+
err = js_create_reference(env, argv[0], 1, &batch->ctx);
|
|
622
624
|
assert(err == 0);
|
|
623
625
|
|
|
624
626
|
return handle;
|
|
625
627
|
}
|
|
626
628
|
|
|
627
629
|
static js_value_t *
|
|
628
|
-
|
|
630
|
+
rocksdb_native_read_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
629
631
|
int err;
|
|
630
632
|
|
|
631
633
|
size_t argc = 2;
|
|
@@ -636,7 +638,7 @@ rocksdb_native_batch_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
|
636
638
|
|
|
637
639
|
assert(argc == 2);
|
|
638
640
|
|
|
639
|
-
|
|
641
|
+
rocksdb_native_read_batch_t *batch;
|
|
640
642
|
err = js_get_arraybuffer_info(env, argv[0], (void **) &batch, NULL);
|
|
641
643
|
assert(err == 0);
|
|
642
644
|
|
|
@@ -647,51 +649,29 @@ rocksdb_native_batch_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
|
647
649
|
js_value_t *handle;
|
|
648
650
|
|
|
649
651
|
uint8_t *data;
|
|
650
|
-
err = js_create_arraybuffer(env,
|
|
652
|
+
err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_read_t) + capacity * sizeof(char *), (void **) &data, &handle);
|
|
651
653
|
assert(err == 0);
|
|
652
654
|
|
|
653
655
|
batch->capacity = capacity;
|
|
654
656
|
|
|
655
657
|
size_t offset = 0;
|
|
656
658
|
|
|
657
|
-
batch->
|
|
658
|
-
|
|
659
|
-
offset += capacity * sizeof(rocksdb_slice_t);
|
|
660
|
-
|
|
661
|
-
batch->values = (rocksdb_slice_t *) &data[offset];
|
|
659
|
+
batch->reads = (rocksdb_read_t *) &data[offset];
|
|
662
660
|
|
|
663
|
-
offset += capacity * sizeof(
|
|
661
|
+
offset += capacity * sizeof(rocksdb_read_t);
|
|
664
662
|
|
|
665
663
|
batch->errors = (char **) &data[offset];
|
|
666
664
|
|
|
667
665
|
return handle;
|
|
668
666
|
}
|
|
669
667
|
|
|
670
|
-
static inline int
|
|
671
|
-
rocksdb_native__get_slices (js_env_t *env, js_value_t *arr, uint32_t len, rocksdb_slice_t *result) {
|
|
672
|
-
int err;
|
|
673
|
-
|
|
674
|
-
for (uint32_t i = 0; i < len; i++) {
|
|
675
|
-
js_value_t *value;
|
|
676
|
-
err = js_get_element(env, arr, i, &value);
|
|
677
|
-
assert(err == 0);
|
|
678
|
-
|
|
679
|
-
rocksdb_slice_t *slice = &result[i];
|
|
680
|
-
|
|
681
|
-
err = js_get_typedarray_info(env, value, NULL, (void **) &slice->data, &slice->len, NULL, NULL);
|
|
682
|
-
assert(err == 0);
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
return 0;
|
|
686
|
-
}
|
|
687
|
-
|
|
688
668
|
static void
|
|
689
|
-
|
|
669
|
+
rocksdb_native__on_read (rocksdb_read_batch_t *handle, int status) {
|
|
690
670
|
int err;
|
|
691
671
|
|
|
692
672
|
assert(status == 0);
|
|
693
673
|
|
|
694
|
-
|
|
674
|
+
rocksdb_native_read_batch_t *batch = (rocksdb_native_read_batch_t *) handle->data;
|
|
695
675
|
|
|
696
676
|
js_env_t *env = batch->env;
|
|
697
677
|
|
|
@@ -721,7 +701,7 @@ rocksdb_native__on_batch_read (rocksdb_batch_t *handle, int status) {
|
|
|
721
701
|
err = js_set_element(env, errors, i, result);
|
|
722
702
|
assert(err == 0);
|
|
723
703
|
} else {
|
|
724
|
-
rocksdb_slice_t *slice = &batch->
|
|
704
|
+
rocksdb_slice_t *slice = &batch->reads[i].value;
|
|
725
705
|
|
|
726
706
|
err = js_create_external_arraybuffer(env, (void *) slice->data, slice->len, rocksdb_native__on_free, NULL, &result);
|
|
727
707
|
assert(err == 0);
|
|
@@ -746,44 +726,140 @@ rocksdb_native__on_batch_read (rocksdb_batch_t *handle, int status) {
|
|
|
746
726
|
}
|
|
747
727
|
|
|
748
728
|
static js_value_t *
|
|
749
|
-
|
|
729
|
+
rocksdb_native_read (js_env_t *env, js_callback_info_t *info) {
|
|
750
730
|
int err;
|
|
751
731
|
|
|
752
|
-
size_t argc =
|
|
753
|
-
js_value_t *argv[
|
|
732
|
+
size_t argc = 4;
|
|
733
|
+
js_value_t *argv[4];
|
|
754
734
|
|
|
755
735
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
756
736
|
assert(err == 0);
|
|
757
737
|
|
|
758
|
-
assert(argc ==
|
|
738
|
+
assert(argc == 4);
|
|
759
739
|
|
|
760
|
-
|
|
761
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &
|
|
740
|
+
rocksdb_native_t *db;
|
|
741
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
762
742
|
assert(err == 0);
|
|
763
743
|
|
|
764
|
-
|
|
765
|
-
err =
|
|
744
|
+
rocksdb_native_read_batch_t *batch;
|
|
745
|
+
err = js_get_arraybuffer_info(env, argv[1], (void **) &batch, NULL);
|
|
766
746
|
assert(err == 0);
|
|
767
747
|
|
|
768
|
-
|
|
748
|
+
uint32_t len;
|
|
749
|
+
err = js_get_array_length(env, argv[2], &len);
|
|
769
750
|
assert(err == 0);
|
|
770
751
|
|
|
771
|
-
err =
|
|
752
|
+
err = js_create_reference(env, argv[3], 1, &batch->on_status);
|
|
772
753
|
assert(err == 0);
|
|
773
754
|
|
|
774
|
-
|
|
755
|
+
for (uint32_t i = 0; i < len; i++) {
|
|
756
|
+
js_value_t *read;
|
|
757
|
+
err = js_get_element(env, argv[2], i, &read);
|
|
758
|
+
assert(err == 0);
|
|
759
|
+
|
|
760
|
+
js_value_t *property;
|
|
761
|
+
err = js_get_named_property(env, read, "type", &property);
|
|
762
|
+
assert(err == 0);
|
|
763
|
+
|
|
764
|
+
rocksdb_read_type_t type;
|
|
765
|
+
err = js_get_value_uint32(env, property, &type);
|
|
766
|
+
assert(err == 0);
|
|
767
|
+
|
|
768
|
+
batch->reads[i].type = type;
|
|
769
|
+
|
|
770
|
+
switch (type) {
|
|
771
|
+
case rocksdb_get: {
|
|
772
|
+
rocksdb_slice_t *key = &batch->reads[i].key;
|
|
773
|
+
|
|
774
|
+
err = js_get_named_property(env, read, "key", &property);
|
|
775
|
+
assert(err == 0);
|
|
776
|
+
|
|
777
|
+
err = js_get_typedarray_info(env, property, NULL, (void **) &key->data, &key->len, NULL, NULL);
|
|
778
|
+
assert(err == 0);
|
|
779
|
+
break;
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
err = rocksdb_read(&db->handle, &batch->handle, batch->reads, batch->errors, len, rocksdb_native__on_read);
|
|
775
785
|
assert(err == 0);
|
|
776
786
|
|
|
777
787
|
return NULL;
|
|
778
788
|
}
|
|
779
789
|
|
|
790
|
+
static js_value_t *
|
|
791
|
+
rocksdb_native_write_init (js_env_t *env, js_callback_info_t *info) {
|
|
792
|
+
int err;
|
|
793
|
+
|
|
794
|
+
size_t argc = 1;
|
|
795
|
+
js_value_t *argv[1];
|
|
796
|
+
|
|
797
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
798
|
+
assert(err == 0);
|
|
799
|
+
|
|
800
|
+
assert(argc == 1);
|
|
801
|
+
|
|
802
|
+
js_value_t *handle;
|
|
803
|
+
|
|
804
|
+
rocksdb_native_write_batch_t *batch;
|
|
805
|
+
err = js_create_arraybuffer(env, sizeof(rocksdb_native_write_batch_t), (void **) &batch, &handle);
|
|
806
|
+
assert(err == 0);
|
|
807
|
+
|
|
808
|
+
batch->env = env;
|
|
809
|
+
batch->handle.data = (void *) batch;
|
|
810
|
+
|
|
811
|
+
err = js_create_reference(env, argv[0], 1, &batch->ctx);
|
|
812
|
+
assert(err == 0);
|
|
813
|
+
|
|
814
|
+
return handle;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
static js_value_t *
|
|
818
|
+
rocksdb_native_write_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
819
|
+
int err;
|
|
820
|
+
|
|
821
|
+
size_t argc = 2;
|
|
822
|
+
js_value_t *argv[2];
|
|
823
|
+
|
|
824
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
825
|
+
assert(err == 0);
|
|
826
|
+
|
|
827
|
+
assert(argc == 2);
|
|
828
|
+
|
|
829
|
+
rocksdb_native_write_batch_t *batch;
|
|
830
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &batch, NULL);
|
|
831
|
+
assert(err == 0);
|
|
832
|
+
|
|
833
|
+
uint32_t capacity;
|
|
834
|
+
err = js_get_value_uint32(env, argv[1], &capacity);
|
|
835
|
+
assert(err == 0);
|
|
836
|
+
|
|
837
|
+
js_value_t *handle;
|
|
838
|
+
|
|
839
|
+
uint8_t *data;
|
|
840
|
+
err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_write_t) + capacity * sizeof(char *), (void **) &data, &handle);
|
|
841
|
+
assert(err == 0);
|
|
842
|
+
|
|
843
|
+
batch->capacity = capacity;
|
|
844
|
+
|
|
845
|
+
size_t offset = 0;
|
|
846
|
+
|
|
847
|
+
batch->writes = (rocksdb_write_t *) &data[offset];
|
|
848
|
+
|
|
849
|
+
offset += capacity * sizeof(rocksdb_write_t);
|
|
850
|
+
|
|
851
|
+
batch->errors = (char **) &data[offset];
|
|
852
|
+
|
|
853
|
+
return handle;
|
|
854
|
+
}
|
|
855
|
+
|
|
780
856
|
static void
|
|
781
|
-
|
|
857
|
+
rocksdb_native__on_write (rocksdb_write_batch_t *handle, int status) {
|
|
782
858
|
int err;
|
|
783
859
|
|
|
784
860
|
assert(status == 0);
|
|
785
861
|
|
|
786
|
-
|
|
862
|
+
rocksdb_native_write_batch_t *batch = (rocksdb_native_write_batch_t *) handle->data;
|
|
787
863
|
|
|
788
864
|
js_env_t *env = batch->env;
|
|
789
865
|
|
|
@@ -816,7 +892,7 @@ rocksdb_native__on_batch_write (rocksdb_batch_t *handle, int status) {
|
|
|
816
892
|
}
|
|
817
893
|
|
|
818
894
|
static js_value_t *
|
|
819
|
-
|
|
895
|
+
rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
|
|
820
896
|
int err;
|
|
821
897
|
|
|
822
898
|
size_t argc = 4;
|
|
@@ -827,24 +903,89 @@ rocksdb_native_batch_write (js_env_t *env, js_callback_info_t *info) {
|
|
|
827
903
|
|
|
828
904
|
assert(argc == 4);
|
|
829
905
|
|
|
830
|
-
|
|
831
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &
|
|
906
|
+
rocksdb_native_t *db;
|
|
907
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
908
|
+
assert(err == 0);
|
|
909
|
+
|
|
910
|
+
rocksdb_native_write_batch_t *batch;
|
|
911
|
+
err = js_get_arraybuffer_info(env, argv[1], (void **) &batch, NULL);
|
|
832
912
|
assert(err == 0);
|
|
833
913
|
|
|
834
914
|
uint32_t len;
|
|
835
|
-
err = js_get_array_length(env, argv[
|
|
915
|
+
err = js_get_array_length(env, argv[2], &len);
|
|
836
916
|
assert(err == 0);
|
|
837
917
|
|
|
838
918
|
err = js_create_reference(env, argv[3], 1, &batch->on_status);
|
|
839
919
|
assert(err == 0);
|
|
840
920
|
|
|
841
|
-
|
|
842
|
-
|
|
921
|
+
for (uint32_t i = 0; i < len; i++) {
|
|
922
|
+
js_value_t *write;
|
|
923
|
+
err = js_get_element(env, argv[2], i, &write);
|
|
924
|
+
assert(err == 0);
|
|
843
925
|
|
|
844
|
-
|
|
845
|
-
|
|
926
|
+
js_value_t *property;
|
|
927
|
+
err = js_get_named_property(env, write, "type", &property);
|
|
928
|
+
assert(err == 0);
|
|
929
|
+
|
|
930
|
+
rocksdb_write_type_t type;
|
|
931
|
+
err = js_get_value_uint32(env, property, &type);
|
|
932
|
+
assert(err == 0);
|
|
933
|
+
|
|
934
|
+
batch->writes[i].type = type;
|
|
935
|
+
|
|
936
|
+
switch (type) {
|
|
937
|
+
case rocksdb_put: {
|
|
938
|
+
rocksdb_slice_t *key = &batch->writes[i].key;
|
|
939
|
+
|
|
940
|
+
err = js_get_named_property(env, write, "key", &property);
|
|
941
|
+
assert(err == 0);
|
|
942
|
+
|
|
943
|
+
err = js_get_typedarray_info(env, property, NULL, (void **) &key->data, &key->len, NULL, NULL);
|
|
944
|
+
assert(err == 0);
|
|
945
|
+
|
|
946
|
+
rocksdb_slice_t *value = &batch->writes[i].value;
|
|
947
|
+
|
|
948
|
+
err = js_get_named_property(env, write, "value", &property);
|
|
949
|
+
assert(err == 0);
|
|
950
|
+
|
|
951
|
+
err = js_get_typedarray_info(env, property, NULL, (void **) &value->data, &value->len, NULL, NULL);
|
|
952
|
+
assert(err == 0);
|
|
953
|
+
break;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
case rocksdb_delete: {
|
|
957
|
+
rocksdb_slice_t *key = &batch->writes[i].key;
|
|
958
|
+
|
|
959
|
+
err = js_get_named_property(env, write, "key", &property);
|
|
960
|
+
assert(err == 0);
|
|
961
|
+
|
|
962
|
+
err = js_get_typedarray_info(env, property, NULL, (void **) &key->data, &key->len, NULL, NULL);
|
|
963
|
+
assert(err == 0);
|
|
964
|
+
break;
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
case rocksdb_delete_range: {
|
|
968
|
+
rocksdb_slice_t *start = &batch->writes[i].start;
|
|
969
|
+
|
|
970
|
+
err = js_get_named_property(env, write, "start", &property);
|
|
971
|
+
assert(err == 0);
|
|
972
|
+
|
|
973
|
+
err = js_get_typedarray_info(env, property, NULL, (void **) &start->data, &start->len, NULL, NULL);
|
|
974
|
+
assert(err == 0);
|
|
975
|
+
|
|
976
|
+
rocksdb_slice_t *end = &batch->writes[i].end;
|
|
977
|
+
|
|
978
|
+
err = js_get_named_property(env, write, "end", &property);
|
|
979
|
+
assert(err == 0);
|
|
980
|
+
|
|
981
|
+
err = js_get_typedarray_info(env, property, NULL, (void **) &end->data, &end->len, NULL, NULL);
|
|
982
|
+
assert(err == 0);
|
|
983
|
+
break;
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
}
|
|
846
987
|
|
|
847
|
-
err =
|
|
988
|
+
err = rocksdb_write(&db->handle, &batch->handle, batch->writes, len, rocksdb_native__on_write);
|
|
848
989
|
assert(err == 0);
|
|
849
990
|
|
|
850
991
|
return NULL;
|
|
@@ -873,10 +1014,28 @@ rocksdb_native_exports (js_env_t *env, js_value_t *exports) {
|
|
|
873
1014
|
V("iteratorClose", rocksdb_native_iterator_close)
|
|
874
1015
|
V("iteratorRead", rocksdb_native_iterator_read)
|
|
875
1016
|
|
|
876
|
-
V("
|
|
877
|
-
V("
|
|
878
|
-
V("
|
|
879
|
-
|
|
1017
|
+
V("readInit", rocksdb_native_read_init)
|
|
1018
|
+
V("readBuffer", rocksdb_native_read_buffer)
|
|
1019
|
+
V("read", rocksdb_native_read)
|
|
1020
|
+
|
|
1021
|
+
V("writeInit", rocksdb_native_write_init)
|
|
1022
|
+
V("writeBuffer", rocksdb_native_write_buffer)
|
|
1023
|
+
V("write", rocksdb_native_write)
|
|
1024
|
+
#undef V
|
|
1025
|
+
|
|
1026
|
+
#define V(name, n) \
|
|
1027
|
+
{ \
|
|
1028
|
+
js_value_t *val; \
|
|
1029
|
+
err = js_create_uint32(env, n, &val); \
|
|
1030
|
+
assert(err == 0); \
|
|
1031
|
+
err = js_set_named_property(env, exports, name, val); \
|
|
1032
|
+
assert(err == 0); \
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
V("GET", rocksdb_get)
|
|
1036
|
+
V("PUT", rocksdb_put)
|
|
1037
|
+
V("DELETE", rocksdb_delete)
|
|
1038
|
+
V("DELETE_RANGE", rocksdb_delete_range)
|
|
880
1039
|
#undef V
|
|
881
1040
|
|
|
882
1041
|
return exports;
|
package/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* global Bare */
|
|
2
2
|
const ReadyResource = require('ready-resource')
|
|
3
3
|
const binding = require('./binding')
|
|
4
|
-
const
|
|
4
|
+
const { ReadBatch, WriteBatch } = require('./lib/batch')
|
|
5
5
|
const Iterator = require('./lib/iterator')
|
|
6
6
|
|
|
7
7
|
const RocksDB = module.exports = class RocksDB extends ReadyResource {
|
|
@@ -101,12 +101,16 @@ const RocksDB = module.exports = class RocksDB extends ReadyResource {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
return new
|
|
104
|
+
iterator (opts) {
|
|
105
|
+
return new Iterator(this, opts)
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
return new
|
|
108
|
+
read (opts) {
|
|
109
|
+
return new ReadBatch(this, opts)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
write (opts) {
|
|
113
|
+
return new WriteBatch(this, opts)
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
static _instances = new Set()
|