@nxtedition/rocksdb 10.3.2 → 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.
- package/binding.cc +12 -38
- package/index.js +28 -33
- 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 (
|
|
1045
|
-
|
|
1046
|
-
NAPI_STATUS_RETURN(
|
|
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
|
-
|
|
1067
|
-
|
|
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
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
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
|
-
|
|
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 || valueEncoding === 'buffer') {
|
|
193
|
-
bufferHandler(arg1, arg2)
|
|
194
164
|
} else {
|
|
195
|
-
|
|
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
|
})
|