rocksdb-native 1.1.0 → 1.2.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/binding.c CHANGED
@@ -45,6 +45,14 @@ 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
+
48
56
  typedef struct {
49
57
  rocksdb_iterator_t handle;
50
58
 
@@ -278,6 +286,101 @@ rocksdb_native_close (js_env_t *env, js_callback_info_t *info) {
278
286
  return handle;
279
287
  }
280
288
 
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
+
281
384
  static js_value_t *
282
385
  rocksdb_native_iterator_init (js_env_t *env, js_callback_info_t *info) {
283
386
  int err;
@@ -866,6 +969,7 @@ rocksdb_native_exports (js_env_t *env, js_value_t *exports) {
866
969
  V("init", rocksdb_native_init)
867
970
  V("open", rocksdb_native_open)
868
971
  V("close", rocksdb_native_close)
972
+ V("deleteRange", rocksdb_native_delete_range)
869
973
 
870
974
  V("iteratorInit", rocksdb_native_iterator_init)
871
975
  V("iteratorBuffer", rocksdb_native_iterator_buffer)
package/index.js CHANGED
@@ -1,9 +1,12 @@
1
1
  /* global Bare */
2
2
  const ReadyResource = require('ready-resource')
3
+ const b4a = require('b4a')
3
4
  const binding = require('./binding')
4
5
  const Batch = require('./lib/batch')
5
6
  const Iterator = require('./lib/iterator')
6
7
 
8
+ const empty = b4a.alloc(0)
9
+
7
10
  const RocksDB = module.exports = class RocksDB extends ReadyResource {
8
11
  constructor (path, {
9
12
  // default options, https://github.com/facebook/rocksdb/wiki/Setup-Options-and-Basic-Tuning
@@ -101,6 +104,42 @@ const RocksDB = module.exports = class RocksDB extends ReadyResource {
101
104
  }
102
105
  }
103
106
 
107
+ async deleteRange (start, end, opts = {}) {
108
+ if (typeof start === 'string') start = b4a.from(start)
109
+ if (typeof end === 'string') end = b4a.from(end)
110
+
111
+ if (start && !b4a.isBuffer(start)) {
112
+ opts = start
113
+ start = empty
114
+ } else if (end && !b4a.isBuffer(end)) {
115
+ opts = end
116
+ end = empty
117
+ }
118
+
119
+ const {
120
+ gt = empty,
121
+ gte = start,
122
+ lt = end,
123
+ lte = empty
124
+ } = opts
125
+
126
+ const req = { resolve: null, reject: null, handle: null }
127
+
128
+ const promise = new Promise((resolve, reject) => {
129
+ req.resolve = resolve
130
+ req.reject = reject
131
+ })
132
+
133
+ req.handle = binding.deleteRange(this._handle, gt, gte, lt, lte, req, onstatus)
134
+
135
+ return promise
136
+
137
+ function onstatus (err) {
138
+ if (err) req.reject(new Error(err))
139
+ else req.resolve()
140
+ }
141
+ }
142
+
104
143
  batch (opts) {
105
144
  return new Batch(this, opts)
106
145
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rocksdb-native",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "librocksdb bindings for JavaScript",
5
5
  "exports": {
6
6
  ".": "./index.js",