rocksdb-native 2.6.5 → 2.6.7
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/CMakeLists.txt +1 -1
- package/binding.c +277 -184
- package/index.js +42 -50
- package/lib/batch.js +78 -49
- package/lib/iterator.js +33 -16
- package/lib/snapshot.js +3 -3
- package/package.json +10 -5
- package/prebuilds/android-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/android-ia32/rocksdb-native.bare +0 -0
- package/prebuilds/android-x64/rocksdb-native.bare +0 -0
- 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/ios-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/ios-arm64-simulator/rocksdb-native.bare +0 -0
- package/prebuilds/ios-x64-simulator/rocksdb-native.bare +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-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/win32-arm64/rocksdb-native.node +0 -0
- package/prebuilds/win32-x64/rocksdb-native.bare +0 -0
- package/prebuilds/win32-x64/rocksdb-native.node +0 -0
package/binding.c
CHANGED
|
@@ -27,6 +27,13 @@ typedef struct {
|
|
|
27
27
|
|
|
28
28
|
typedef struct {
|
|
29
29
|
rocksdb_t handle;
|
|
30
|
+
|
|
31
|
+
js_env_t *env;
|
|
32
|
+
|
|
33
|
+
bool closing;
|
|
34
|
+
bool exiting;
|
|
35
|
+
|
|
36
|
+
js_deferred_teardown_t *teardown;
|
|
30
37
|
} rocksdb_native_t;
|
|
31
38
|
|
|
32
39
|
typedef struct {
|
|
@@ -89,43 +96,63 @@ typedef struct {
|
|
|
89
96
|
} rocksdb_native_snapshot_t;
|
|
90
97
|
|
|
91
98
|
static void
|
|
92
|
-
rocksdb_native__on_free
|
|
99
|
+
rocksdb_native__on_free(js_env_t *env, void *data, void *finalize_hint) {
|
|
93
100
|
free(data);
|
|
94
101
|
}
|
|
95
102
|
|
|
96
|
-
static
|
|
97
|
-
|
|
103
|
+
static void
|
|
104
|
+
rocksdb_native__on_close(rocksdb_close_t *handle, int status) {
|
|
98
105
|
int err;
|
|
99
106
|
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
assert(status == 0);
|
|
108
|
+
|
|
109
|
+
rocksdb_native_close_t *req = (rocksdb_native_close_t *) handle->data;
|
|
110
|
+
|
|
111
|
+
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
112
|
+
|
|
113
|
+
js_env_t *env = req->env;
|
|
114
|
+
|
|
115
|
+
js_deferred_teardown_t *teardown = db->teardown;
|
|
116
|
+
|
|
117
|
+
js_handle_scope_t *scope;
|
|
118
|
+
err = js_open_handle_scope(env, &scope);
|
|
102
119
|
assert(err == 0);
|
|
103
120
|
|
|
104
|
-
js_value_t *
|
|
121
|
+
js_value_t *ctx;
|
|
122
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
123
|
+
assert(err == 0);
|
|
105
124
|
|
|
106
|
-
|
|
107
|
-
err =
|
|
125
|
+
js_value_t *cb;
|
|
126
|
+
err = js_get_reference_value(env, req->on_close, &cb);
|
|
108
127
|
assert(err == 0);
|
|
109
128
|
|
|
110
|
-
err =
|
|
129
|
+
err = js_delete_reference(env, req->on_close);
|
|
111
130
|
assert(err == 0);
|
|
112
131
|
|
|
113
|
-
|
|
114
|
-
|
|
132
|
+
err = js_delete_reference(env, req->ctx);
|
|
133
|
+
assert(err == 0);
|
|
115
134
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
135
|
+
if (!db->exiting) {
|
|
136
|
+
js_call_function_with_checkpoint(env, ctx, cb, 0, NULL, NULL);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
err = js_close_handle_scope(env, scope);
|
|
140
|
+
assert(err == 0);
|
|
141
|
+
|
|
142
|
+
err = js_finish_deferred_teardown_callback(teardown);
|
|
143
|
+
assert(err == 0);
|
|
119
144
|
}
|
|
120
145
|
|
|
121
146
|
static void
|
|
122
|
-
rocksdb_native__on_open
|
|
147
|
+
rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
|
|
123
148
|
int err;
|
|
124
149
|
|
|
125
150
|
assert(status == 0);
|
|
126
151
|
|
|
127
152
|
rocksdb_native_open_t *req = (rocksdb_native_open_t *) handle->data;
|
|
128
153
|
|
|
154
|
+
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
155
|
+
|
|
129
156
|
js_env_t *env = req->env;
|
|
130
157
|
|
|
131
158
|
js_handle_scope_t *scope;
|
|
@@ -140,6 +167,12 @@ rocksdb_native__on_open (rocksdb_open_t *handle, int status) {
|
|
|
140
167
|
err = js_get_reference_value(env, req->on_open, &cb);
|
|
141
168
|
assert(err == 0);
|
|
142
169
|
|
|
170
|
+
err = js_delete_reference(env, req->on_open);
|
|
171
|
+
assert(err == 0);
|
|
172
|
+
|
|
173
|
+
err = js_delete_reference(env, req->ctx);
|
|
174
|
+
assert(err == 0);
|
|
175
|
+
|
|
143
176
|
js_value_t *error;
|
|
144
177
|
|
|
145
178
|
if (req->handle.error) {
|
|
@@ -150,20 +183,89 @@ rocksdb_native__on_open (rocksdb_open_t *handle, int status) {
|
|
|
150
183
|
assert(err == 0);
|
|
151
184
|
}
|
|
152
185
|
|
|
153
|
-
|
|
186
|
+
if (!db->exiting) {
|
|
187
|
+
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
188
|
+
}
|
|
154
189
|
|
|
155
190
|
err = js_close_handle_scope(env, scope);
|
|
156
191
|
assert(err == 0);
|
|
192
|
+
}
|
|
157
193
|
|
|
158
|
-
|
|
194
|
+
static void
|
|
195
|
+
rocksdb_native__on_teardown(js_deferred_teardown_t *handle, void *data) {
|
|
196
|
+
int err;
|
|
197
|
+
|
|
198
|
+
rocksdb_native_t *db = (rocksdb_native_t *) data;
|
|
199
|
+
|
|
200
|
+
js_env_t *env = db->env;
|
|
201
|
+
|
|
202
|
+
db->exiting = true;
|
|
203
|
+
|
|
204
|
+
if (db->closing) return;
|
|
205
|
+
|
|
206
|
+
js_handle_scope_t *scope;
|
|
207
|
+
err = js_open_handle_scope(env, &scope);
|
|
159
208
|
assert(err == 0);
|
|
160
209
|
|
|
161
|
-
|
|
210
|
+
js_value_t *ctx;
|
|
211
|
+
|
|
212
|
+
rocksdb_native_close_t *req;
|
|
213
|
+
err = js_create_arraybuffer(env, sizeof(rocksdb_native_close_t), (void **) &req, &ctx);
|
|
214
|
+
assert(err == 0);
|
|
215
|
+
|
|
216
|
+
req->env = env;
|
|
217
|
+
req->handle.data = (void *) req;
|
|
218
|
+
|
|
219
|
+
err = js_create_reference(env, ctx, 1, &req->ctx);
|
|
220
|
+
assert(err == 0);
|
|
221
|
+
|
|
222
|
+
js_value_t *on_close;
|
|
223
|
+
err = js_get_null(env, &on_close);
|
|
224
|
+
assert(err == 0);
|
|
225
|
+
|
|
226
|
+
err = js_create_reference(env, on_close, 1, &req->on_close);
|
|
227
|
+
assert(err == 0);
|
|
228
|
+
|
|
229
|
+
db->closing = true;
|
|
230
|
+
|
|
231
|
+
err = rocksdb_close(&db->handle, &req->handle, rocksdb_native__on_close);
|
|
232
|
+
assert(err == 0);
|
|
233
|
+
|
|
234
|
+
err = js_close_handle_scope(env, scope);
|
|
162
235
|
assert(err == 0);
|
|
163
236
|
}
|
|
164
237
|
|
|
165
238
|
static js_value_t *
|
|
166
|
-
|
|
239
|
+
rocksdb_native_init(js_env_t *env, js_callback_info_t *info) {
|
|
240
|
+
int err;
|
|
241
|
+
|
|
242
|
+
uv_loop_t *loop;
|
|
243
|
+
err = js_get_env_loop(env, &loop);
|
|
244
|
+
assert(err == 0);
|
|
245
|
+
|
|
246
|
+
js_value_t *handle;
|
|
247
|
+
|
|
248
|
+
rocksdb_native_t *db;
|
|
249
|
+
err = js_create_arraybuffer(env, sizeof(rocksdb_native_t), (void **) &db, &handle);
|
|
250
|
+
assert(err == 0);
|
|
251
|
+
|
|
252
|
+
db->env = env;
|
|
253
|
+
db->closing = false;
|
|
254
|
+
db->exiting = false;
|
|
255
|
+
|
|
256
|
+
err = rocksdb_init(loop, &db->handle);
|
|
257
|
+
assert(err == 0);
|
|
258
|
+
|
|
259
|
+
return handle;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
static inline uint64_t
|
|
263
|
+
rocksdb_native__to_uint64(rocksdb_native_uint64_t n) {
|
|
264
|
+
return n.high * 0x100000000 + n.low;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
static js_value_t *
|
|
268
|
+
rocksdb_native_open(js_env_t *env, js_callback_info_t *info) {
|
|
167
269
|
int err;
|
|
168
270
|
|
|
169
271
|
size_t argc = 5;
|
|
@@ -191,13 +293,13 @@ rocksdb_native_open (js_env_t *env, js_callback_info_t *info) {
|
|
|
191
293
|
o->read_only,
|
|
192
294
|
o->create_if_missing,
|
|
193
295
|
o->max_background_jobs,
|
|
194
|
-
|
|
296
|
+
rocksdb_native__to_uint64(o->bytes_per_sync),
|
|
195
297
|
o->compation_style,
|
|
196
298
|
o->enable_blob_files,
|
|
197
|
-
|
|
198
|
-
|
|
299
|
+
rocksdb_native__to_uint64(o->min_blob_size),
|
|
300
|
+
rocksdb_native__to_uint64(o->blob_file_size),
|
|
199
301
|
o->enable_blob_garbage_collection,
|
|
200
|
-
|
|
302
|
+
rocksdb_native__to_uint64(o->table_block_size),
|
|
201
303
|
o->table_cache_index_and_filter_blocks,
|
|
202
304
|
o->table_format_version
|
|
203
305
|
};
|
|
@@ -220,45 +322,14 @@ rocksdb_native_open (js_env_t *env, js_callback_info_t *info) {
|
|
|
220
322
|
err = rocksdb_open(&db->handle, &req->handle, (const char *) path, &options, rocksdb_native__on_open);
|
|
221
323
|
assert(err == 0);
|
|
222
324
|
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
static void
|
|
227
|
-
rocksdb_native__on_close (rocksdb_close_t *handle, int status) {
|
|
228
|
-
int err;
|
|
229
|
-
|
|
230
|
-
assert(status == 0);
|
|
231
|
-
|
|
232
|
-
rocksdb_native_close_t *req = (rocksdb_native_close_t *) handle->data;
|
|
233
|
-
|
|
234
|
-
js_env_t *env = req->env;
|
|
235
|
-
|
|
236
|
-
js_handle_scope_t *scope;
|
|
237
|
-
err = js_open_handle_scope(env, &scope);
|
|
238
|
-
assert(err == 0);
|
|
239
|
-
|
|
240
|
-
js_value_t *ctx;
|
|
241
|
-
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
325
|
+
err = js_add_deferred_teardown_callback(env, rocksdb_native__on_teardown, (void *) db, &db->teardown);
|
|
242
326
|
assert(err == 0);
|
|
243
327
|
|
|
244
|
-
|
|
245
|
-
err = js_get_reference_value(env, req->on_close, &cb);
|
|
246
|
-
assert(err == 0);
|
|
247
|
-
|
|
248
|
-
js_call_function_with_checkpoint(env, ctx, cb, 0, NULL, NULL);
|
|
249
|
-
|
|
250
|
-
err = js_close_handle_scope(env, scope);
|
|
251
|
-
assert(err == 0);
|
|
252
|
-
|
|
253
|
-
err = js_delete_reference(env, req->on_close);
|
|
254
|
-
assert(err == 0);
|
|
255
|
-
|
|
256
|
-
err = js_delete_reference(env, req->ctx);
|
|
257
|
-
assert(err == 0);
|
|
328
|
+
return handle;
|
|
258
329
|
}
|
|
259
330
|
|
|
260
331
|
static js_value_t *
|
|
261
|
-
rocksdb_native_close
|
|
332
|
+
rocksdb_native_close(js_env_t *env, js_callback_info_t *info) {
|
|
262
333
|
int err;
|
|
263
334
|
|
|
264
335
|
size_t argc = 3;
|
|
@@ -288,6 +359,8 @@ rocksdb_native_close (js_env_t *env, js_callback_info_t *info) {
|
|
|
288
359
|
err = js_create_reference(env, argv[2], 1, &req->on_close);
|
|
289
360
|
assert(err == 0);
|
|
290
361
|
|
|
362
|
+
db->closing = true;
|
|
363
|
+
|
|
291
364
|
err = rocksdb_close(&db->handle, &req->handle, rocksdb_native__on_close);
|
|
292
365
|
assert(err == 0);
|
|
293
366
|
|
|
@@ -295,7 +368,7 @@ rocksdb_native_close (js_env_t *env, js_callback_info_t *info) {
|
|
|
295
368
|
}
|
|
296
369
|
|
|
297
370
|
static js_value_t *
|
|
298
|
-
rocksdb_native_iterator_init
|
|
371
|
+
rocksdb_native_iterator_init(js_env_t *env, js_callback_info_t *info) {
|
|
299
372
|
int err;
|
|
300
373
|
|
|
301
374
|
size_t argc = 4;
|
|
@@ -308,30 +381,30 @@ rocksdb_native_iterator_init (js_env_t *env, js_callback_info_t *info) {
|
|
|
308
381
|
|
|
309
382
|
js_value_t *handle;
|
|
310
383
|
|
|
311
|
-
rocksdb_native_iterator_t *
|
|
312
|
-
err = js_create_arraybuffer(env, sizeof(rocksdb_native_iterator_t), (void **) &
|
|
384
|
+
rocksdb_native_iterator_t *req;
|
|
385
|
+
err = js_create_arraybuffer(env, sizeof(rocksdb_native_iterator_t), (void **) &req, &handle);
|
|
313
386
|
assert(err == 0);
|
|
314
387
|
|
|
315
|
-
|
|
316
|
-
|
|
388
|
+
req->env = env;
|
|
389
|
+
req->handle.data = (void *) req;
|
|
317
390
|
|
|
318
|
-
err = js_create_reference(env, argv[0], 1, &
|
|
391
|
+
err = js_create_reference(env, argv[0], 1, &req->ctx);
|
|
319
392
|
assert(err == 0);
|
|
320
393
|
|
|
321
|
-
err = js_create_reference(env, argv[1], 1, &
|
|
394
|
+
err = js_create_reference(env, argv[1], 1, &req->on_open);
|
|
322
395
|
assert(err == 0);
|
|
323
396
|
|
|
324
|
-
err = js_create_reference(env, argv[2], 1, &
|
|
397
|
+
err = js_create_reference(env, argv[2], 1, &req->on_close);
|
|
325
398
|
assert(err == 0);
|
|
326
399
|
|
|
327
|
-
err = js_create_reference(env, argv[3], 1, &
|
|
400
|
+
err = js_create_reference(env, argv[3], 1, &req->on_read);
|
|
328
401
|
assert(err == 0);
|
|
329
402
|
|
|
330
403
|
return handle;
|
|
331
404
|
}
|
|
332
405
|
|
|
333
406
|
static js_value_t *
|
|
334
|
-
rocksdb_native_iterator_buffer
|
|
407
|
+
rocksdb_native_iterator_buffer(js_env_t *env, js_callback_info_t *info) {
|
|
335
408
|
int err;
|
|
336
409
|
|
|
337
410
|
size_t argc = 2;
|
|
@@ -342,8 +415,8 @@ rocksdb_native_iterator_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
|
342
415
|
|
|
343
416
|
assert(argc == 2);
|
|
344
417
|
|
|
345
|
-
rocksdb_native_iterator_t *
|
|
346
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &
|
|
418
|
+
rocksdb_native_iterator_t *req;
|
|
419
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
|
|
347
420
|
assert(err == 0);
|
|
348
421
|
|
|
349
422
|
uint32_t capacity;
|
|
@@ -358,55 +431,59 @@ rocksdb_native_iterator_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
|
358
431
|
|
|
359
432
|
size_t offset = 0;
|
|
360
433
|
|
|
361
|
-
|
|
434
|
+
req->keys = (rocksdb_slice_t *) &data[offset];
|
|
362
435
|
|
|
363
436
|
offset += capacity * sizeof(rocksdb_slice_t);
|
|
364
437
|
|
|
365
|
-
|
|
438
|
+
req->values = (rocksdb_slice_t *) &data[offset];
|
|
366
439
|
|
|
367
440
|
return handle;
|
|
368
441
|
}
|
|
369
442
|
|
|
370
443
|
static void
|
|
371
|
-
rocksdb_native__on_iterator_open
|
|
444
|
+
rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
|
|
372
445
|
int err;
|
|
373
446
|
|
|
374
447
|
assert(status == 0);
|
|
375
448
|
|
|
376
|
-
rocksdb_native_iterator_t *
|
|
449
|
+
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
|
|
377
450
|
|
|
378
|
-
|
|
451
|
+
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
452
|
+
|
|
453
|
+
js_env_t *env = req->env;
|
|
379
454
|
|
|
380
455
|
js_handle_scope_t *scope;
|
|
381
456
|
err = js_open_handle_scope(env, &scope);
|
|
382
457
|
assert(err == 0);
|
|
383
458
|
|
|
384
459
|
js_value_t *ctx;
|
|
385
|
-
err = js_get_reference_value(env,
|
|
460
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
386
461
|
assert(err == 0);
|
|
387
462
|
|
|
388
463
|
js_value_t *cb;
|
|
389
|
-
err = js_get_reference_value(env,
|
|
464
|
+
err = js_get_reference_value(env, req->on_open, &cb);
|
|
390
465
|
assert(err == 0);
|
|
391
466
|
|
|
392
467
|
js_value_t *error;
|
|
393
468
|
|
|
394
|
-
if (
|
|
395
|
-
err = js_create_string_utf8(env, (utf8_t *)
|
|
469
|
+
if (req->handle.error) {
|
|
470
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
396
471
|
assert(err == 0);
|
|
397
472
|
} else {
|
|
398
473
|
err = js_get_null(env, &error);
|
|
399
474
|
assert(err == 0);
|
|
400
475
|
}
|
|
401
476
|
|
|
402
|
-
|
|
477
|
+
if (!db->exiting) {
|
|
478
|
+
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
479
|
+
}
|
|
403
480
|
|
|
404
481
|
err = js_close_handle_scope(env, scope);
|
|
405
482
|
assert(err == 0);
|
|
406
483
|
}
|
|
407
484
|
|
|
408
485
|
static js_value_t *
|
|
409
|
-
rocksdb_native_iterator_open
|
|
486
|
+
rocksdb_native_iterator_open(js_env_t *env, js_callback_info_t *info) {
|
|
410
487
|
int err;
|
|
411
488
|
|
|
412
489
|
size_t argc = 8;
|
|
@@ -421,8 +498,8 @@ rocksdb_native_iterator_open (js_env_t *env, js_callback_info_t *info) {
|
|
|
421
498
|
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
422
499
|
assert(err == 0);
|
|
423
500
|
|
|
424
|
-
rocksdb_native_iterator_t *
|
|
425
|
-
err = js_get_arraybuffer_info(env, argv[1], (void **) &
|
|
501
|
+
rocksdb_native_iterator_t *req;
|
|
502
|
+
err = js_get_arraybuffer_info(env, argv[1], (void **) &req, NULL);
|
|
426
503
|
assert(err == 0);
|
|
427
504
|
|
|
428
505
|
rocksdb_range_t range;
|
|
@@ -456,64 +533,68 @@ rocksdb_native_iterator_open (js_env_t *env, js_callback_info_t *info) {
|
|
|
456
533
|
assert(err == 0);
|
|
457
534
|
}
|
|
458
535
|
|
|
459
|
-
err = rocksdb_iterator_open(&db->handle, &
|
|
536
|
+
err = rocksdb_iterator_open(&db->handle, &req->handle, range, reverse, &options, rocksdb_native__on_iterator_open);
|
|
460
537
|
assert(err == 0);
|
|
461
538
|
|
|
462
539
|
return NULL;
|
|
463
540
|
}
|
|
464
541
|
|
|
465
542
|
static void
|
|
466
|
-
rocksdb_native__on_iterator_close
|
|
543
|
+
rocksdb_native__on_iterator_close(rocksdb_iterator_t *handle, int status) {
|
|
467
544
|
int err;
|
|
468
545
|
|
|
469
546
|
assert(status == 0);
|
|
470
547
|
|
|
471
|
-
rocksdb_native_iterator_t *
|
|
548
|
+
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
|
|
549
|
+
|
|
550
|
+
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
472
551
|
|
|
473
|
-
js_env_t *env =
|
|
552
|
+
js_env_t *env = req->env;
|
|
474
553
|
|
|
475
554
|
js_handle_scope_t *scope;
|
|
476
555
|
err = js_open_handle_scope(env, &scope);
|
|
477
556
|
assert(err == 0);
|
|
478
557
|
|
|
479
558
|
js_value_t *ctx;
|
|
480
|
-
err = js_get_reference_value(env,
|
|
559
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
481
560
|
assert(err == 0);
|
|
482
561
|
|
|
483
562
|
js_value_t *cb;
|
|
484
|
-
err = js_get_reference_value(env,
|
|
563
|
+
err = js_get_reference_value(env, req->on_close, &cb);
|
|
564
|
+
assert(err == 0);
|
|
565
|
+
|
|
566
|
+
err = js_delete_reference(env, req->on_open);
|
|
567
|
+
assert(err == 0);
|
|
568
|
+
|
|
569
|
+
err = js_delete_reference(env, req->on_close);
|
|
570
|
+
assert(err == 0);
|
|
571
|
+
|
|
572
|
+
err = js_delete_reference(env, req->on_read);
|
|
573
|
+
assert(err == 0);
|
|
574
|
+
|
|
575
|
+
err = js_delete_reference(env, req->ctx);
|
|
485
576
|
assert(err == 0);
|
|
486
577
|
|
|
487
578
|
js_value_t *error;
|
|
488
579
|
|
|
489
|
-
if (
|
|
490
|
-
err = js_create_string_utf8(env, (utf8_t *)
|
|
580
|
+
if (req->handle.error) {
|
|
581
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
491
582
|
assert(err == 0);
|
|
492
583
|
} else {
|
|
493
584
|
err = js_get_null(env, &error);
|
|
494
585
|
assert(err == 0);
|
|
495
586
|
}
|
|
496
587
|
|
|
497
|
-
|
|
588
|
+
if (!db->exiting) {
|
|
589
|
+
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
590
|
+
}
|
|
498
591
|
|
|
499
592
|
err = js_close_handle_scope(env, scope);
|
|
500
593
|
assert(err == 0);
|
|
501
|
-
|
|
502
|
-
err = js_delete_reference(env, iterator->on_open);
|
|
503
|
-
assert(err == 0);
|
|
504
|
-
|
|
505
|
-
err = js_delete_reference(env, iterator->on_close);
|
|
506
|
-
assert(err == 0);
|
|
507
|
-
|
|
508
|
-
err = js_delete_reference(env, iterator->on_read);
|
|
509
|
-
assert(err == 0);
|
|
510
|
-
|
|
511
|
-
err = js_delete_reference(env, iterator->ctx);
|
|
512
|
-
assert(err == 0);
|
|
513
594
|
}
|
|
514
595
|
|
|
515
596
|
static js_value_t *
|
|
516
|
-
rocksdb_native_iterator_close
|
|
597
|
+
rocksdb_native_iterator_close(js_env_t *env, js_callback_info_t *info) {
|
|
517
598
|
int err;
|
|
518
599
|
|
|
519
600
|
size_t argc = 1;
|
|
@@ -524,39 +605,41 @@ rocksdb_native_iterator_close (js_env_t *env, js_callback_info_t *info) {
|
|
|
524
605
|
|
|
525
606
|
assert(argc == 1);
|
|
526
607
|
|
|
527
|
-
rocksdb_native_iterator_t *
|
|
528
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &
|
|
608
|
+
rocksdb_native_iterator_t *req;
|
|
609
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
|
|
529
610
|
assert(err == 0);
|
|
530
611
|
|
|
531
|
-
err = rocksdb_iterator_close(&
|
|
612
|
+
err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close);
|
|
532
613
|
assert(err == 0);
|
|
533
614
|
|
|
534
615
|
return NULL;
|
|
535
616
|
}
|
|
536
617
|
|
|
537
618
|
static void
|
|
538
|
-
rocksdb_native__on_iterator_read
|
|
619
|
+
rocksdb_native__on_iterator_read(rocksdb_iterator_t *handle, int status) {
|
|
539
620
|
int err;
|
|
540
621
|
|
|
541
622
|
assert(status == 0);
|
|
542
623
|
|
|
543
|
-
rocksdb_native_iterator_t *
|
|
624
|
+
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
|
|
544
625
|
|
|
545
|
-
|
|
626
|
+
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
627
|
+
|
|
628
|
+
js_env_t *env = req->env;
|
|
546
629
|
|
|
547
630
|
js_handle_scope_t *scope;
|
|
548
631
|
err = js_open_handle_scope(env, &scope);
|
|
549
632
|
assert(err == 0);
|
|
550
633
|
|
|
551
634
|
js_value_t *ctx;
|
|
552
|
-
err = js_get_reference_value(env,
|
|
635
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
553
636
|
assert(err == 0);
|
|
554
637
|
|
|
555
638
|
js_value_t *cb;
|
|
556
|
-
err = js_get_reference_value(env,
|
|
639
|
+
err = js_get_reference_value(env, req->on_read, &cb);
|
|
557
640
|
assert(err == 0);
|
|
558
641
|
|
|
559
|
-
size_t len =
|
|
642
|
+
size_t len = req->handle.len;
|
|
560
643
|
|
|
561
644
|
js_value_t *keys;
|
|
562
645
|
err = js_create_array_with_length(env, len, &keys);
|
|
@@ -568,8 +651,8 @@ rocksdb_native__on_iterator_read (rocksdb_iterator_t *handle, int status) {
|
|
|
568
651
|
|
|
569
652
|
js_value_t *error;
|
|
570
653
|
|
|
571
|
-
if (
|
|
572
|
-
err = js_create_string_utf8(env, (utf8_t *)
|
|
654
|
+
if (req->handle.error) {
|
|
655
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
573
656
|
assert(err == 0);
|
|
574
657
|
} else {
|
|
575
658
|
err = js_get_null(env, &error);
|
|
@@ -578,7 +661,7 @@ rocksdb_native__on_iterator_read (rocksdb_iterator_t *handle, int status) {
|
|
|
578
661
|
for (size_t i = 0; i < len; i++) {
|
|
579
662
|
js_value_t *result;
|
|
580
663
|
|
|
581
|
-
rocksdb_slice_t *key = &
|
|
664
|
+
rocksdb_slice_t *key = &req->keys[i];
|
|
582
665
|
|
|
583
666
|
err = js_create_external_arraybuffer(env, (void *) key->data, key->len, rocksdb_native__on_free, NULL, &result);
|
|
584
667
|
assert(err == 0);
|
|
@@ -586,7 +669,7 @@ rocksdb_native__on_iterator_read (rocksdb_iterator_t *handle, int status) {
|
|
|
586
669
|
err = js_set_element(env, keys, i, result);
|
|
587
670
|
assert(err == 0);
|
|
588
671
|
|
|
589
|
-
rocksdb_slice_t *value = &
|
|
672
|
+
rocksdb_slice_t *value = &req->values[i];
|
|
590
673
|
|
|
591
674
|
err = js_create_external_arraybuffer(env, (void *) value->data, value->len, rocksdb_native__on_free, NULL, &result);
|
|
592
675
|
assert(err == 0);
|
|
@@ -596,14 +679,16 @@ rocksdb_native__on_iterator_read (rocksdb_iterator_t *handle, int status) {
|
|
|
596
679
|
}
|
|
597
680
|
}
|
|
598
681
|
|
|
599
|
-
|
|
682
|
+
if (!db->exiting) {
|
|
683
|
+
js_call_function_with_checkpoint(env, ctx, cb, 3, (js_value_t *[]) {error, keys, values}, NULL);
|
|
684
|
+
}
|
|
600
685
|
|
|
601
686
|
err = js_close_handle_scope(env, scope);
|
|
602
687
|
assert(err == 0);
|
|
603
688
|
}
|
|
604
689
|
|
|
605
690
|
static js_value_t *
|
|
606
|
-
rocksdb_native_iterator_read
|
|
691
|
+
rocksdb_native_iterator_read(js_env_t *env, js_callback_info_t *info) {
|
|
607
692
|
int err;
|
|
608
693
|
|
|
609
694
|
size_t argc = 2;
|
|
@@ -614,38 +699,38 @@ rocksdb_native_iterator_read (js_env_t *env, js_callback_info_t *info) {
|
|
|
614
699
|
|
|
615
700
|
assert(argc == 2);
|
|
616
701
|
|
|
617
|
-
rocksdb_native_iterator_t *
|
|
618
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &
|
|
702
|
+
rocksdb_native_iterator_t *req;
|
|
703
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
|
|
619
704
|
assert(err == 0);
|
|
620
705
|
|
|
621
706
|
uint32_t capacity;
|
|
622
707
|
err = js_get_value_uint32(env, argv[1], &capacity);
|
|
623
708
|
assert(err == 0);
|
|
624
709
|
|
|
625
|
-
err = rocksdb_iterator_read(&
|
|
710
|
+
err = rocksdb_iterator_read(&req->handle, req->keys, req->values, capacity, rocksdb_native__on_iterator_read);
|
|
626
711
|
assert(err == 0);
|
|
627
712
|
|
|
628
713
|
return NULL;
|
|
629
714
|
}
|
|
630
715
|
|
|
631
716
|
static js_value_t *
|
|
632
|
-
rocksdb_native_read_init
|
|
717
|
+
rocksdb_native_read_init(js_env_t *env, js_callback_info_t *info) {
|
|
633
718
|
int err;
|
|
634
719
|
|
|
635
720
|
js_value_t *handle;
|
|
636
721
|
|
|
637
|
-
rocksdb_native_read_batch_t *
|
|
638
|
-
err = js_create_arraybuffer(env, sizeof(rocksdb_native_read_batch_t), (void **) &
|
|
722
|
+
rocksdb_native_read_batch_t *req;
|
|
723
|
+
err = js_create_arraybuffer(env, sizeof(rocksdb_native_read_batch_t), (void **) &req, &handle);
|
|
639
724
|
assert(err == 0);
|
|
640
725
|
|
|
641
|
-
|
|
642
|
-
|
|
726
|
+
req->env = env;
|
|
727
|
+
req->handle.data = (void *) req;
|
|
643
728
|
|
|
644
729
|
return handle;
|
|
645
730
|
}
|
|
646
731
|
|
|
647
732
|
static js_value_t *
|
|
648
|
-
rocksdb_native_read_buffer
|
|
733
|
+
rocksdb_native_read_buffer(js_env_t *env, js_callback_info_t *info) {
|
|
649
734
|
int err;
|
|
650
735
|
|
|
651
736
|
size_t argc = 2;
|
|
@@ -656,8 +741,8 @@ rocksdb_native_read_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
|
656
741
|
|
|
657
742
|
assert(argc == 2);
|
|
658
743
|
|
|
659
|
-
rocksdb_native_read_batch_t *
|
|
660
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &
|
|
744
|
+
rocksdb_native_read_batch_t *req;
|
|
745
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
|
|
661
746
|
assert(err == 0);
|
|
662
747
|
|
|
663
748
|
uint32_t capacity;
|
|
@@ -670,34 +755,36 @@ rocksdb_native_read_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
|
670
755
|
err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_read_t) + capacity * sizeof(char *), (void **) &data, &handle);
|
|
671
756
|
assert(err == 0);
|
|
672
757
|
|
|
673
|
-
|
|
758
|
+
req->capacity = capacity;
|
|
674
759
|
|
|
675
760
|
size_t offset = 0;
|
|
676
761
|
|
|
677
|
-
|
|
762
|
+
req->reads = (rocksdb_read_t *) &data[offset];
|
|
678
763
|
|
|
679
764
|
offset += capacity * sizeof(rocksdb_read_t);
|
|
680
765
|
|
|
681
|
-
|
|
766
|
+
req->errors = (char **) &data[offset];
|
|
682
767
|
|
|
683
768
|
return handle;
|
|
684
769
|
}
|
|
685
770
|
|
|
686
771
|
static void
|
|
687
|
-
rocksdb_native__on_read
|
|
772
|
+
rocksdb_native__on_read(rocksdb_read_batch_t *handle, int status) {
|
|
688
773
|
int err;
|
|
689
774
|
|
|
690
775
|
assert(status == 0);
|
|
691
776
|
|
|
692
|
-
rocksdb_native_read_batch_t *
|
|
777
|
+
rocksdb_native_read_batch_t *req = (rocksdb_native_read_batch_t *) handle->data;
|
|
693
778
|
|
|
694
|
-
|
|
779
|
+
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
780
|
+
|
|
781
|
+
js_env_t *env = req->env;
|
|
695
782
|
|
|
696
783
|
js_handle_scope_t *scope;
|
|
697
784
|
err = js_open_handle_scope(env, &scope);
|
|
698
785
|
assert(err == 0);
|
|
699
786
|
|
|
700
|
-
size_t len =
|
|
787
|
+
size_t len = req->handle.len;
|
|
701
788
|
|
|
702
789
|
js_value_t *errors;
|
|
703
790
|
err = js_create_array_with_length(env, len, &errors);
|
|
@@ -710,7 +797,7 @@ rocksdb_native__on_read (rocksdb_read_batch_t *handle, int status) {
|
|
|
710
797
|
for (size_t i = 0; i < len; i++) {
|
|
711
798
|
js_value_t *result;
|
|
712
799
|
|
|
713
|
-
char *error =
|
|
800
|
+
char *error = req->errors[i];
|
|
714
801
|
|
|
715
802
|
if (error) {
|
|
716
803
|
err = js_create_string_utf8(env, (utf8_t *) error, -1, &result);
|
|
@@ -719,7 +806,7 @@ rocksdb_native__on_read (rocksdb_read_batch_t *handle, int status) {
|
|
|
719
806
|
err = js_set_element(env, errors, i, result);
|
|
720
807
|
assert(err == 0);
|
|
721
808
|
} else {
|
|
722
|
-
rocksdb_slice_t *slice = &
|
|
809
|
+
rocksdb_slice_t *slice = &req->reads[i].value;
|
|
723
810
|
|
|
724
811
|
err = js_create_external_arraybuffer(env, (void *) slice->data, slice->len, rocksdb_native__on_free, NULL, &result);
|
|
725
812
|
assert(err == 0);
|
|
@@ -730,27 +817,29 @@ rocksdb_native__on_read (rocksdb_read_batch_t *handle, int status) {
|
|
|
730
817
|
}
|
|
731
818
|
|
|
732
819
|
js_value_t *ctx;
|
|
733
|
-
err = js_get_reference_value(env,
|
|
820
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
734
821
|
assert(err == 0);
|
|
735
822
|
|
|
736
823
|
js_value_t *cb;
|
|
737
|
-
err = js_get_reference_value(env,
|
|
824
|
+
err = js_get_reference_value(env, req->on_status, &cb);
|
|
738
825
|
assert(err == 0);
|
|
739
826
|
|
|
740
|
-
err = js_delete_reference(env,
|
|
827
|
+
err = js_delete_reference(env, req->on_status);
|
|
741
828
|
assert(err == 0);
|
|
742
829
|
|
|
743
|
-
err = js_delete_reference(env,
|
|
830
|
+
err = js_delete_reference(env, req->ctx);
|
|
744
831
|
assert(err == 0);
|
|
745
832
|
|
|
746
|
-
|
|
833
|
+
if (!db->exiting) {
|
|
834
|
+
js_call_function_with_checkpoint(env, ctx, cb, 2, (js_value_t *[]) {errors, values}, NULL);
|
|
835
|
+
}
|
|
747
836
|
|
|
748
837
|
err = js_close_handle_scope(env, scope);
|
|
749
838
|
assert(err == 0);
|
|
750
839
|
}
|
|
751
840
|
|
|
752
841
|
static js_value_t *
|
|
753
|
-
rocksdb_native_read
|
|
842
|
+
rocksdb_native_read(js_env_t *env, js_callback_info_t *info) {
|
|
754
843
|
int err;
|
|
755
844
|
|
|
756
845
|
size_t argc = 6;
|
|
@@ -765,18 +854,18 @@ rocksdb_native_read (js_env_t *env, js_callback_info_t *info) {
|
|
|
765
854
|
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
766
855
|
assert(err == 0);
|
|
767
856
|
|
|
768
|
-
rocksdb_native_read_batch_t *
|
|
769
|
-
err = js_get_arraybuffer_info(env, argv[1], (void **) &
|
|
857
|
+
rocksdb_native_read_batch_t *req;
|
|
858
|
+
err = js_get_arraybuffer_info(env, argv[1], (void **) &req, NULL);
|
|
770
859
|
assert(err == 0);
|
|
771
860
|
|
|
772
861
|
uint32_t len;
|
|
773
862
|
err = js_get_array_length(env, argv[2], &len);
|
|
774
863
|
assert(err == 0);
|
|
775
864
|
|
|
776
|
-
err = js_create_reference(env, argv[4], 1, &
|
|
865
|
+
err = js_create_reference(env, argv[4], 1, &req->ctx);
|
|
777
866
|
assert(err == 0);
|
|
778
867
|
|
|
779
|
-
err = js_create_reference(env, argv[5], 1, &
|
|
868
|
+
err = js_create_reference(env, argv[5], 1, &req->on_status);
|
|
780
869
|
assert(err == 0);
|
|
781
870
|
|
|
782
871
|
for (uint32_t i = 0; i < len; i++) {
|
|
@@ -792,11 +881,11 @@ rocksdb_native_read (js_env_t *env, js_callback_info_t *info) {
|
|
|
792
881
|
err = js_get_value_uint32(env, property, &type);
|
|
793
882
|
assert(err == 0);
|
|
794
883
|
|
|
795
|
-
|
|
884
|
+
req->reads[i].type = type;
|
|
796
885
|
|
|
797
886
|
switch (type) {
|
|
798
887
|
case rocksdb_get: {
|
|
799
|
-
rocksdb_slice_t *key = &
|
|
888
|
+
rocksdb_slice_t *key = &req->reads[i].key;
|
|
800
889
|
|
|
801
890
|
err = js_get_named_property(env, read, "key", &property);
|
|
802
891
|
assert(err == 0);
|
|
@@ -821,14 +910,14 @@ rocksdb_native_read (js_env_t *env, js_callback_info_t *info) {
|
|
|
821
910
|
assert(err == 0);
|
|
822
911
|
}
|
|
823
912
|
|
|
824
|
-
err = rocksdb_read(&db->handle, &
|
|
913
|
+
err = rocksdb_read(&db->handle, &req->handle, req->reads, req->errors, len, &options, rocksdb_native__on_read);
|
|
825
914
|
assert(err == 0);
|
|
826
915
|
|
|
827
916
|
return NULL;
|
|
828
917
|
}
|
|
829
918
|
|
|
830
919
|
static js_value_t *
|
|
831
|
-
rocksdb_native_write_init
|
|
920
|
+
rocksdb_native_write_init(js_env_t *env, js_callback_info_t *info) {
|
|
832
921
|
int err;
|
|
833
922
|
|
|
834
923
|
js_value_t *handle;
|
|
@@ -844,7 +933,7 @@ rocksdb_native_write_init (js_env_t *env, js_callback_info_t *info) {
|
|
|
844
933
|
}
|
|
845
934
|
|
|
846
935
|
static js_value_t *
|
|
847
|
-
rocksdb_native_write_buffer
|
|
936
|
+
rocksdb_native_write_buffer(js_env_t *env, js_callback_info_t *info) {
|
|
848
937
|
int err;
|
|
849
938
|
|
|
850
939
|
size_t argc = 2;
|
|
@@ -855,8 +944,8 @@ rocksdb_native_write_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
|
855
944
|
|
|
856
945
|
assert(argc == 2);
|
|
857
946
|
|
|
858
|
-
rocksdb_native_write_batch_t *
|
|
859
|
-
err = js_get_arraybuffer_info(env, argv[0], (void **) &
|
|
947
|
+
rocksdb_native_write_batch_t *req;
|
|
948
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
|
|
860
949
|
assert(err == 0);
|
|
861
950
|
|
|
862
951
|
uint32_t capacity;
|
|
@@ -869,28 +958,30 @@ rocksdb_native_write_buffer (js_env_t *env, js_callback_info_t *info) {
|
|
|
869
958
|
err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_write_t) + capacity * sizeof(char *), (void **) &data, &handle);
|
|
870
959
|
assert(err == 0);
|
|
871
960
|
|
|
872
|
-
|
|
961
|
+
req->capacity = capacity;
|
|
873
962
|
|
|
874
963
|
size_t offset = 0;
|
|
875
964
|
|
|
876
|
-
|
|
965
|
+
req->writes = (rocksdb_write_t *) &data[offset];
|
|
877
966
|
|
|
878
967
|
offset += capacity * sizeof(rocksdb_write_t);
|
|
879
968
|
|
|
880
|
-
|
|
969
|
+
req->errors = (char **) &data[offset];
|
|
881
970
|
|
|
882
971
|
return handle;
|
|
883
972
|
}
|
|
884
973
|
|
|
885
974
|
static void
|
|
886
|
-
rocksdb_native__on_write
|
|
975
|
+
rocksdb_native__on_write(rocksdb_write_batch_t *handle, int status) {
|
|
887
976
|
int err;
|
|
888
977
|
|
|
889
978
|
assert(status == 0);
|
|
890
979
|
|
|
891
|
-
rocksdb_native_write_batch_t *
|
|
980
|
+
rocksdb_native_write_batch_t *req = (rocksdb_native_write_batch_t *) handle->data;
|
|
892
981
|
|
|
893
|
-
|
|
982
|
+
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
983
|
+
|
|
984
|
+
js_env_t *env = req->env;
|
|
894
985
|
|
|
895
986
|
js_handle_scope_t *scope;
|
|
896
987
|
err = js_open_handle_scope(env, &scope);
|
|
@@ -898,8 +989,8 @@ rocksdb_native__on_write (rocksdb_write_batch_t *handle, int status) {
|
|
|
898
989
|
|
|
899
990
|
js_value_t *error;
|
|
900
991
|
|
|
901
|
-
if (
|
|
902
|
-
err = js_create_string_utf8(env, (utf8_t *)
|
|
992
|
+
if (req->handle.error) {
|
|
993
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
903
994
|
assert(err == 0);
|
|
904
995
|
} else {
|
|
905
996
|
err = js_get_null(env, &error);
|
|
@@ -907,27 +998,29 @@ rocksdb_native__on_write (rocksdb_write_batch_t *handle, int status) {
|
|
|
907
998
|
}
|
|
908
999
|
|
|
909
1000
|
js_value_t *ctx;
|
|
910
|
-
err = js_get_reference_value(env,
|
|
1001
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
911
1002
|
assert(err == 0);
|
|
912
1003
|
|
|
913
1004
|
js_value_t *cb;
|
|
914
|
-
err = js_get_reference_value(env,
|
|
1005
|
+
err = js_get_reference_value(env, req->on_status, &cb);
|
|
915
1006
|
assert(err == 0);
|
|
916
1007
|
|
|
917
|
-
err = js_delete_reference(env,
|
|
1008
|
+
err = js_delete_reference(env, req->on_status);
|
|
918
1009
|
assert(err == 0);
|
|
919
1010
|
|
|
920
|
-
err = js_delete_reference(env,
|
|
1011
|
+
err = js_delete_reference(env, req->ctx);
|
|
921
1012
|
assert(err == 0);
|
|
922
1013
|
|
|
923
|
-
|
|
1014
|
+
if (!db->exiting) {
|
|
1015
|
+
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
1016
|
+
}
|
|
924
1017
|
|
|
925
1018
|
err = js_close_handle_scope(env, scope);
|
|
926
1019
|
assert(err == 0);
|
|
927
1020
|
}
|
|
928
1021
|
|
|
929
1022
|
static js_value_t *
|
|
930
|
-
rocksdb_native_write
|
|
1023
|
+
rocksdb_native_write(js_env_t *env, js_callback_info_t *info) {
|
|
931
1024
|
int err;
|
|
932
1025
|
|
|
933
1026
|
size_t argc = 5;
|
|
@@ -942,18 +1035,18 @@ rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
|
|
|
942
1035
|
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
943
1036
|
assert(err == 0);
|
|
944
1037
|
|
|
945
|
-
rocksdb_native_write_batch_t *
|
|
946
|
-
err = js_get_arraybuffer_info(env, argv[1], (void **) &
|
|
1038
|
+
rocksdb_native_write_batch_t *req;
|
|
1039
|
+
err = js_get_arraybuffer_info(env, argv[1], (void **) &req, NULL);
|
|
947
1040
|
assert(err == 0);
|
|
948
1041
|
|
|
949
1042
|
uint32_t len;
|
|
950
1043
|
err = js_get_array_length(env, argv[2], &len);
|
|
951
1044
|
assert(err == 0);
|
|
952
1045
|
|
|
953
|
-
err = js_create_reference(env, argv[3], 1, &
|
|
1046
|
+
err = js_create_reference(env, argv[3], 1, &req->ctx);
|
|
954
1047
|
assert(err == 0);
|
|
955
1048
|
|
|
956
|
-
err = js_create_reference(env, argv[4], 1, &
|
|
1049
|
+
err = js_create_reference(env, argv[4], 1, &req->on_status);
|
|
957
1050
|
assert(err == 0);
|
|
958
1051
|
|
|
959
1052
|
for (uint32_t i = 0; i < len; i++) {
|
|
@@ -969,11 +1062,11 @@ rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
|
|
|
969
1062
|
err = js_get_value_uint32(env, property, &type);
|
|
970
1063
|
assert(err == 0);
|
|
971
1064
|
|
|
972
|
-
|
|
1065
|
+
req->writes[i].type = type;
|
|
973
1066
|
|
|
974
1067
|
switch (type) {
|
|
975
1068
|
case rocksdb_put: {
|
|
976
|
-
rocksdb_slice_t *key = &
|
|
1069
|
+
rocksdb_slice_t *key = &req->writes[i].key;
|
|
977
1070
|
|
|
978
1071
|
err = js_get_named_property(env, write, "key", &property);
|
|
979
1072
|
assert(err == 0);
|
|
@@ -981,7 +1074,7 @@ rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
|
|
|
981
1074
|
err = js_get_typedarray_info(env, property, NULL, (void **) &key->data, &key->len, NULL, NULL);
|
|
982
1075
|
assert(err == 0);
|
|
983
1076
|
|
|
984
|
-
rocksdb_slice_t *value = &
|
|
1077
|
+
rocksdb_slice_t *value = &req->writes[i].value;
|
|
985
1078
|
|
|
986
1079
|
err = js_get_named_property(env, write, "value", &property);
|
|
987
1080
|
assert(err == 0);
|
|
@@ -992,7 +1085,7 @@ rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
|
|
|
992
1085
|
}
|
|
993
1086
|
|
|
994
1087
|
case rocksdb_delete: {
|
|
995
|
-
rocksdb_slice_t *key = &
|
|
1088
|
+
rocksdb_slice_t *key = &req->writes[i].key;
|
|
996
1089
|
|
|
997
1090
|
err = js_get_named_property(env, write, "key", &property);
|
|
998
1091
|
assert(err == 0);
|
|
@@ -1003,7 +1096,7 @@ rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
|
|
|
1003
1096
|
}
|
|
1004
1097
|
|
|
1005
1098
|
case rocksdb_delete_range: {
|
|
1006
|
-
rocksdb_slice_t *start = &
|
|
1099
|
+
rocksdb_slice_t *start = &req->writes[i].start;
|
|
1007
1100
|
|
|
1008
1101
|
err = js_get_named_property(env, write, "start", &property);
|
|
1009
1102
|
assert(err == 0);
|
|
@@ -1011,7 +1104,7 @@ rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
|
|
|
1011
1104
|
err = js_get_typedarray_info(env, property, NULL, (void **) &start->data, &start->len, NULL, NULL);
|
|
1012
1105
|
assert(err == 0);
|
|
1013
1106
|
|
|
1014
|
-
rocksdb_slice_t *end = &
|
|
1107
|
+
rocksdb_slice_t *end = &req->writes[i].end;
|
|
1015
1108
|
|
|
1016
1109
|
err = js_get_named_property(env, write, "end", &property);
|
|
1017
1110
|
assert(err == 0);
|
|
@@ -1023,14 +1116,14 @@ rocksdb_native_write (js_env_t *env, js_callback_info_t *info) {
|
|
|
1023
1116
|
}
|
|
1024
1117
|
}
|
|
1025
1118
|
|
|
1026
|
-
err = rocksdb_write(&db->handle, &
|
|
1119
|
+
err = rocksdb_write(&db->handle, &req->handle, req->writes, len, NULL, rocksdb_native__on_write);
|
|
1027
1120
|
assert(err == 0);
|
|
1028
1121
|
|
|
1029
1122
|
return NULL;
|
|
1030
1123
|
}
|
|
1031
1124
|
|
|
1032
1125
|
static js_value_t *
|
|
1033
|
-
rocksdb_native_snapshot_create
|
|
1126
|
+
rocksdb_native_snapshot_create(js_env_t *env, js_callback_info_t *info) {
|
|
1034
1127
|
int err;
|
|
1035
1128
|
|
|
1036
1129
|
size_t argc = 1;
|
|
@@ -1058,7 +1151,7 @@ rocksdb_native_snapshot_create (js_env_t *env, js_callback_info_t *info) {
|
|
|
1058
1151
|
}
|
|
1059
1152
|
|
|
1060
1153
|
static js_value_t *
|
|
1061
|
-
rocksdb_native_snapshot_destroy
|
|
1154
|
+
rocksdb_native_snapshot_destroy(js_env_t *env, js_callback_info_t *info) {
|
|
1062
1155
|
int err;
|
|
1063
1156
|
|
|
1064
1157
|
size_t argc = 1;
|
|
@@ -1079,7 +1172,7 @@ rocksdb_native_snapshot_destroy (js_env_t *env, js_callback_info_t *info) {
|
|
|
1079
1172
|
}
|
|
1080
1173
|
|
|
1081
1174
|
static js_value_t *
|
|
1082
|
-
rocksdb_native_exports
|
|
1175
|
+
rocksdb_native_exports(js_env_t *env, js_value_t *exports) {
|
|
1083
1176
|
int err;
|
|
1084
1177
|
|
|
1085
1178
|
#define V(name, fn) \
|