@nxtedition/rocksdb 7.0.67 → 7.1.2
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 +53 -0
- package/index.js +6 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/util.h +18 -4
package/binding.cc
CHANGED
|
@@ -1554,6 +1554,58 @@ NAPI_METHOD(batch_iterate) {
|
|
|
1554
1554
|
return result;
|
|
1555
1555
|
}
|
|
1556
1556
|
|
|
1557
|
+
NAPI_METHOD(db_get_sorted_wal_files) {
|
|
1558
|
+
NAPI_ARGV(3);
|
|
1559
|
+
|
|
1560
|
+
Database* database;
|
|
1561
|
+
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
1562
|
+
|
|
1563
|
+
auto callback = argv[1];
|
|
1564
|
+
|
|
1565
|
+
runAsync<rocksdb::VectorLogPtr>(
|
|
1566
|
+
"leveldown.open", env, callback,
|
|
1567
|
+
[=](auto& files) {
|
|
1568
|
+
return database->db->GetSortedWalFiles(files);
|
|
1569
|
+
},
|
|
1570
|
+
[=](auto& files, auto env, auto& argv) {
|
|
1571
|
+
argv.resize(2);
|
|
1572
|
+
|
|
1573
|
+
const auto size = files.size();
|
|
1574
|
+
NAPI_STATUS_RETURN(napi_create_array_with_length(env, size, &argv[1]));
|
|
1575
|
+
|
|
1576
|
+
for (size_t n = 0; n < size; ++n) {
|
|
1577
|
+
napi_value element;
|
|
1578
|
+
NAPI_STATUS_RETURN(napi_create_object(env, &element));
|
|
1579
|
+
|
|
1580
|
+
napi_value pathName;
|
|
1581
|
+
NAPI_STATUS_RETURN(napi_create_string_utf8(env, files[n]->PathName().data(), NAPI_AUTO_LENGTH, &pathName))
|
|
1582
|
+
NAPI_STATUS_RETURN(napi_set_named_property(env, element, "pathName", pathName));
|
|
1583
|
+
|
|
1584
|
+
napi_value logNumber;
|
|
1585
|
+
NAPI_STATUS_RETURN(napi_create_int32(env, files[n]->LogNumber(), &logNumber))
|
|
1586
|
+
NAPI_STATUS_RETURN(napi_set_named_property(env, element, "logNumber", logNumber));
|
|
1587
|
+
|
|
1588
|
+
napi_value type;
|
|
1589
|
+
NAPI_STATUS_RETURN(napi_create_int32(env, files[n]->Type(), &type))
|
|
1590
|
+
NAPI_STATUS_RETURN(napi_set_named_property(env, element, "type", type));
|
|
1591
|
+
|
|
1592
|
+
napi_value startSequence;
|
|
1593
|
+
NAPI_STATUS_RETURN(napi_create_int64(env, files[n]->StartSequence(), &startSequence))
|
|
1594
|
+
NAPI_STATUS_RETURN(napi_set_named_property(env, element, "startSequence", startSequence));
|
|
1595
|
+
|
|
1596
|
+
napi_value sizeFileBytes;
|
|
1597
|
+
NAPI_STATUS_RETURN(napi_create_int64(env, files[n]->SizeFileBytes(), &sizeFileBytes))
|
|
1598
|
+
NAPI_STATUS_RETURN(napi_set_named_property(env, element, "sizeFileBytes", sizeFileBytes));
|
|
1599
|
+
|
|
1600
|
+
NAPI_STATUS_RETURN(napi_set_element(env, argv[1], n, element));
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1603
|
+
return napi_ok;
|
|
1604
|
+
});
|
|
1605
|
+
|
|
1606
|
+
return 0;
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1557
1609
|
NAPI_INIT() {
|
|
1558
1610
|
NAPI_EXPORT_FUNCTION(db_init);
|
|
1559
1611
|
NAPI_EXPORT_FUNCTION(db_open);
|
|
@@ -1562,6 +1614,7 @@ NAPI_INIT() {
|
|
|
1562
1614
|
NAPI_EXPORT_FUNCTION(db_clear);
|
|
1563
1615
|
NAPI_EXPORT_FUNCTION(db_get_property);
|
|
1564
1616
|
NAPI_EXPORT_FUNCTION(db_get_latest_sequence);
|
|
1617
|
+
NAPI_EXPORT_FUNCTION(db_get_sorted_wal_files);
|
|
1565
1618
|
|
|
1566
1619
|
NAPI_EXPORT_FUNCTION(iterator_init);
|
|
1567
1620
|
NAPI_EXPORT_FUNCTION(iterator_seek);
|
package/index.js
CHANGED
|
@@ -441,6 +441,12 @@ class RocksLevel extends AbstractLevel {
|
|
|
441
441
|
this[kUnref]()
|
|
442
442
|
}
|
|
443
443
|
}
|
|
444
|
+
|
|
445
|
+
async getSortedWalFiles () {
|
|
446
|
+
return new Promise((resolve, reject) => {
|
|
447
|
+
binding.db_get_sorted_wal_files(this[kContext], (err, val) => err ? reject(err) : resolve(val))
|
|
448
|
+
})
|
|
449
|
+
}
|
|
444
450
|
}
|
|
445
451
|
|
|
446
452
|
exports.RocksLevel = RocksLevel
|
package/package.json
CHANGED
|
Binary file
|
package/util.h
CHANGED
|
@@ -121,7 +121,9 @@ class NapiSlice : public rocksdb::Slice {
|
|
|
121
121
|
NapiSlice(NapiSlice&) = delete;
|
|
122
122
|
NapiSlice& operator=(NapiSlice&) = delete;
|
|
123
123
|
|
|
124
|
-
std::
|
|
124
|
+
std::array<char, 128> stack_;
|
|
125
|
+
std::unique_ptr<char[]> heap_;
|
|
126
|
+
size_t heap_size_ = 0;
|
|
125
127
|
};
|
|
126
128
|
|
|
127
129
|
static napi_status GetString(napi_env env, napi_value from, NapiSlice& to) {
|
|
@@ -131,10 +133,22 @@ static napi_status GetString(napi_env env, napi_value from, NapiSlice& to) {
|
|
|
131
133
|
if (type == napi_string) {
|
|
132
134
|
size_t length = 0;
|
|
133
135
|
NAPI_STATUS_RETURN(napi_get_value_string_utf8(env, from, nullptr, 0, &length));
|
|
134
|
-
to.self_space_.resize(length, '\0');
|
|
135
|
-
NAPI_STATUS_RETURN(napi_get_value_string_utf8(env, from, &to.self_space_[0], length + 1, &length));
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
char* data;
|
|
138
|
+
if (length + 1 > to.stack_.size()) {
|
|
139
|
+
if (to.heap_size_ < length + 1) {
|
|
140
|
+
to.heap_size_ = length + 1;
|
|
141
|
+
to.heap_.reset(new char[to.heap_size_]);
|
|
142
|
+
}
|
|
143
|
+
data = to.heap_.get();
|
|
144
|
+
} else {
|
|
145
|
+
data = to.stack_.data();
|
|
146
|
+
}
|
|
147
|
+
data[length] = 0;
|
|
148
|
+
|
|
149
|
+
NAPI_STATUS_RETURN(napi_get_value_string_utf8(env, from, data, length + 1, &length));
|
|
150
|
+
|
|
151
|
+
to.data_ = data;
|
|
138
152
|
to.size_ = length;
|
|
139
153
|
} else {
|
|
140
154
|
bool isBuffer;
|