@nxtedition/rocksdb 10.3.3 → 10.3.4

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.
Files changed (3) hide show
  1. package/binding.cc +12 -38
  2. package/index.js +28 -33
  3. package/package.json +1 -1
package/binding.cc CHANGED
@@ -965,9 +965,6 @@ NAPI_METHOD(db_get_many) {
965
965
  rocksdb::ColumnFamilyHandle* column = database->db->DefaultColumnFamily();
966
966
  NAPI_STATUS_THROWS(GetProperty(env, options, "column", column));
967
967
 
968
- Encoding valueEncoding = Encoding::Buffer;
969
- NAPI_STATUS_THROWS(GetProperty(env, options, "valueEncoding", valueEncoding));
970
-
971
968
  bool takeSnapshot = true;
972
969
  NAPI_STATUS_THROWS(GetProperty(env, options, "snapshot", takeSnapshot));
973
970
 
@@ -1041,43 +1038,20 @@ NAPI_METHOD(db_get_many) {
1041
1038
  [=](auto& state, auto env, auto& argv) {
1042
1039
  argv.resize(3);
1043
1040
 
1044
- if (valueEncoding == Encoding::String) {
1045
- napi_value arr;
1046
- NAPI_STATUS_RETURN(napi_create_array_with_length(env, state.sizes.size(), &argv[1]));
1047
-
1048
- const auto ptr = reinterpret_cast<char*>(state.data.data());
1049
- auto offset = 0;
1050
- for (auto n = 0; n < state.sizes.size(); n++) {
1051
- napi_value str;
1052
- const auto size = state.sizes[n];
1053
- if (size >= 0) {
1054
- NAPI_STATUS_RETURN(napi_create_string_utf8(env, ptr + offset, static_cast<size_t>(size), &str));
1055
- offset += size;
1056
- if (offset & 0x7) {
1057
- offset = (offset | 0x7) + 1;
1058
- }
1059
- } else {
1060
- NAPI_STATUS_RETURN(napi_get_undefined(env, &str));
1061
- }
1062
- NAPI_STATUS_RETURN(napi_set_element(env, argv[1], n, str));
1063
- }
1064
- NAPI_STATUS_RETURN(napi_get_undefined(env, &argv[2]));
1041
+ if (state.sizes.size() > 0) {
1042
+ auto sizes = std::make_unique<std::vector<int32_t>>(std::move(state.sizes));
1043
+ NAPI_STATUS_RETURN(napi_create_external_buffer(env, sizes->size() * 4, sizes->data(), Finalize<std::vector<int32_t>>, sizes.get(), &argv[1]));
1044
+ sizes.release();
1065
1045
  } else {
1066
- if (state.sizes.size() > 0) {
1067
- auto sizes = std::make_unique<std::vector<int32_t>>(std::move(state.sizes));
1068
- NAPI_STATUS_RETURN(napi_create_external_buffer(env, sizes->size() * 4, sizes->data(), Finalize<std::vector<int32_t>>, sizes.get(), &argv[1]));
1069
- sizes.release();
1070
- } else {
1071
- NAPI_STATUS_RETURN(napi_get_undefined(env, &argv[1]));
1072
- }
1046
+ NAPI_STATUS_RETURN(napi_get_undefined(env, &argv[1]));
1047
+ }
1073
1048
 
1074
- if (state.data.size() > 0) {
1075
- auto data = std::make_unique<std::vector<uint8_t>>(std::move(state.data));
1076
- NAPI_STATUS_RETURN(napi_create_external_buffer(env, data->size(), data->data(), Finalize<std::vector<uint8_t>>, data.get(), &argv[2]));
1077
- data.release();
1078
- } else {
1079
- NAPI_STATUS_RETURN(napi_get_undefined(env, &argv[2]));
1080
- };
1049
+ if (state.data.size() > 0) {
1050
+ auto data = std::make_unique<std::vector<uint8_t>>(std::move(state.data));
1051
+ NAPI_STATUS_RETURN(napi_create_external_buffer(env, data->size(), data->data(), Finalize<std::vector<uint8_t>>, data.get(), &argv[2]));
1052
+ data.release();
1053
+ } else {
1054
+ NAPI_STATUS_RETURN(napi_get_undefined(env, &argv[2]));
1081
1055
  }
1082
1056
 
1083
1057
  return napi_ok;
package/index.js CHANGED
@@ -9,7 +9,7 @@ const { Iterator } = require('./iterator')
9
9
  const fs = require('node:fs')
10
10
  const assert = require('node:assert')
11
11
  const { handleNextv } = require('./util')
12
- const FastBuffer = Buffer[Symbol.species]
12
+
13
13
  const kContext = Symbol('context')
14
14
  const kColumns = Symbol('columns')
15
15
  const kPromise = Symbol('promise')
@@ -158,41 +158,36 @@ class RocksLevel extends AbstractLevel {
158
158
  const { valueEncoding } = options ?? EMPTY
159
159
  try {
160
160
  this[kRef]()
161
-
162
- function bufferHandler (sizes, buffer) {
163
- buffer ??= Buffer.alloc(0)
164
- sizes ??= Buffer.alloc(0)
165
-
166
- let offset = 0
167
- const rows = []
168
- const sizes32 = new Int32Array(sizes.buffer, sizes.byteOffset, sizes.byteLength / 4)
169
- for (let n = 0; n < sizes32.length; n++) {
170
- const size = sizes32[n]
171
- const encoding = valueEncoding
172
- if (size < 0) {
173
- rows.push(undefined)
174
- } else {
175
- if (encoding === 'slice') {
176
- rows.push({ buffer, byteOffset: offset, byteLength: size })
177
- } else {
178
- rows.push(new FastBuffer(buffer.buffer, offset, size))
179
- }
180
- offset += size
181
- if (offset & 0x7) {
182
- offset = (offset | 0x7) + 1
183
- }
184
- }
185
- }
186
- callback(null, rows)
187
- }
188
-
189
- binding.db_get_many(this[kContext], keys, options ?? EMPTY, (err, arg1, arg2) => {
161
+ binding.db_get_many(this[kContext], keys, options ?? EMPTY, (err, sizes, data) => {
190
162
  if (err) {
191
163
  callback(err)
192
- } else if (valueEncoding === 'utf8') {
193
- callback(null, arg1)
194
164
  } else {
195
- bufferHandler(arg1, arg2)
165
+ data ??= Buffer.alloc(0)
166
+ sizes ??= Buffer.alloc(0)
167
+
168
+ const rows = []
169
+ let offset = 0
170
+ const sizes32 = new Int32Array(sizes.buffer, sizes.byteOffset, sizes.byteLength / 4)
171
+ for (let n = 0; n < sizes32.length; n++) {
172
+ const size = sizes32[n]
173
+ const encoding = valueEncoding
174
+ if (size < 0) {
175
+ rows.push(undefined)
176
+ } else {
177
+ if (!encoding || encoding === 'buffer') {
178
+ rows.push(data.subarray(offset, offset + size))
179
+ } else if (encoding === 'slice') {
180
+ rows.push({ buffer: data, byteOffset: offset, byteLength: size })
181
+ } else {
182
+ rows.push(data.toString(encoding, offset, offset + size))
183
+ }
184
+ offset += size
185
+ if (offset & 0x7) {
186
+ offset = (offset | 0x7) + 1
187
+ }
188
+ }
189
+ }
190
+ callback(null, rows)
196
191
  }
197
192
  this[kUnref]()
198
193
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/rocksdb",
3
- "version": "10.3.3",
3
+ "version": "10.3.4",
4
4
  "description": "A low-level Node.js RocksDB binding",
5
5
  "license": "MIT",
6
6
  "main": "index.js",