rocksdb-native
Advanced tools
+353
-388
@@ -76,2 +76,3 @@ #include <set> | ||
| js_persistent_t<js_receiver_t> ctx; | ||
| js_persistent_t<js_arraybuffer_t> self; | ||
| js_persistent_t<rocksdb_native_on_close_t> on_close; | ||
@@ -108,3 +109,3 @@ }; | ||
| bool active; | ||
| bool closing; | ||
| bool exiting; | ||
@@ -198,46 +199,39 @@ | ||
| auto descriptors = handle->column_families; | ||
| auto handles = handle->handles; | ||
| if (db->exiting) { | ||
| req->on_open.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| rocksdb_native_on_open_t cb; | ||
| err = js_get_reference_value(env, req->on_open, cb); | ||
| assert(err == 0); | ||
| rocksdb_native_on_open_t cb; | ||
| err = js_get_reference_value(env, req->on_open, cb); | ||
| assert(err == 0); | ||
| js_array_t column_families; | ||
| err = js_get_reference_value(env, req->column_families, column_families); | ||
| assert(err == 0); | ||
| js_array_t column_families; | ||
| err = js_get_reference_value(env, req->column_families, column_families); | ||
| assert(err == 0); | ||
| req->on_open.reset(); | ||
| req->column_families.reset(); | ||
| req->ctx.reset(); | ||
| req->on_open.reset(); | ||
| req->column_families.reset(); | ||
| req->ctx.reset(); | ||
| std::optional<js_string_t> error; | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } else { | ||
| std::vector<js_arraybuffer_t> elements; | ||
| err = js_get_array_elements(env, column_families, elements); | ||
| assert(err == 0); | ||
| rocksdb_column_family_t **handles = handle->handles; | ||
| const auto len = elements.size(); | ||
| if (req->handle.error == nullptr) { | ||
| std::vector<js_arraybuffer_t> elements; | ||
| err = js_get_array_elements(env, column_families, elements); | ||
| assert(err == 0); | ||
| const auto len = elements.size(); | ||
| for (uint32_t i = 0; i < len; i++) { | ||
| for (uint32_t i = 0; i < len; i++) { | ||
| if (db->exiting) rocksdb_column_family_destroy(&db->handle, handles[i]); | ||
| else { | ||
| js_arraybuffer_t handle = elements[i]; | ||
@@ -257,11 +251,14 @@ | ||
| } | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| (void) err; | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| delete[] descriptors; | ||
| delete[] handles; | ||
| } | ||
| delete[] descriptors; | ||
| delete[] handles; | ||
| } | ||
@@ -284,4 +281,2 @@ | ||
| db->column_families.~set(); | ||
| for (auto &snapshot : db->snapshots) { | ||
@@ -293,2 +288,3 @@ rocksdb_snapshot_destroy(&snapshot->handle); | ||
| db->column_families.~set(); | ||
| db->snapshots.~set(); | ||
@@ -311,35 +307,28 @@ } | ||
| if (db->exiting) { | ||
| if (db->closing) { | ||
| req->on_close.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| free(req); | ||
| } | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| db->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| rocksdb_native_on_close_t cb; | ||
| err = js_get_reference_value(env, req->on_close, cb); | ||
| assert(err == 0); | ||
| rocksdb_native_on_close_t cb; | ||
| err = js_get_reference_value(env, req->on_close, cb); | ||
| assert(err == 0); | ||
| req->on_close.reset(); | ||
| req->self.reset(); | ||
| req->ctx.reset(); | ||
| req->on_close.reset(); | ||
| req->ctx.reset(); | ||
| db->ctx.reset(); | ||
| db->ctx.reset(); | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx); | ||
| (void) err; | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_finish_deferred_teardown_callback(teardown); | ||
@@ -350,3 +339,3 @@ assert(err == 0); | ||
| static void | ||
| rocksdb_native__on_teardown(js_deferred_teardown_t *handle, void *data) { | ||
| rocksdb_native__on_teardown(js_deferred_teardown_t *teardown, void *data) { | ||
| int err; | ||
@@ -356,4 +345,2 @@ | ||
| auto env = db->env; | ||
| db->exiting = true; | ||
@@ -363,4 +350,14 @@ | ||
| auto req = reinterpret_cast<rocksdb_native_close_t *>(malloc(sizeof(rocksdb_native_close_t))); | ||
| auto env = db->env; | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_arraybuffer_t handle; | ||
| rocksdb_native_close_t *req; | ||
| err = js_create_arraybuffer(env, req, handle); | ||
| assert(err == 0); | ||
| req->env = env; | ||
@@ -371,2 +368,22 @@ req->handle.data = req; | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_null(env, static_cast<js_value_t **>(ctx)); | ||
| assert(err == 0); | ||
| rocksdb_native_on_close_t on_close; | ||
| err = js_get_null(env, static_cast<js_value_t **>(on_close)); | ||
| assert(err == 0); | ||
| err = js_create_reference(env, ctx, req->ctx); | ||
| assert(err == 0); | ||
| err = js_create_reference(env, handle, req->self); | ||
| assert(err == 0); | ||
| err = js_create_reference(env, on_close, req->on_close); | ||
| assert(err == 0); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -391,6 +408,2 @@ | ||
| uv_loop_t *loop; | ||
| err = js_get_env_loop(env, &loop); | ||
| assert(err == 0); | ||
| js_arraybuffer_t handle; | ||
@@ -425,11 +438,2 @@ | ||
| err = rocksdb_init(loop, &db->handle); | ||
| if (err < 0) { | ||
| err = js_throw_error(env, uv_err_name(err), uv_strerror(err)); | ||
| assert(err == 0); | ||
| throw js_pending_exception; | ||
| } | ||
| return handle; | ||
@@ -473,2 +477,6 @@ } | ||
| uv_loop_t *loop; | ||
| err = js_get_env_loop(env, &loop); | ||
| assert(err == 0); | ||
| js_arraybuffer_t handle; | ||
@@ -485,3 +493,3 @@ | ||
| err = rocksdb_open(&db->handle, &req->handle, path, &db->options, column_families, handles, len, nullptr, rocksdb_native__on_open); | ||
| err = rocksdb_open(loop, &db->handle, &req->handle, path, &db->options, column_families, handles, len, nullptr, rocksdb_native__on_open); | ||
@@ -549,2 +557,5 @@ if (err < 0) { | ||
| err = js_create_reference(env, handle, req->self); | ||
| assert(err == 0); | ||
| err = js_create_reference(env, on_close, req->on_close); | ||
@@ -570,32 +581,31 @@ assert(err == 0); | ||
| auto teardown = db->teardown; | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| if (db->exiting) { | ||
| req->on_suspend.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| rocksdb_native_on_suspend_t cb; | ||
| err = js_get_reference_value(env, req->on_suspend, cb); | ||
| assert(err == 0); | ||
| rocksdb_native_on_suspend_t cb; | ||
| err = js_get_reference_value(env, req->on_suspend, cb); | ||
| assert(err == 0); | ||
| req->on_suspend.reset(); | ||
| req->ctx.reset(); | ||
| std::optional<js_string_t> error; | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| (void) err; | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -651,35 +661,31 @@ | ||
| auto teardown = db->teardown; | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| if (db->exiting) { | ||
| req->on_resume.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| rocksdb_native_on_resume_t cb; | ||
| err = js_get_reference_value(env, req->on_resume, cb); | ||
| assert(err == 0); | ||
| rocksdb_native_on_resume_t cb; | ||
| err = js_get_reference_value(env, req->on_resume, cb); | ||
| assert(err == 0); | ||
| req->on_resume.reset(); | ||
| req->ctx.reset(); | ||
| req->on_resume.reset(); | ||
| req->ctx.reset(); | ||
| std::optional<js_string_t> error; | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| (void) err; | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -837,3 +843,3 @@ | ||
| req->env = env; | ||
| req->active = false; | ||
| req->closing = false; | ||
| req->exiting = false; | ||
@@ -878,4 +884,2 @@ req->handle.data = req; | ||
| req->active = false; | ||
| auto env = req->env; | ||
@@ -885,38 +889,34 @@ | ||
| if (req->exiting) { | ||
| req->on_open.reset(); | ||
| req->on_close.reset(); | ||
| req->on_read.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| rocksdb_native_on_iterator_close_t cb; | ||
| err = js_get_reference_value(env, req->on_close, cb); | ||
| assert(err == 0); | ||
| rocksdb_native_on_iterator_close_t cb; | ||
| err = js_get_reference_value(env, req->on_close, cb); | ||
| assert(err == 0); | ||
| req->on_open.reset(); | ||
| req->on_close.reset(); | ||
| req->on_read.reset(); | ||
| req->ctx.reset(); | ||
| req->on_open.reset(); | ||
| req->on_close.reset(); | ||
| req->on_read.reset(); | ||
| req->ctx.reset(); | ||
| std::optional<js_string_t> error; | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| err = js_close_handle_scope(env, scope); | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| if (!req->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| (void) err; | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| err = js_finish_deferred_teardown_callback(teardown); | ||
@@ -934,38 +934,34 @@ assert(err == 0); | ||
| req->active = false; | ||
| auto env = req->env; | ||
| if (req->exiting) { | ||
| err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close); | ||
| assert(err == 0); | ||
| } else { | ||
| auto env = req->env; | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| rocksdb_native_on_iterator_open_t cb; | ||
| err = js_get_reference_value(env, req->on_open, cb); | ||
| assert(err == 0); | ||
| rocksdb_native_on_iterator_open_t cb; | ||
| err = js_get_reference_value(env, req->on_open, cb); | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| std::optional<js_string_t> error; | ||
| if (!req->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| (void) err; | ||
| } | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| static void | ||
| rocksdb_native__on_iterator_teardown(js_deferred_teardown_t *handle, void *data) { | ||
| rocksdb_native__on_iterator_teardown(js_deferred_teardown_t *teardown, void *data) { | ||
| int err; | ||
@@ -977,3 +973,3 @@ | ||
| if (req->active) return; | ||
| if (req->closing) return; | ||
@@ -1035,4 +1031,2 @@ err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close); | ||
| req->active = true; | ||
| err = js_create_reference(env, ctx, req->ctx); | ||
@@ -1067,3 +1061,3 @@ assert(err == 0); | ||
| req->active = true; | ||
| req->closing = true; | ||
| } | ||
@@ -1079,53 +1073,42 @@ | ||
| req->active = false; | ||
| auto db = reinterpret_cast<rocksdb_native_t *>(req->handle.req.db); | ||
| size_t len = req->handle.len; | ||
| auto len = req->handle.len; | ||
| if (db->exiting) { | ||
| if (status == 0 && req->handle.error == nullptr) { | ||
| for (size_t i = 0; i < len; i++) { | ||
| js_value_t *result; | ||
| auto env = req->env; | ||
| rocksdb_slice_destroy(&req->keys[i]); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| rocksdb_slice_destroy(&req->values[i]); | ||
| } | ||
| } | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close); | ||
| assert(err == 0); | ||
| } else { | ||
| auto env = req->env; | ||
| rocksdb_native_on_iterator_read_t cb; | ||
| err = js_get_reference_value(env, req->on_read, cb); | ||
| assert(err == 0); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| std::optional<js_string_t> error; | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| std::vector<js_arraybuffer_t> keys; | ||
| keys.reserve(len); | ||
| rocksdb_native_on_iterator_read_t cb; | ||
| err = js_get_reference_value(env, req->on_read, cb); | ||
| std::vector<js_arraybuffer_t> values; | ||
| values.reserve(len); | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } else { | ||
| for (size_t i = 0; i < len; i++) { | ||
| rocksdb_slice_t *key = &req->keys[i]; | ||
| rocksdb_slice_t *value = &req->values[i]; | ||
| std::optional<js_string_t> error; | ||
| std::vector<js_arraybuffer_t> keys; | ||
| keys.reserve(len); | ||
| std::vector<js_arraybuffer_t> values; | ||
| values.reserve(len); | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } else { | ||
| for (size_t i = 0; i < len; i++) { | ||
| if (req->exiting) { | ||
| rocksdb_slice_destroy(key); | ||
| rocksdb_slice_destroy(value); | ||
| } else { | ||
| js_arraybuffer_t result; | ||
| rocksdb_slice_t *key = &req->keys[i]; | ||
| err = rocksdb_native__try_create_external_arraybuffer(env, const_cast<char *>(key->data), key->len, result); | ||
@@ -1136,4 +1119,2 @@ assert(err == 0); | ||
| rocksdb_slice_t *value = &req->values[i]; | ||
| err = rocksdb_native__try_create_external_arraybuffer(env, const_cast<char *>(value->data), value->len, result); | ||
@@ -1145,8 +1126,11 @@ assert(err == 0); | ||
| } | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error, keys, values); | ||
| if (!req->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error, keys, values); | ||
| (void) err; | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -1170,4 +1154,2 @@ | ||
| } | ||
| req->active = true; | ||
| } | ||
@@ -1221,53 +1203,52 @@ | ||
| auto len = req->handle.len; | ||
| auto env = req->env; | ||
| size_t len = req->handle.len; | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| if (db->exiting) { | ||
| if (status == 0) { | ||
| for (size_t i = 0; i < len; i++) { | ||
| char *error = req->handle.errors[i]; | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| if (error) continue; | ||
| rocksdb_native_on_read_t cb; | ||
| err = js_get_reference_value(env, req->on_read, cb); | ||
| assert(err == 0); | ||
| rocksdb_slice_destroy(&req->reads[i].value); | ||
| } | ||
| } | ||
| req->on_read.reset(); | ||
| req->ctx.reset(); | ||
| req->on_read.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_array_t errors; | ||
| err = js_create_array(env, len, errors); | ||
| assert(err == 0); | ||
| js_array_t errors; | ||
| err = js_create_array(env, len, errors); | ||
| assert(err == 0); | ||
| js_array_t values; | ||
| err = js_create_array(env, len, values); | ||
| assert(err == 0); | ||
| js_array_t values; | ||
| err = js_create_array(env, len, values); | ||
| assert(err == 0); | ||
| for (size_t i = 0; i < len; i++) { | ||
| char *error = req->handle.errors[i]; | ||
| for (size_t i = 0; i < len; i++) { | ||
| char *error = req->handle.errors[i]; | ||
| if (error) { | ||
| js_string_t result; | ||
| if (error) { | ||
| js_string_t result; | ||
| err = js_create_string(env, error, result); | ||
| assert(err == 0); | ||
| err = js_create_string(env, error, result); | ||
| assert(err == 0); | ||
| err = js_set_element(env, errors, i, result); | ||
| assert(err == 0); | ||
| } else { | ||
| rocksdb_slice_t *value = &req->reads[i].value; | ||
| err = js_set_element(env, errors, i, result); | ||
| assert(err == 0); | ||
| } else { | ||
| if (db->exiting) rocksdb_slice_destroy(value); | ||
| else { | ||
| js_arraybuffer_t result; | ||
| rocksdb_slice_t *slice = &req->reads[i].value; | ||
| if (slice->data == nullptr && slice->len == size_t(-1)) { | ||
| if (value->data == nullptr && value->len == size_t(-1)) { | ||
| err = js_get_null(env, static_cast<js_value_t **>(result)); | ||
| assert(err == 0); | ||
| } else { | ||
| err = rocksdb_native__try_create_external_arraybuffer(env, const_cast<char *>(slice->data), slice->len, result); | ||
| err = rocksdb_native__try_create_external_arraybuffer(env, const_cast<char *>(value->data), value->len, result); | ||
| assert(err == 0); | ||
@@ -1280,19 +1261,11 @@ } | ||
| } | ||
| } | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, errors, values); | ||
| (void) err; | ||
| } | ||
| rocksdb_native_on_read_t cb; | ||
| err = js_get_reference_value(env, req->on_read, cb); | ||
| assert(err == 0); | ||
| req->on_read.reset(); | ||
| req->ctx.reset(); | ||
| js_call_function_with_checkpoint(env, cb, ctx, errors, values); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -1427,33 +1400,31 @@ | ||
| if (db->exiting) { | ||
| req->on_write.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| std::optional<js_string_t> error; | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| rocksdb_native_on_write_t cb; | ||
| err = js_get_reference_value(env, req->on_write, cb); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| req->on_write.reset(); | ||
| req->ctx.reset(); | ||
| rocksdb_native_on_write_t cb; | ||
| err = js_get_reference_value(env, req->on_write, cb); | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| req->on_write.reset(); | ||
| req->ctx.reset(); | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| (void) err; | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -1579,33 +1550,31 @@ | ||
| if (db->exiting) { | ||
| req->on_flush.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| std::optional<js_string_t> error; | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| rocksdb_native_on_flush_t cb; | ||
| err = js_get_reference_value(env, req->on_flush, cb); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| req->on_flush.reset(); | ||
| req->ctx.reset(); | ||
| rocksdb_native_on_flush_t cb; | ||
| err = js_get_reference_value(env, req->on_flush, cb); | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| req->on_flush.reset(); | ||
| req->ctx.reset(); | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| (void) err; | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -1662,33 +1631,31 @@ | ||
| if (db->exiting) { | ||
| req->on_compact_range.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| std::optional<js_string_t> error; | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| rocksdb_native_on_compact_range_t cb; | ||
| err = js_get_reference_value(env, req->on_compact_range, cb); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| req->on_compact_range.reset(); | ||
| req->ctx.reset(); | ||
| rocksdb_native_on_compact_range_t cb; | ||
| err = js_get_reference_value(env, req->on_compact_range, cb); | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| req->on_compact_range.reset(); | ||
| req->ctx.reset(); | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| (void) err; | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -1761,33 +1728,31 @@ | ||
| if (db->exiting) { | ||
| req->on_approximate_size.reset(); | ||
| req->ctx.reset(); | ||
| } else { | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| js_handle_scope_t *scope; | ||
| err = js_open_handle_scope(env, &scope); | ||
| assert(err == 0); | ||
| std::optional<js_string_t> error; | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| rocksdb_native_on_approximate_size_t cb; | ||
| err = js_get_reference_value(env, req->on_approximate_size, cb); | ||
| assert(err == 0); | ||
| js_receiver_t ctx; | ||
| err = js_get_reference_value(env, req->ctx, ctx); | ||
| assert(err == 0); | ||
| req->on_approximate_size.reset(); | ||
| req->ctx.reset(); | ||
| rocksdb_native_on_approximate_size_t cb; | ||
| err = js_get_reference_value(env, req->on_approximate_size, cb); | ||
| std::optional<js_string_t> error; | ||
| if (req->handle.error) { | ||
| err = js_create_string(env, req->handle.error, error.emplace()); | ||
| assert(err == 0); | ||
| } | ||
| req->on_approximate_size.reset(); | ||
| req->ctx.reset(); | ||
| if (!db->exiting) { | ||
| err = js_call_function_with_checkpoint(env, cb, ctx, error, req->handle.result); | ||
| (void) err; | ||
| } | ||
| js_call_function_with_checkpoint(env, cb, ctx, error, req->handle.result); | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
| err = js_close_handle_scope(env, scope); | ||
| assert(err == 0); | ||
| } | ||
@@ -1794,0 +1759,0 @@ |
+1
-1
@@ -12,3 +12,3 @@ cmake_minimum_required(VERSION 4.0) | ||
| fetch_package("github:holepunchto/librocksdb#6a480d5") | ||
| fetch_package("github:holepunchto/librocksdb#d5b0f65") | ||
| fetch_package("github:holepunchto/libjstl#098664c") | ||
@@ -15,0 +15,0 @@ |
+1
-1
| { | ||
| "name": "rocksdb-native", | ||
| "version": "3.11.2", | ||
| "version": "3.11.3", | ||
| "description": "librocksdb bindings for JavaScript", | ||
@@ -5,0 +5,0 @@ "exports": { |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
183049396
-0.01%