@nxtedition/rocksdb 10.2.2 → 10.2.3
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.cc
CHANGED
|
@@ -985,7 +985,7 @@ NAPI_METHOD(db_get_many) {
|
|
|
985
985
|
|
|
986
986
|
struct State {
|
|
987
987
|
std::vector<uint8_t> data;
|
|
988
|
-
std::vector<
|
|
988
|
+
std::vector<int32_t> sizes;
|
|
989
989
|
};
|
|
990
990
|
|
|
991
991
|
runAsync<State>(
|
|
@@ -1018,14 +1018,14 @@ NAPI_METHOD(db_get_many) {
|
|
|
1018
1018
|
|
|
1019
1019
|
auto push = [&](rocksdb::Slice* slice){
|
|
1020
1020
|
if (slice) {
|
|
1021
|
-
state.sizes.push_back(slice->size());
|
|
1021
|
+
state.sizes.push_back(static_cast<int32_t>(slice->size()));
|
|
1022
1022
|
std::copy_n(slice->data(), slice->size(), std::back_inserter(state.data));
|
|
1023
1023
|
|
|
1024
1024
|
if (state.data.size() & 0x7) {
|
|
1025
1025
|
state.data.resize((state.data.size() | 0x7) + 1);
|
|
1026
1026
|
}
|
|
1027
1027
|
} else {
|
|
1028
|
-
state.sizes.push_back(
|
|
1028
|
+
state.sizes.push_back(-1);
|
|
1029
1029
|
}
|
|
1030
1030
|
};
|
|
1031
1031
|
|
|
@@ -1038,20 +1038,12 @@ NAPI_METHOD(db_get_many) {
|
|
|
1038
1038
|
[=](auto& state, auto env, auto& argv) {
|
|
1039
1039
|
argv.resize(3);
|
|
1040
1040
|
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
napi_value element;
|
|
1049
|
-
if (maybeSize) {
|
|
1050
|
-
NAPI_STATUS_RETURN(napi_create_uint32(env, *maybeSize, &element));
|
|
1051
|
-
} else {
|
|
1052
|
-
NAPI_STATUS_RETURN(napi_get_undefined(env, &element));
|
|
1053
|
-
}
|
|
1054
|
-
NAPI_STATUS_RETURN(napi_set_element(env, argv[1], idx, element));
|
|
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();
|
|
1045
|
+
} else {
|
|
1046
|
+
NAPI_STATUS_RETURN(napi_get_undefined(env, &argv[1]));
|
|
1055
1047
|
}
|
|
1056
1048
|
|
|
1057
1049
|
if (state.data.size() > 0) {
|
|
@@ -1304,7 +1296,7 @@ NAPI_METHOD(iterator_nextv) {
|
|
|
1304
1296
|
|
|
1305
1297
|
struct State {
|
|
1306
1298
|
std::vector<uint8_t> data;
|
|
1307
|
-
std::vector<
|
|
1299
|
+
std::vector<int32_t> sizes;
|
|
1308
1300
|
bool finished = false;
|
|
1309
1301
|
};
|
|
1310
1302
|
|
|
@@ -1322,7 +1314,7 @@ NAPI_METHOD(iterator_nextv) {
|
|
|
1322
1314
|
|
|
1323
1315
|
auto push = [&](const std::optional<rocksdb::Slice>& slice){
|
|
1324
1316
|
if (slice) {
|
|
1325
|
-
state.sizes.push_back(slice->size());
|
|
1317
|
+
state.sizes.push_back(static_cast<int32_t>(slice->size()));
|
|
1326
1318
|
std::copy_n(slice->data(), slice->size(), std::back_inserter(state.data));
|
|
1327
1319
|
|
|
1328
1320
|
if (state.data.size() & 0x7) {
|
|
@@ -1331,7 +1323,7 @@ NAPI_METHOD(iterator_nextv) {
|
|
|
1331
1323
|
|
|
1332
1324
|
bytesRead += slice->size();
|
|
1333
1325
|
} else {
|
|
1334
|
-
state.sizes.push_back(
|
|
1326
|
+
state.sizes.push_back(-1);
|
|
1335
1327
|
}
|
|
1336
1328
|
};
|
|
1337
1329
|
|
|
@@ -1372,20 +1364,12 @@ NAPI_METHOD(iterator_nextv) {
|
|
|
1372
1364
|
[=](auto& state, auto env, auto& argv) {
|
|
1373
1365
|
argv.resize(4);
|
|
1374
1366
|
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
napi_value element;
|
|
1383
|
-
if (maybeSize) {
|
|
1384
|
-
NAPI_STATUS_RETURN(napi_create_uint32(env, *maybeSize, &element));
|
|
1385
|
-
} else {
|
|
1386
|
-
NAPI_STATUS_RETURN(napi_get_undefined(env, &element));
|
|
1387
|
-
}
|
|
1388
|
-
NAPI_STATUS_RETURN(napi_set_element(env, argv[1], idx, element));
|
|
1367
|
+
if (state.sizes.size() > 0) {
|
|
1368
|
+
auto sizes = std::make_unique<std::vector<int32_t>>(std::move(state.sizes));
|
|
1369
|
+
NAPI_STATUS_RETURN(napi_create_external_buffer(env, sizes->size() * 4, sizes->data(), Finalize<std::vector<int32_t>>, sizes.get(), &argv[1]));
|
|
1370
|
+
sizes.release();
|
|
1371
|
+
} else {
|
|
1372
|
+
NAPI_STATUS_RETURN(napi_get_undefined(env, &argv[1]));
|
|
1389
1373
|
}
|
|
1390
1374
|
|
|
1391
1375
|
if (state.data.size() > 0) {
|
package/index.js
CHANGED
|
@@ -152,23 +152,25 @@ class RocksLevel extends AbstractLevel {
|
|
|
152
152
|
const { valueEncoding } = options ?? EMPTY
|
|
153
153
|
try {
|
|
154
154
|
this[kRef]()
|
|
155
|
-
binding.db_get_many(this[kContext], keys, options ?? EMPTY, (err, sizes,
|
|
155
|
+
binding.db_get_many(this[kContext], keys, options ?? EMPTY, (err, sizes, data) => {
|
|
156
156
|
if (err) {
|
|
157
157
|
callback(err)
|
|
158
158
|
} else {
|
|
159
|
-
|
|
159
|
+
data ??= Buffer.alloc(0)
|
|
160
|
+
sizes ??= Buffer.alloc(0)
|
|
160
161
|
const val = []
|
|
161
162
|
let offset = 0
|
|
162
|
-
|
|
163
|
-
|
|
163
|
+
const sizes32 = new Int32Array(sizes.buffer, sizes.byteOffset, sizes.byteLength / 4)
|
|
164
|
+
for (const size of sizes32) {
|
|
165
|
+
if (size < 0) {
|
|
164
166
|
val.push(undefined)
|
|
165
167
|
} else {
|
|
166
168
|
if (!valueEncoding || valueEncoding === 'buffer') {
|
|
167
|
-
val.push(
|
|
169
|
+
val.push(data.subarray(offset, offset + size))
|
|
168
170
|
} else if (valueEncoding === 'slice') {
|
|
169
|
-
val.push({ buffer, byteOffset: offset, byteLength: size })
|
|
171
|
+
val.push({ buffer: data, byteOffset: offset, byteLength: size })
|
|
170
172
|
} else {
|
|
171
|
-
val.push(
|
|
173
|
+
val.push(data.toString(valueEncoding, offset, offset + size))
|
|
172
174
|
}
|
|
173
175
|
offset += size
|
|
174
176
|
if (offset & 0x7) {
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
package/util.js
CHANGED
|
@@ -5,15 +5,17 @@ function handleNextv (err, sizes, buffer, finished, options, callback) {
|
|
|
5
5
|
callback(err)
|
|
6
6
|
} else {
|
|
7
7
|
buffer ??= Buffer.alloc(0)
|
|
8
|
+
sizes ??= Buffer.alloc(0)
|
|
8
9
|
|
|
9
10
|
const { keyEncoding, valueEncoding } = options ?? {}
|
|
10
11
|
|
|
11
12
|
const rows = []
|
|
12
13
|
let offset = 0
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
const sizes32 = new Int32Array(sizes.buffer, sizes.byteOffset, sizes.byteLength / 4)
|
|
15
|
+
for (let n = 0; n < sizes32.length; n++) {
|
|
16
|
+
const size = sizes32[n]
|
|
15
17
|
const encoding = n & 1 ? valueEncoding : keyEncoding
|
|
16
|
-
if (size
|
|
18
|
+
if (size < 0) {
|
|
17
19
|
rows.push(undefined)
|
|
18
20
|
} else {
|
|
19
21
|
if (!encoding || encoding === 'buffer') {
|