rocksdb-native 1.2.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 CHANGED
@@ -13,13 +13,13 @@ const RocksDB = require('rocksdb-native')
13
13
 
14
14
  const db = new RocksDB('./example.db')
15
15
 
16
- const b = db.batch()
16
+ const w = db.write()
17
+ w.put('hello', 'world')
18
+ await w.flush()
17
19
 
18
- b.add('hello', 'world')
19
- await b.write()
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
@@ -45,14 +45,6 @@ typedef struct {
45
45
  js_ref_t *on_close;
46
46
  } rocksdb_native_close_t;
47
47
 
48
- typedef struct {
49
- rocksdb_delete_range_t handle;
50
-
51
- js_env_t *env;
52
- js_ref_t *ctx;
53
- js_ref_t *on_status;
54
- } rocksdb_native_delete_range_t;
55
-
56
48
  typedef struct {
57
49
  rocksdb_iterator_t handle;
58
50
 
@@ -67,10 +59,22 @@ typedef struct {
67
59
  } rocksdb_native_iterator_t;
68
60
 
69
61
  typedef struct {
70
- rocksdb_batch_t handle;
62
+ rocksdb_read_batch_t handle;
71
63
 
72
- rocksdb_slice_t *keys;
73
- rocksdb_slice_t *values;
64
+ rocksdb_read_t *reads;
65
+ char **errors;
66
+
67
+ size_t capacity;
68
+
69
+ js_env_t *env;
70
+ js_ref_t *ctx;
71
+ js_ref_t *on_status;
72
+ } rocksdb_native_read_batch_t;
73
+
74
+ typedef struct {
75
+ rocksdb_write_batch_t handle;
76
+
77
+ rocksdb_write_t *writes;
74
78
  char **errors;
75
79
 
76
80
  size_t capacity;
@@ -78,7 +82,7 @@ typedef struct {
78
82
  js_env_t *env;
79
83
  js_ref_t *ctx;
80
84
  js_ref_t *on_status;
81
- } rocksdb_native_batch_t;
85
+ } rocksdb_native_write_batch_t;
82
86
 
83
87
  static void
84
88
  rocksdb_native__on_free (js_env_t *env, void *data, void *finalize_hint) {
@@ -286,116 +290,17 @@ rocksdb_native_close (js_env_t *env, js_callback_info_t *info) {
286
290
  return handle;
287
291
  }
288
292
 
289
- static void
290
- rocksdb_native__on_delete_range (rocksdb_delete_range_t *handle, int status) {
291
- int err;
292
-
293
- assert(status == 0);
294
-
295
- rocksdb_native_delete_range_t *req = (rocksdb_native_delete_range_t *) handle->data;
296
-
297
- js_env_t *env = req->env;
298
-
299
- js_handle_scope_t *scope;
300
- err = js_open_handle_scope(env, &scope);
301
- assert(err == 0);
302
-
303
- js_value_t *ctx;
304
- err = js_get_reference_value(env, req->ctx, &ctx);
305
- assert(err == 0);
306
-
307
- js_value_t *cb;
308
- err = js_get_reference_value(env, req->on_status, &cb);
309
- assert(err == 0);
310
-
311
- js_value_t *error;
312
-
313
- if (req->handle.error) {
314
- err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
315
- assert(err == 0);
316
- } else {
317
- err = js_get_null(env, &error);
318
- assert(err == 0);
319
- }
320
-
321
- js_call_function(env, ctx, cb, 1, (js_value_t *[]){error}, NULL);
322
-
323
- err = js_close_handle_scope(env, scope);
324
- assert(err == 0);
325
-
326
- err = js_delete_reference(env, req->on_status);
327
- assert(err == 0);
328
-
329
- err = js_delete_reference(env, req->ctx);
330
- assert(err == 0);
331
- }
332
-
333
- static js_value_t *
334
- rocksdb_native_delete_range (js_env_t *env, js_callback_info_t *info) {
335
- int err;
336
-
337
- size_t argc = 7;
338
- js_value_t *argv[7];
339
-
340
- err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
341
- assert(err == 0);
342
-
343
- assert(argc == 7);
344
-
345
- rocksdb_native_t *db;
346
- err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
347
- assert(err == 0);
348
-
349
- js_value_t *handle;
350
-
351
- rocksdb_native_delete_range_t *req;
352
- err = js_create_arraybuffer(env, sizeof(rocksdb_native_delete_range_t), (void **) &req, &handle);
353
- assert(err == 0);
354
-
355
- req->env = env;
356
- req->handle.data = (void *) req;
357
-
358
- rocksdb_range_t range;
359
-
360
- err = js_get_typedarray_info(env, argv[1], NULL, (void **) &range.gt.data, &range.gt.len, NULL, NULL);
361
- assert(err == 0);
362
-
363
- err = js_get_typedarray_info(env, argv[2], NULL, (void **) &range.gte.data, &range.gte.len, NULL, NULL);
364
- assert(err == 0);
365
-
366
- err = js_get_typedarray_info(env, argv[3], NULL, (void **) &range.lt.data, &range.lt.len, NULL, NULL);
367
- assert(err == 0);
368
-
369
- err = js_get_typedarray_info(env, argv[4], NULL, (void **) &range.lte.data, &range.lte.len, NULL, NULL);
370
- assert(err == 0);
371
-
372
- err = js_create_reference(env, argv[5], 1, &req->ctx);
373
- assert(err == 0);
374
-
375
- err = js_create_reference(env, argv[6], 1, &req->on_status);
376
- assert(err == 0);
377
-
378
- err = rocksdb_delete_range(&db->handle, &req->handle, range, rocksdb_native__on_delete_range);
379
- assert(err == 0);
380
-
381
- return handle;
382
- }
383
-
384
293
  static js_value_t *
385
294
  rocksdb_native_iterator_init (js_env_t *env, js_callback_info_t *info) {
386
295
  int err;
387
296
 
388
- size_t argc = 5;
389
- js_value_t *argv[5];
297
+ size_t argc = 4;
298
+ js_value_t *argv[4];
390
299
 
391
300
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
392
301
  assert(err == 0);
393
302
 
394
- assert(argc == 5);
395
-
396
- rocksdb_native_t *db;
397
- err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
398
- assert(err == 0);
303
+ assert(argc == 4);
399
304
 
400
305
  js_value_t *handle;
401
306
 
@@ -403,22 +308,19 @@ rocksdb_native_iterator_init (js_env_t *env, js_callback_info_t *info) {
403
308
  err = js_create_arraybuffer(env, sizeof(rocksdb_native_iterator_t), (void **) &iterator, &handle);
404
309
  assert(err == 0);
405
310
 
406
- err = rocksdb_iterator_init(&db->handle, &iterator->handle);
407
- assert(err == 0);
408
-
409
311
  iterator->env = env;
410
312
  iterator->handle.data = (void *) iterator;
411
313
 
412
- err = js_create_reference(env, argv[1], 1, &iterator->ctx);
314
+ err = js_create_reference(env, argv[0], 1, &iterator->ctx);
413
315
  assert(err == 0);
414
316
 
415
- err = js_create_reference(env, argv[2], 1, &iterator->on_open);
317
+ err = js_create_reference(env, argv[1], 1, &iterator->on_open);
416
318
  assert(err == 0);
417
319
 
418
- err = js_create_reference(env, argv[3], 1, &iterator->on_close);
320
+ err = js_create_reference(env, argv[2], 1, &iterator->on_close);
419
321
  assert(err == 0);
420
322
 
421
- err = js_create_reference(env, argv[4], 1, &iterator->on_read);
323
+ err = js_create_reference(env, argv[3], 1, &iterator->on_read);
422
324
  assert(err == 0);
423
325
 
424
326
  return handle;
@@ -503,37 +405,41 @@ static js_value_t *
503
405
  rocksdb_native_iterator_open (js_env_t *env, js_callback_info_t *info) {
504
406
  int err;
505
407
 
506
- size_t argc = 6;
507
- js_value_t *argv[6];
408
+ size_t argc = 7;
409
+ js_value_t *argv[7];
508
410
 
509
411
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
510
412
  assert(err == 0);
511
413
 
512
- assert(argc == 6);
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);
513
419
 
514
420
  rocksdb_native_iterator_t *iterator;
515
- err = js_get_arraybuffer_info(env, argv[0], (void **) &iterator, NULL);
421
+ err = js_get_arraybuffer_info(env, argv[1], (void **) &iterator, NULL);
516
422
  assert(err == 0);
517
423
 
518
424
  rocksdb_range_t range;
519
425
 
520
- err = js_get_typedarray_info(env, argv[1], NULL, (void **) &range.gt.data, &range.gt.len, NULL, NULL);
426
+ err = js_get_typedarray_info(env, argv[2], NULL, (void **) &range.gt.data, &range.gt.len, NULL, NULL);
521
427
  assert(err == 0);
522
428
 
523
- err = js_get_typedarray_info(env, argv[2], NULL, (void **) &range.gte.data, &range.gte.len, NULL, NULL);
429
+ err = js_get_typedarray_info(env, argv[3], NULL, (void **) &range.gte.data, &range.gte.len, NULL, NULL);
524
430
  assert(err == 0);
525
431
 
526
- err = js_get_typedarray_info(env, argv[3], NULL, (void **) &range.lt.data, &range.lt.len, NULL, NULL);
432
+ err = js_get_typedarray_info(env, argv[4], NULL, (void **) &range.lt.data, &range.lt.len, NULL, NULL);
527
433
  assert(err == 0);
528
434
 
529
- err = js_get_typedarray_info(env, argv[4], NULL, (void **) &range.lte.data, &range.lte.len, NULL, NULL);
435
+ err = js_get_typedarray_info(env, argv[5], NULL, (void **) &range.lte.data, &range.lte.len, NULL, NULL);
530
436
  assert(err == 0);
531
437
 
532
438
  bool reverse;
533
- err = js_get_value_bool(env, argv[5], &reverse);
439
+ err = js_get_value_bool(env, argv[6], &reverse);
534
440
  assert(err == 0);
535
441
 
536
- 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);
537
443
  assert(err == 0);
538
444
 
539
445
  return NULL;
@@ -694,41 +600,34 @@ rocksdb_native_iterator_read (js_env_t *env, js_callback_info_t *info) {
694
600
  }
695
601
 
696
602
  static js_value_t *
697
- rocksdb_native_batch_init (js_env_t *env, js_callback_info_t *info) {
603
+ rocksdb_native_read_init (js_env_t *env, js_callback_info_t *info) {
698
604
  int err;
699
605
 
700
- size_t argc = 2;
701
- js_value_t *argv[2];
606
+ size_t argc = 1;
607
+ js_value_t *argv[1];
702
608
 
703
609
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
704
610
  assert(err == 0);
705
611
 
706
- assert(argc == 2);
707
-
708
- rocksdb_native_t *db;
709
- err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
710
- assert(err == 0);
612
+ assert(argc == 1);
711
613
 
712
614
  js_value_t *handle;
713
615
 
714
- rocksdb_native_batch_t *batch;
715
- err = js_create_arraybuffer(env, sizeof(rocksdb_native_batch_t), (void **) &batch, &handle);
716
- assert(err == 0);
717
-
718
- 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);
719
618
  assert(err == 0);
720
619
 
721
620
  batch->env = env;
722
621
  batch->handle.data = (void *) batch;
723
622
 
724
- err = js_create_reference(env, argv[1], 1, &batch->ctx);
623
+ err = js_create_reference(env, argv[0], 1, &batch->ctx);
725
624
  assert(err == 0);
726
625
 
727
626
  return handle;
728
627
  }
729
628
 
730
629
  static js_value_t *
731
- rocksdb_native_batch_buffer (js_env_t *env, js_callback_info_t *info) {
630
+ rocksdb_native_read_buffer (js_env_t *env, js_callback_info_t *info) {
732
631
  int err;
733
632
 
734
633
  size_t argc = 2;
@@ -739,7 +638,7 @@ rocksdb_native_batch_buffer (js_env_t *env, js_callback_info_t *info) {
739
638
 
740
639
  assert(argc == 2);
741
640
 
742
- rocksdb_native_batch_t *batch;
641
+ rocksdb_native_read_batch_t *batch;
743
642
  err = js_get_arraybuffer_info(env, argv[0], (void **) &batch, NULL);
744
643
  assert(err == 0);
745
644
 
@@ -750,51 +649,29 @@ rocksdb_native_batch_buffer (js_env_t *env, js_callback_info_t *info) {
750
649
  js_value_t *handle;
751
650
 
752
651
  uint8_t *data;
753
- err = js_create_arraybuffer(env, 2 * capacity * sizeof(rocksdb_slice_t) + capacity * sizeof(char *), (void **) &data, &handle);
652
+ err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_read_t) + capacity * sizeof(char *), (void **) &data, &handle);
754
653
  assert(err == 0);
755
654
 
756
655
  batch->capacity = capacity;
757
656
 
758
657
  size_t offset = 0;
759
658
 
760
- batch->keys = (rocksdb_slice_t *) &data[offset];
761
-
762
- offset += capacity * sizeof(rocksdb_slice_t);
659
+ batch->reads = (rocksdb_read_t *) &data[offset];
763
660
 
764
- batch->values = (rocksdb_slice_t *) &data[offset];
765
-
766
- offset += capacity * sizeof(rocksdb_slice_t);
661
+ offset += capacity * sizeof(rocksdb_read_t);
767
662
 
768
663
  batch->errors = (char **) &data[offset];
769
664
 
770
665
  return handle;
771
666
  }
772
667
 
773
- static inline int
774
- rocksdb_native__get_slices (js_env_t *env, js_value_t *arr, uint32_t len, rocksdb_slice_t *result) {
775
- int err;
776
-
777
- for (uint32_t i = 0; i < len; i++) {
778
- js_value_t *value;
779
- err = js_get_element(env, arr, i, &value);
780
- assert(err == 0);
781
-
782
- rocksdb_slice_t *slice = &result[i];
783
-
784
- err = js_get_typedarray_info(env, value, NULL, (void **) &slice->data, &slice->len, NULL, NULL);
785
- assert(err == 0);
786
- }
787
-
788
- return 0;
789
- }
790
-
791
668
  static void
792
- rocksdb_native__on_batch_read (rocksdb_batch_t *handle, int status) {
669
+ rocksdb_native__on_read (rocksdb_read_batch_t *handle, int status) {
793
670
  int err;
794
671
 
795
672
  assert(status == 0);
796
673
 
797
- rocksdb_native_batch_t *batch = (rocksdb_native_batch_t *) handle->data;
674
+ rocksdb_native_read_batch_t *batch = (rocksdb_native_read_batch_t *) handle->data;
798
675
 
799
676
  js_env_t *env = batch->env;
800
677
 
@@ -824,7 +701,7 @@ rocksdb_native__on_batch_read (rocksdb_batch_t *handle, int status) {
824
701
  err = js_set_element(env, errors, i, result);
825
702
  assert(err == 0);
826
703
  } else {
827
- rocksdb_slice_t *slice = &batch->values[i];
704
+ rocksdb_slice_t *slice = &batch->reads[i].value;
828
705
 
829
706
  err = js_create_external_arraybuffer(env, (void *) slice->data, slice->len, rocksdb_native__on_free, NULL, &result);
830
707
  assert(err == 0);
@@ -849,44 +726,140 @@ rocksdb_native__on_batch_read (rocksdb_batch_t *handle, int status) {
849
726
  }
850
727
 
851
728
  static js_value_t *
852
- rocksdb_native_batch_read (js_env_t *env, js_callback_info_t *info) {
729
+ rocksdb_native_read (js_env_t *env, js_callback_info_t *info) {
853
730
  int err;
854
731
 
855
- size_t argc = 3;
856
- js_value_t *argv[3];
732
+ size_t argc = 4;
733
+ js_value_t *argv[4];
857
734
 
858
735
  err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
859
736
  assert(err == 0);
860
737
 
861
- assert(argc == 3);
738
+ assert(argc == 4);
862
739
 
863
- rocksdb_native_batch_t *batch;
864
- err = js_get_arraybuffer_info(env, argv[0], (void **) &batch, NULL);
740
+ rocksdb_native_t *db;
741
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
865
742
  assert(err == 0);
866
743
 
867
- uint32_t len;
868
- err = js_get_array_length(env, argv[1], &len);
744
+ rocksdb_native_read_batch_t *batch;
745
+ err = js_get_arraybuffer_info(env, argv[1], (void **) &batch, NULL);
869
746
  assert(err == 0);
870
747
 
871
- err = js_create_reference(env, argv[2], 1, &batch->on_status);
748
+ uint32_t len;
749
+ err = js_get_array_length(env, argv[2], &len);
872
750
  assert(err == 0);
873
751
 
874
- err = rocksdb_native__get_slices(env, argv[1], len, batch->keys);
752
+ err = js_create_reference(env, argv[3], 1, &batch->on_status);
875
753
  assert(err == 0);
876
754
 
877
- err = rocksdb_batch_read(&batch->handle, batch->keys, batch->values, batch->errors, len, rocksdb_native__on_batch_read);
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);
878
785
  assert(err == 0);
879
786
 
880
787
  return NULL;
881
788
  }
882
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
+
883
856
  static void
884
- rocksdb_native__on_batch_write (rocksdb_batch_t *handle, int status) {
857
+ rocksdb_native__on_write (rocksdb_write_batch_t *handle, int status) {
885
858
  int err;
886
859
 
887
860
  assert(status == 0);
888
861
 
889
- rocksdb_native_batch_t *batch = (rocksdb_native_batch_t *) handle->data;
862
+ rocksdb_native_write_batch_t *batch = (rocksdb_native_write_batch_t *) handle->data;
890
863
 
891
864
  js_env_t *env = batch->env;
892
865
 
@@ -919,7 +892,7 @@ rocksdb_native__on_batch_write (rocksdb_batch_t *handle, int status) {
919
892
  }
920
893
 
921
894
  static js_value_t *
922
- rocksdb_native_batch_write (js_env_t *env, js_callback_info_t *info) {
895
+ rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
923
896
  int err;
924
897
 
925
898
  size_t argc = 4;
@@ -930,24 +903,89 @@ rocksdb_native_batch_write (js_env_t *env, js_callback_info_t *info) {
930
903
 
931
904
  assert(argc == 4);
932
905
 
933
- rocksdb_native_batch_t *batch;
934
- err = js_get_arraybuffer_info(env, argv[0], (void **) &batch, NULL);
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);
935
912
  assert(err == 0);
936
913
 
937
914
  uint32_t len;
938
- err = js_get_array_length(env, argv[1], &len);
915
+ err = js_get_array_length(env, argv[2], &len);
939
916
  assert(err == 0);
940
917
 
941
918
  err = js_create_reference(env, argv[3], 1, &batch->on_status);
942
919
  assert(err == 0);
943
920
 
944
- err = rocksdb_native__get_slices(env, argv[1], len, batch->keys);
945
- assert(err == 0);
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);
946
925
 
947
- err = rocksdb_native__get_slices(env, argv[2], len, batch->values);
948
- assert(err == 0);
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);
949
945
 
950
- err = rocksdb_batch_write(&batch->handle, batch->keys, batch->values, len, rocksdb_native__on_batch_write);
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
+ }
987
+
988
+ err = rocksdb_write(&db->handle, &batch->handle, batch->writes, len, rocksdb_native__on_write);
951
989
  assert(err == 0);
952
990
 
953
991
  return NULL;
@@ -969,7 +1007,6 @@ rocksdb_native_exports (js_env_t *env, js_value_t *exports) {
969
1007
  V("init", rocksdb_native_init)
970
1008
  V("open", rocksdb_native_open)
971
1009
  V("close", rocksdb_native_close)
972
- V("deleteRange", rocksdb_native_delete_range)
973
1010
 
974
1011
  V("iteratorInit", rocksdb_native_iterator_init)
975
1012
  V("iteratorBuffer", rocksdb_native_iterator_buffer)
@@ -977,10 +1014,28 @@ rocksdb_native_exports (js_env_t *env, js_value_t *exports) {
977
1014
  V("iteratorClose", rocksdb_native_iterator_close)
978
1015
  V("iteratorRead", rocksdb_native_iterator_read)
979
1016
 
980
- V("batchInit", rocksdb_native_batch_init)
981
- V("batchBuffer", rocksdb_native_batch_buffer)
982
- V("batchRead", rocksdb_native_batch_read)
983
- V("batchWrite", rocksdb_native_batch_write)
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)
984
1039
  #undef V
985
1040
 
986
1041
  return exports;