@nxtedition/rocksdb 11.0.5 → 11.0.7
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 +91 -25
- package/chained-batch.js +1 -0
- 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,89 @@ 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
|
+
struct State {
|
|
1081
|
+
std::vector<rocksdb::Status> statuses;
|
|
1082
|
+
std::vector<rocksdb::PinnableSlice> values;
|
|
1083
|
+
std::vector<rocksdb::PinnableSlice> keys;
|
|
1084
|
+
} state;
|
|
1085
|
+
|
|
1086
|
+
state.keys.resize(count);
|
|
1087
|
+
|
|
1088
|
+
for (uint32_t n = 0; n < count; n++) {
|
|
1089
|
+
napi_value element;
|
|
1090
|
+
NAPI_STATUS_THROWS(napi_get_element(env, argv[1], n, &element));
|
|
1091
|
+
NAPI_STATUS_THROWS(GetValue(env, element, state.keys[n]));
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
runAsync(std::move(state),
|
|
1095
|
+
"leveldown.get_many", env, callback,
|
|
1096
|
+
[=](auto& state) {
|
|
1097
|
+
rocksdb::ReadOptions readOptions;
|
|
1098
|
+
readOptions.fill_cache = fillCache;
|
|
1099
|
+
readOptions.async_io = true;
|
|
1100
|
+
readOptions.optimize_multiget_for_io = true;
|
|
1101
|
+
readOptions.value_size_soft_limit = highWaterMarkBytes;
|
|
1102
|
+
|
|
1103
|
+
std::vector<rocksdb::Slice> keys{count};
|
|
1104
|
+
for (uint32_t n = 0; n < count; n++) {
|
|
1105
|
+
keys[n] = state.keys[n];
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
state.statuses.resize(count);
|
|
1109
|
+
state.values.resize(count);
|
|
1110
|
+
|
|
1111
|
+
database->db->MultiGet(readOptions, column, count, keys.data(), state.values.data(), state.statuses.data());
|
|
1112
|
+
|
|
1113
|
+
return rocksdb::Status::OK();
|
|
1114
|
+
},
|
|
1115
|
+
[=](auto& state, auto env, auto& argv) {
|
|
1116
|
+
argv.resize(2);
|
|
1117
|
+
|
|
1118
|
+
NAPI_STATUS_RETURN(napi_create_array_with_length(env, count, &argv[1]));
|
|
1119
|
+
|
|
1120
|
+
for (auto n = 0; n < count; n++) {
|
|
1121
|
+
napi_value row;
|
|
1122
|
+
if (state.statuses[n].IsNotFound()) {
|
|
1123
|
+
NAPI_STATUS_RETURN(napi_get_undefined(env, &row));
|
|
1124
|
+
} else if (state.statuses[n].IsAborted()) {
|
|
1125
|
+
NAPI_STATUS_RETURN(napi_get_null(env, &row));
|
|
1126
|
+
} else {
|
|
1127
|
+
ROCKS_STATUS_RETURN_NAPI(state.statuses[n]);
|
|
1128
|
+
NAPI_STATUS_RETURN(Convert(env, &state.values[n], valueEncoding, row));
|
|
1129
|
+
}
|
|
1130
|
+
NAPI_STATUS_RETURN(napi_set_element(env, argv[1], n, row));
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
return napi_ok;
|
|
1134
|
+
});
|
|
1135
|
+
|
|
1136
|
+
return 0;
|
|
1063
1137
|
}
|
|
1064
1138
|
|
|
1065
1139
|
NAPI_METHOD(db_clear) {
|
|
@@ -1264,10 +1338,8 @@ NAPI_METHOD(batch_put) {
|
|
|
1264
1338
|
rocksdb::Slice val;
|
|
1265
1339
|
NAPI_STATUS_THROWS(GetValue(env, argv[2], val));
|
|
1266
1340
|
|
|
1267
|
-
const auto options = argv[3];
|
|
1268
|
-
|
|
1269
1341
|
rocksdb::ColumnFamilyHandle* column = nullptr;
|
|
1270
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1342
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[3], "column", column));
|
|
1271
1343
|
|
|
1272
1344
|
if (column) {
|
|
1273
1345
|
ROCKS_STATUS_THROWS_NAPI(batch->Put(column, key, val));
|
|
@@ -1287,10 +1359,8 @@ NAPI_METHOD(batch_del) {
|
|
|
1287
1359
|
rocksdb::Slice key;
|
|
1288
1360
|
NAPI_STATUS_THROWS(GetValue(env, argv[1], key));
|
|
1289
1361
|
|
|
1290
|
-
const auto options = argv[2];
|
|
1291
|
-
|
|
1292
1362
|
rocksdb::ColumnFamilyHandle* column = nullptr;
|
|
1293
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1363
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "column", column));
|
|
1294
1364
|
|
|
1295
1365
|
if (column) {
|
|
1296
1366
|
ROCKS_STATUS_THROWS_NAPI(batch->Delete(column, key));
|
|
@@ -1313,10 +1383,8 @@ NAPI_METHOD(batch_merge) {
|
|
|
1313
1383
|
rocksdb::Slice val;
|
|
1314
1384
|
NAPI_STATUS_THROWS(GetValue(env, argv[2], val));
|
|
1315
1385
|
|
|
1316
|
-
const auto options = argv[3];
|
|
1317
|
-
|
|
1318
1386
|
rocksdb::ColumnFamilyHandle* column = nullptr;
|
|
1319
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1387
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[3], "column", column));
|
|
1320
1388
|
|
|
1321
1389
|
if (column) {
|
|
1322
1390
|
ROCKS_STATUS_THROWS_NAPI(batch->Merge(column, key, val));
|
|
@@ -1339,7 +1407,7 @@ NAPI_METHOD(batch_clear) {
|
|
|
1339
1407
|
}
|
|
1340
1408
|
|
|
1341
1409
|
NAPI_METHOD(batch_write) {
|
|
1342
|
-
NAPI_ARGV(
|
|
1410
|
+
NAPI_ARGV(3);
|
|
1343
1411
|
|
|
1344
1412
|
Database* database;
|
|
1345
1413
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
@@ -1347,14 +1415,11 @@ NAPI_METHOD(batch_write) {
|
|
|
1347
1415
|
rocksdb::WriteBatch* batch;
|
|
1348
1416
|
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[1], reinterpret_cast<void**>(&batch)));
|
|
1349
1417
|
|
|
1350
|
-
auto options = argv[2];
|
|
1351
|
-
auto callback = argv[3];
|
|
1352
|
-
|
|
1353
1418
|
bool sync = false;
|
|
1354
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1419
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "sync", sync));
|
|
1355
1420
|
|
|
1356
1421
|
bool lowPriority = false;
|
|
1357
|
-
NAPI_STATUS_THROWS(GetProperty(env,
|
|
1422
|
+
NAPI_STATUS_THROWS(GetProperty(env, argv[2], "lowPriority", lowPriority));
|
|
1358
1423
|
|
|
1359
1424
|
rocksdb::WriteOptions writeOptions;
|
|
1360
1425
|
writeOptions.sync = sync;
|
|
@@ -1421,6 +1486,7 @@ NAPI_INIT() {
|
|
|
1421
1486
|
NAPI_EXPORT_FUNCTION(db_get_location);
|
|
1422
1487
|
NAPI_EXPORT_FUNCTION(db_close);
|
|
1423
1488
|
NAPI_EXPORT_FUNCTION(db_get_many);
|
|
1489
|
+
NAPI_EXPORT_FUNCTION(db_get_many_sync);
|
|
1424
1490
|
NAPI_EXPORT_FUNCTION(db_clear);
|
|
1425
1491
|
NAPI_EXPORT_FUNCTION(db_get_property);
|
|
1426
1492
|
NAPI_EXPORT_FUNCTION(db_get_latest_sequence);
|
package/chained-batch.js
CHANGED
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) {
|