@nxtedition/rocksdb 11.0.5 → 11.0.6
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 +90 -25
- package/index.js +6 -5
- package/package.json +1 -1
package/binding.cc
CHANGED
|
@@ -643,7 +643,6 @@ NAPI_METHOD(db_get_location) {
|
|
|
643
643
|
return result;
|
|
644
644
|
}
|
|
645
645
|
|
|
646
|
-
|
|
647
646
|
NAPI_METHOD(db_query) {
|
|
648
647
|
NAPI_ARGV(2);
|
|
649
648
|
|
|
@@ -997,7 +996,7 @@ NAPI_METHOD(db_close) {
|
|
|
997
996
|
return 0;
|
|
998
997
|
}
|
|
999
998
|
|
|
1000
|
-
NAPI_METHOD(
|
|
999
|
+
NAPI_METHOD(db_get_many_sync) {
|
|
1001
1000
|
NAPI_ARGV(3);
|
|
1002
1001
|
|
|
1003
1002
|
Database* database;
|
|
@@ -1039,9 +1038,6 @@ NAPI_METHOD(db_get_many) {
|
|
|
1039
1038
|
napi_value rows;
|
|
1040
1039
|
NAPI_STATUS_THROWS(napi_create_array_with_length(env, count, &rows));
|
|
1041
1040
|
|
|
1042
|
-
napi_value finished;
|
|
1043
|
-
NAPI_STATUS_THROWS(napi_get_boolean(env, true, &finished));
|
|
1044
|
-
|
|
1045
1041
|
for (auto n = 0; n < count; n++) {
|
|
1046
1042
|
napi_value row;
|
|
1047
1043
|
if (statuses[n].IsNotFound()) {
|
|
@@ -1055,11 +1051,88 @@ NAPI_METHOD(db_get_many) {
|
|
|
1055
1051
|
NAPI_STATUS_THROWS(napi_set_element(env, rows, n, row));
|
|
1056
1052
|
}
|
|
1057
1053
|
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1054
|
+
return rows;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
NAPI_METHOD(db_get_many) {
|
|
1058
|
+
NAPI_ARGV(4);
|
|
1059
|
+
|
|
1060
|
+
Database* database;
|
|
1061
|
+
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
1062
|
+
|
|
1063
|
+
uint32_t count;
|
|
1064
|
+
NAPI_STATUS_THROWS(napi_get_array_length(env, argv[1], &count));
|
|
1065
|
+
|
|
1066
|
+
bool fillCache = true;
|
|
1067
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "fillCache", fillCache));
|
|
1068
|
+
|
|
1069
|
+
rocksdb::ColumnFamilyHandle* column = database->db->DefaultColumnFamily();
|
|
1070
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "column", column));
|
|
1071
|
+
|
|
1072
|
+
Encoding valueEncoding = Encoding::Buffer;
|
|
1073
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "valueEncoding", valueEncoding));
|
|
1074
|
+
|
|
1075
|
+
int32_t highWaterMarkBytes = std::numeric_limits<int32_t>::max();
|
|
1076
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "highWaterMarkBytes", highWaterMarkBytes));
|
|
1077
|
+
|
|
1078
|
+
auto callback = argv[3];
|
|
1079
|
+
|
|
1080
|
+
std::vector<rocksdb::PinnableSlice> keys{count};
|
|
1081
|
+
|
|
1082
|
+
for (uint32_t n = 0; n < count; n++) {
|
|
1083
|
+
napi_value element;
|
|
1084
|
+
NAPI_STATUS_THROWS(napi_get_element(env, argv[1], n, &element));
|
|
1085
|
+
NAPI_STATUS_THROWS(GetValue(env, element, keys[n]));
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
struct State {
|
|
1089
|
+
std::vector<rocksdb::Status> statuses;
|
|
1090
|
+
std::vector<rocksdb::PinnableSlice> values;
|
|
1091
|
+
};
|
|
1092
|
+
|
|
1093
|
+
runAsync<State>(
|
|
1094
|
+
"leveldown.get_many", env, callback,
|
|
1095
|
+
[=, keys = std::move(keys)](auto& state) {
|
|
1096
|
+
std::vector<rocksdb::Slice> keys2{count};
|
|
1097
|
+
for (uint32_t n = 0; n < count; n++) {
|
|
1098
|
+
keys2[n] = keys[n];
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
rocksdb::ReadOptions readOptions;
|
|
1102
|
+
readOptions.fill_cache = fillCache;
|
|
1103
|
+
readOptions.async_io = true;
|
|
1104
|
+
readOptions.optimize_multiget_for_io = true;
|
|
1105
|
+
readOptions.value_size_soft_limit = highWaterMarkBytes;
|
|
1106
|
+
|
|
1107
|
+
state.statuses.resize(count);
|
|
1108
|
+
state.values.resize(count);
|
|
1109
|
+
|
|
1110
|
+
database->db->MultiGet(readOptions, column, count, keys2.data(), state.values.data(), state.statuses.data());
|
|
1111
|
+
|
|
1112
|
+
return rocksdb::Status::OK();
|
|
1113
|
+
},
|
|
1114
|
+
[=](auto& state, auto env, auto& argv) {
|
|
1115
|
+
argv.resize(2);
|
|
1116
|
+
|
|
1117
|
+
NAPI_STATUS_RETURN(napi_create_array_with_length(env, count, &argv[1]));
|
|
1118
|
+
|
|
1119
|
+
for (auto n = 0; n < count; n++) {
|
|
1120
|
+
napi_value row;
|
|
1121
|
+
if (state.statuses[n].IsNotFound()) {
|
|
1122
|
+
NAPI_STATUS_RETURN(napi_get_undefined(env, &row));
|
|
1123
|
+
} else if (state.statuses[n].IsAborted()) {
|
|
1124
|
+
NAPI_STATUS_RETURN(napi_get_null(env, &row));
|
|
1125
|
+
} else {
|
|
1126
|
+
ROCKS_STATUS_RETURN_NAPI(state.statuses[n]);
|
|
1127
|
+
NAPI_STATUS_RETURN(Convert(env, &state.values[n], valueEncoding, row));
|
|
1128
|
+
}
|
|
1129
|
+
NAPI_STATUS_RETURN(napi_set_element(env, argv[1], n, row));
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
return napi_ok;
|
|
1133
|
+
});
|
|
1134
|
+
|
|
1135
|
+
return 0;
|
|
1063
1136
|
}
|
|
1064
1137
|
|
|
1065
1138
|
NAPI_METHOD(db_clear) {
|
|
@@ -1264,10 +1337,8 @@ NAPI_METHOD(batch_put) {
|
|
|
1264
1337
|
rocksdb::Slice val;
|
|
1265
1338
|
NAPI_STATUS_THROWS(GetValue(env, argv[2], val));
|
|
1266
1339
|
|
|
1267
|
-
const auto options = argv[3];
|
|
1268
|
-
|
|
1269
1340
|
rocksdb::ColumnFamilyHandle* column = nullptr;
|
|
1270
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1341
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[3], "column", column));
|
|
1271
1342
|
|
|
1272
1343
|
if (column) {
|
|
1273
1344
|
ROCKS_STATUS_THROWS_NAPI(batch->Put(column, key, val));
|
|
@@ -1287,10 +1358,8 @@ NAPI_METHOD(batch_del) {
|
|
|
1287
1358
|
rocksdb::Slice key;
|
|
1288
1359
|
NAPI_STATUS_THROWS(GetValue(env, argv[1], key));
|
|
1289
1360
|
|
|
1290
|
-
const auto options = argv[2];
|
|
1291
|
-
|
|
1292
1361
|
rocksdb::ColumnFamilyHandle* column = nullptr;
|
|
1293
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1362
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "column", column));
|
|
1294
1363
|
|
|
1295
1364
|
if (column) {
|
|
1296
1365
|
ROCKS_STATUS_THROWS_NAPI(batch->Delete(column, key));
|
|
@@ -1313,10 +1382,8 @@ NAPI_METHOD(batch_merge) {
|
|
|
1313
1382
|
rocksdb::Slice val;
|
|
1314
1383
|
NAPI_STATUS_THROWS(GetValue(env, argv[2], val));
|
|
1315
1384
|
|
|
1316
|
-
const auto options = argv[3];
|
|
1317
|
-
|
|
1318
1385
|
rocksdb::ColumnFamilyHandle* column = nullptr;
|
|
1319
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1386
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[3], "column", column));
|
|
1320
1387
|
|
|
1321
1388
|
if (column) {
|
|
1322
1389
|
ROCKS_STATUS_THROWS_NAPI(batch->Merge(column, key, val));
|
|
@@ -1339,7 +1406,7 @@ NAPI_METHOD(batch_clear) {
|
|
|
1339
1406
|
}
|
|
1340
1407
|
|
|
1341
1408
|
NAPI_METHOD(batch_write) {
|
|
1342
|
-
NAPI_ARGV(
|
|
1409
|
+
NAPI_ARGV(3);
|
|
1343
1410
|
|
|
1344
1411
|
Database* database;
|
|
1345
1412
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
@@ -1347,14 +1414,11 @@ NAPI_METHOD(batch_write) {
|
|
|
1347
1414
|
rocksdb::WriteBatch* batch;
|
|
1348
1415
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[1], reinterpret_cast<void**>(&batch)));
|
|
1349
1416
|
|
|
1350
|
-
auto options = argv[2];
|
|
1351
|
-
auto callback = argv[3];
|
|
1352
|
-
|
|
1353
1417
|
bool sync = false;
|
|
1354
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1418
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "sync", sync));
|
|
1355
1419
|
|
|
1356
1420
|
bool lowPriority = false;
|
|
1357
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1421
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "lowPriority", lowPriority));
|
|
1358
1422
|
|
|
1359
1423
|
rocksdb::WriteOptions writeOptions;
|
|
1360
1424
|
writeOptions.sync = sync;
|
|
@@ -1421,6 +1485,7 @@ NAPI_INIT() {
|
|
|
1421
1485
|
NAPI_EXPORT_FUNCTION(db_get_location);
|
|
1422
1486
|
NAPI_EXPORT_FUNCTION(db_close);
|
|
1423
1487
|
NAPI_EXPORT_FUNCTION(db_get_many);
|
|
1488
|
+
NAPI_EXPORT_FUNCTION(db_get_many_sync);
|
|
1424
1489
|
NAPI_EXPORT_FUNCTION(db_clear);
|
|
1425
1490
|
NAPI_EXPORT_FUNCTION(db_get_property);
|
|
1426
1491
|
NAPI_EXPORT_FUNCTION(db_get_latest_sequence);
|
package/index.js
CHANGED
|
@@ -152,11 +152,14 @@ class RocksLevel extends AbstractLevel {
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
_getMany (keys, options, callback) {
|
|
155
|
+
if (keys.some(key => typeof key === 'string')) {
|
|
156
|
+
keys = keys.map(key => typeof key === 'string' ? Buffer.from(key) : key)
|
|
157
|
+
}
|
|
158
|
+
|
|
155
159
|
callback = fromCallback(callback, kPromise)
|
|
156
160
|
|
|
157
161
|
try {
|
|
158
|
-
|
|
159
|
-
process.nextTick(callback, null, this._getManySync(keys, options ?? kEmpty))
|
|
162
|
+
binding.db_get_many(this[kContext], keys, options ?? kEmpty, callback)
|
|
160
163
|
} catch (err) {
|
|
161
164
|
process.nextTick(callback, err)
|
|
162
165
|
}
|
|
@@ -169,9 +172,7 @@ class RocksLevel extends AbstractLevel {
|
|
|
169
172
|
keys = keys.map(key => typeof key === 'string' ? Buffer.from(key) : key)
|
|
170
173
|
}
|
|
171
174
|
|
|
172
|
-
|
|
173
|
-
assert(finished)
|
|
174
|
-
return rows
|
|
175
|
+
return binding.db_get_many_sync(this[kContext], keys, options ?? kEmpty)
|
|
175
176
|
}
|
|
176
177
|
|
|
177
178
|
_del (key, options, callback) {
|