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.
@@ -366,119 +366,6 @@ rocksdb__iterator_refresh (Iterator *iterator, T *req) {
366
366
  rocksdb__iterator_seek(iterator, req);
367
367
  }
368
368
 
369
- static void
370
- rocksdb__on_after_read_range (uv_work_t *handle, int status) {
371
- auto req = reinterpret_cast<rocksdb_read_range_t *>(handle->data);
372
-
373
- auto error = req->error;
374
-
375
- req->cb(req, status);
376
-
377
- if (error) free(error);
378
- }
379
-
380
- static void
381
- rocksdb__on_read_range (uv_work_t *handle) {
382
- auto req = reinterpret_cast<rocksdb_read_range_t *>(handle->data);
383
-
384
- auto iterator = rocksdb__iterator_open(req);
385
-
386
- rocksdb__iterator_read(iterator, req);
387
-
388
- auto status = iterator->status();
389
-
390
- if (status.ok()) {
391
- req->error = nullptr;
392
- } else {
393
- req->error = strdup(status.getState());
394
- }
395
-
396
- delete iterator;
397
- }
398
-
399
- extern "C" int
400
- rocksdb_read_range (rocksdb_t *db, rocksdb_read_range_t *req, rocksdb_range_t range, bool reverse, rocksdb_slice_t *keys, rocksdb_slice_t *values, size_t capacity, rocksdb_read_range_cb cb) {
401
- req->db = db;
402
- req->range = range;
403
- req->reverse = reverse;
404
- req->keys = keys;
405
- req->values = values;
406
- req->len = 0;
407
- req->capacity = capacity;
408
- req->cb = cb;
409
-
410
- req->worker.data = static_cast<void *>(req);
411
-
412
- return uv_queue_work(db->loop, &req->worker, rocksdb__on_read_range, rocksdb__on_after_read_range);
413
- }
414
-
415
- static void
416
- rocksdb__on_after_delete_range (uv_work_t *handle, int status) {
417
- auto req = reinterpret_cast<rocksdb_delete_range_t *>(handle->data);
418
-
419
- auto error = req->error;
420
-
421
- req->cb(req, status);
422
-
423
- if (error) free(error);
424
- }
425
-
426
- static void
427
- rocksdb__on_delete_range (uv_work_t *handle) {
428
- auto req = reinterpret_cast<rocksdb_delete_range_t *>(handle->data);
429
-
430
- auto db = reinterpret_cast<DB *>(req->db->handle);
431
-
432
- const auto &range = req->range;
433
-
434
- if (range.gte.len && range.lt.len) {
435
- auto status = db->DeleteRange(WriteOptions(), rocksdb__slice_cast(range.gte), rocksdb__slice_cast(range.lt));
436
-
437
- if (status.ok()) {
438
- req->error = nullptr;
439
- } else {
440
- req->error = strdup(status.getState());
441
- }
442
- } else {
443
- auto iterator = rocksdb__iterator_open(db, req->range);
444
-
445
- req->error = nullptr;
446
-
447
- while (rocksdb__iterator_valid(iterator, req->range)) {
448
- auto status = db->Delete(WriteOptions(), iterator->key());
449
-
450
- if (status.ok()) {
451
- rocksdb__iterator_next(iterator);
452
- } else {
453
- req->error = strdup(status.getState());
454
- break;
455
- }
456
- }
457
-
458
- delete iterator;
459
- }
460
- }
461
-
462
- extern "C" int
463
- rocksdb_delete_range (rocksdb_t *db, rocksdb_delete_range_t *req, rocksdb_range_t range, rocksdb_delete_range_cb cb) {
464
- req->db = db;
465
- req->range = range;
466
- req->cb = cb;
467
-
468
- req->worker.data = static_cast<void *>(req);
469
-
470
- return uv_queue_work(db->loop, &req->worker, rocksdb__on_delete_range, rocksdb__on_after_delete_range);
471
- }
472
-
473
- extern "C" int
474
- rocksdb_iterator_init (rocksdb_t *db, rocksdb_iterator_t *iterator) {
475
- iterator->db = db;
476
-
477
- iterator->worker.data = static_cast<void *>(iterator);
478
-
479
- return 0;
480
- }
481
-
482
369
  static void
