@nxtedition/rocksdb 7.0.65 → 7.1.1
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 +60 -2
- package/index.js +6 -0
- package/max_rev_operator.h +3 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/util.h +18 -4
package/binding.cc
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#include <rocksdb/table.h>
|
|
19
19
|
#include <rocksdb/write_batch.h>
|
|
20
20
|
|
|
21
|
+
#include <iostream>
|
|
21
22
|
#include <memory>
|
|
22
23
|
#include <optional>
|
|
23
24
|
#include <set>
|
|
@@ -594,8 +595,12 @@ napi_status InitOptions(napi_env env, T& columnOptions, const U& options) {
|
|
|
594
595
|
std::optional<std::string> mergeOperatorOpt;
|
|
595
596
|
NAPI_STATUS_RETURN(GetProperty(env, options, "mergeOperator", mergeOperatorOpt));
|
|
596
597
|
if (mergeOperatorOpt) {
|
|
597
|
-
|
|
598
|
-
|
|
598
|
+
if (*mergeOperatorOpt == "maxRev") {
|
|
599
|
+
columnOptions.merge_operator = std::make_shared<MaxRevOperator>();
|
|
600
|
+
} else {
|
|
601
|
+
ROCKS_STATUS_RETURN_NAPI(
|
|
602
|
+
rocksdb::MergeOperator::CreateFromString(configOptions, *mergeOperatorOpt, &columnOptions.merge_operator));
|
|
603
|
+
}
|
|
599
604
|
}
|
|
600
605
|
|
|
601
606
|
uint32_t cacheSize = 8 << 20;
|
|
@@ -1549,6 +1554,58 @@ NAPI_METHOD(batch_iterate) {
|
|
|
1549
1554
|
return result;
|
|
1550
1555
|
}
|
|
1551
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
|
+
|
|
1552
1609
|
NAPI_INIT() {
|
|
1553
1610
|
NAPI_EXPORT_FUNCTION(db_init);
|
|
1554
1611
|
NAPI_EXPORT_FUNCTION(db_open);
|
|
@@ -1557,6 +1614,7 @@ NAPI_INIT() {
|
|
|
1557
1614
|
NAPI_EXPORT_FUNCTION(db_clear);
|
|
1558
1615
|
NAPI_EXPORT_FUNCTION(db_get_property);
|
|
1559
1616
|
NAPI_EXPORT_FUNCTION(db_get_latest_sequence);
|
|
1617
|
+
NAPI_EXPORT_FUNCTION(db_get_sorted_wal_files);
|
|
1560
1618
|
|
|
1561
1619
|
NAPI_EXPORT_FUNCTION(iterator_init);
|
|
1562
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/max_rev_operator.h
CHANGED
package/package.json
CHANGED
|
Binary file
|
|
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;
|