483
370
  rocksdb__on_after_iterator (uv_work_t *handle, int status) {
484
371
  auto req = reinterpret_cast<rocksdb_iterator_t *>(handle->data);
@@ -508,11 +395,14 @@ rocksdb__on_iterator_open (uv_work_t *handle) {
508
395
  }
509
396
 
510
397
  extern "C" int
511
- rocksdb_iterator_open (rocksdb_iterator_t *iterator, rocksdb_range_t range, bool reverse, rocksdb_iterator_cb cb) {
398
+ rocksdb_iterator_open (rocksdb_t *db, rocksdb_iterator_t *iterator, rocksdb_range_t range, bool reverse, rocksdb_iterator_cb cb) {
399
+ iterator->db = db;
512
400
  iterator->range = range;
513
401
  iterator->reverse = reverse;
514
402
  iterator->cb = cb;
515
403
 
404
+ iterator->worker.data = static_cast<void *>(iterator);
405
+
516
406
  return uv_queue_work(iterator->db->loop, &iterator->worker, rocksdb__on_iterator_open, rocksdb__on_after_iterator);
517
407
  }
518
408
 
@@ -586,18 +476,9 @@ rocksdb_iterator_read (rocksdb_iterator_t *iterator, rocksdb_slice_t *keys, rock
586
476
  return uv_queue_work(iterator->db->loop, &iterator->worker, rocksdb__on_iterator_read, rocksdb__on_after_iterator);
587
477
  }
588
478
 
589
- extern "C" int
590
- rocksdb_batch_init (rocksdb_t *db, rocksdb_batch_t *batch) {
591
- batch->db = db;
592
-
593
- batch->worker.data = static_cast<void *>(batch);
594
-
595
- return 0;
596
- }
597
-
598
479
  static void
599
480
  rocksdb__on_after_read (uv_work_t *handle, int status) {
600
- auto req = reinterpret_cast<rocksdb_batch_t *>(handle->data);
481
+ auto req = reinterpret_cast<rocksdb_read_batch_t *>(handle->data);
601
482
 
602
483
  req->cb(req, status);
603
484
 
@@ -608,47 +489,72 @@ rocksdb__on_after_read (uv_work_t *handle, int status) {
608
489
 
609
490
  static void
610
491
  rocksdb__on_batch_read (uv_work_t *handle) {
611
- auto req = reinterpret_cast<rocksdb_batch_t *>(handle->data);
492
+ auto req = reinterpret_cast<rocksdb_read_batch_t *>(handle->data);
612
493
 
613
494
  auto db = reinterpret_cast<DB *>(req->db->handle);
614
495
 
615
496
  if (req->len) {
497
+ std::vector<Slice> keys(req->len);
498
+
499
+ for (size_t i = 0, n = req->len; i < n; i++) {
500
+ auto op = &req->reads[i];
501
+
502
+ switch (op->type) {
503
+ case rocksdb_get:
504
+ keys[i] = rocksdb__slice_cast(op->key);
505
+ break;
506
+ }
507
+ }
508
+
616
509
  std::vector<PinnableSlice> values(req->len);
617
510
 
618
511
  std::vector<Status> statuses(req->len);
619
512
 
620
- db->MultiGet(ReadOptions(), db->DefaultColumnFamily(), req->len, reinterpret_cast<const Slice *>(req->keys), values.data(), statuses.data());
513
+ db->MultiGet(ReadOptions(), db->DefaultColumnFamily(), req->len, keys.data(), values.data(), statuses.data());
621
514
 
622
515
  for (size_t i = 0, n = req->len; i < n; i++) {
516
+ auto op = &req->reads[i];
517
+
623
518
  auto status = statuses[i];
624
519
 
520
+ auto value = rocksdb_slice_empty();
521
+
625
522
  if (status.ok()) {
626
- req->values[i] = rocksdb__slice_copy(values[i]);
523
+ value = rocksdb__slice_copy(values[i]);
524
+
627
525
  req->errors[i] = nullptr;
628
526
  } else if (status.code() == Status::kNotFound) {
629
- req->values[i] = {.data = nullptr, .len = 0};
630
527
  req->errors[i] = nullptr;
631
528
  } else {
632
529
  req->errors[i] = strdup(status.getState());
530
+ continue;
531
+ }
532
+
533
+ switch (op->type) {
534
+ case rocksdb_get:
535
+ op->value = value;
536
+ break;
633
537
  }
634
538
  }
635
539
  }
636
540
  }
637
541
 
638
542
  extern "C" int
639
- rocksdb_batch_read (rocksdb_batch_t *batch, const rocksdb_slice_t *keys, rocksdb_slice_t *values, char **errors, size_t len, rocksdb_batch_cb cb) {
640
- batch->keys = keys;
641
- batch->values = values;
543
+ rocksdb_read (rocksdb_t *db, rocksdb_read_batch_t *batch, rocksdb_read_t *reads, char **errors, size_t len, rocksdb_read_batch_cb cb) {
544
+ batch->db = db;
545
+ batch->reads = reads;
642
546
  batch->errors = errors;
643
547
  batch->len = len;
644
548
  batch->cb = cb;
645
549
 
550
+ batch->worker.data = static_cast<void *>(batch);
551
+
646
552
  return uv_queue_work(batch->db->loop, &batch->worker, rocksdb__on_batch_read, rocksdb__on_after_read);
647
553
  }
648
554
 
649
555
  static void
650
556
  rocksdb__on_after_write (uv_work_t *handle, int status) {
651
- auto req = reinterpret_cast<rocksdb_batch_t *>(handle->data);
557
+ auto req = reinterpret_cast<rocksdb_write_batch_t *>(handle->data);
652
558
 
653
559
  auto error = req->error;
654
560
 
@@ -659,7 +565,7 @@ rocksdb__on_after_write (uv_work_t *handle, int status) {
659
565
 
660
566
  static void
661
567
  rocksdb__on_batch_write (uv_work_t *handle) {
662
- auto req = reinterpret_cast<rocksdb_batch_t *>(handle->data);
568
+ auto req = reinterpret_cast<rocksdb_write_batch_t *>(handle->data);
663
569
 
664
570
  auto db = reinterpret_cast<DB *>(req->db->handle);
665
571
 
@@ -667,56 +573,21 @@ rocksdb__on_batch_write (uv_work_t *handle) {
667
573
  WriteBatch batch;
668
574
 
669
575
  for (size_t i = 0, n = req->len; i < n; i++) {
670
- if (req->values[i].len == 0) {
671
- batch.Delete(db->DefaultColumnFamily(), reinterpret_cast<const Slice &>(req->keys[i]));
672
- } else {
673
- batch.Put(db->DefaultColumnFamily(), reinterpret_cast<const Slice &>(req->keys[i]), reinterpret_cast<const Slice &>(req->values[i]));
674
- }
675
- }
676
-
677
- auto status = db->Write(WriteOptions(), &batch);
576
+ auto op = &req->writes[i];
678
577
 
679
- if (status.ok()) {
680
- req->error = nullptr;
681
- } else {
682
- req->error = strdup(status.getState());
683
- }
684
- }
685
- }
686
-
687
- extern "C" int
688
- rocksdb_batch_write (rocksdb_batch_t *batch, const rocksdb_slice_t *keys, const rocksdb_slice_t *values, size_t len, rocksdb_batch_cb cb) {
689
- batch->keys = keys;
690
- batch->values = const_cast<rocksdb_slice_t *>(values);
691
- batch->error = nullptr;
692
- batch->len = len;
693
- batch->cb = cb;
694
-
695
- return uv_queue_work(batch->db->loop, &batch->worker, rocksdb__on_batch_write, rocksdb__on_after_write);
696
- }
697
-
698
- static void
699
- rocksdb__on_after_delete (uv_work_t *handle, int status) {
700
- auto req = reinterpret_cast<rocksdb_batch_t *>(handle->data);
701
-
702
- auto error = req->error;
703
-
704
- req->cb(req, status);
705
-
706
- if (error) free(error);
707
- }
708
-
709
- static void
710
- rocksdb__on_batch_delete (uv_work_t *handle) {
711
- auto req = reinterpret_cast<rocksdb_batch_t *>(handle->data);
712
-
713
- auto db = reinterpret_cast<DB *>(req->db->handle);
578
+ switch (op->type) {
579
+ case rocksdb_put:
580
+ batch.Put(db->DefaultColumnFamily(), rocksdb__slice_cast(op->key), rocksdb__slice_cast(op->value));
581
+ break;
714
582
 
715
- if (req->len) {
716
- WriteBatch batch;
583
+ case rocksdb_delete:
584
+ batch.Delete(db->DefaultColumnFamily(), rocksdb__slice_cast(op->key));
585
+ break;
717
586
 
718
- for (size_t i = 0, n = req->len; i < n; i++) {
719
- batch.Delete(db->DefaultColumnFamily(), reinterpret_cast<const Slice &>(req->keys[i]));
587
+ case rocksdb_delete_range:
588
+ batch.DeleteRange(db->DefaultColumnFamily(), rocksdb__slice_cast(op->start), rocksdb__slice_cast(op->end));
589
+ break;
590
+ }
720
591
  }
721
592
 
722
593
  auto status = db->Write(WriteOptions(), &batch);
@@ -730,12 +601,14 @@ rocksdb__on_batch_delete (uv_work_t *handle) {
730
601
  }
731
602
 
732
603
  extern "C" int
733
- rocksdb_batch_delete (rocksdb_batch_t *batch, const rocksdb_slice_t *keys, const rocksdb_slice_t *values, size_t len, rocksdb_batch_cb cb) {
734
- batch->keys = keys;
735
- batch->values = const_cast<rocksdb_slice_t *>(values);
604
+ rocksdb_write (rocksdb_t *db, rocksdb_write_batch_t *batch, rocksdb_write_t *writes, size_t len, rocksdb_write_batch_cb cb) {
605
+ batch->db = db;
606
+ batch->writes = writes;
736
607
  batch->error = nullptr;
737
608
  batch->len = len;
738
609
  batch->cb = cb;
739
610
 
740
- return uv_queue_work(batch->db->loop, &batch->worker, rocksdb__on_batch_delete, rocksdb__on_after_delete);
611
+ batch->worker.data = static_cast<void *>(batch);
612
+
613
+ return uv_queue_work(batch->db->loop, &batch->worker, rocksdb__on_batch_write, rocksdb__on_after_write);
741
614
  }