@nxtedition/rocksdb 7.0.28 → 7.0.29
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 +59 -24
- package/index.js +4 -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/binding.cc
CHANGED
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
#include <rocksdb/db.h>
|
|
11
11
|
#include <rocksdb/env.h>
|
|
12
12
|
#include <rocksdb/filter_policy.h>
|
|
13
|
+
#include <rocksdb/merge_operator.h>
|
|
13
14
|
#include <rocksdb/options.h>
|
|
14
15
|
#include <rocksdb/slice_transform.h>
|
|
15
16
|
#include <rocksdb/table.h>
|
|
16
17
|
#include <rocksdb/write_batch.h>
|
|
17
|
-
#include <rocksdb/merge_operator.h>
|
|
18
18
|
|
|
19
19
|
#include <array>
|
|
20
20
|
#include <memory>
|
|
@@ -543,19 +543,8 @@ struct Updates {
|
|
|
543
543
|
bool keys,
|
|
544
544
|
bool values,
|
|
545
545
|
bool data,
|
|
546
|
-
const
|
|
547
|
-
: database_(database), seqNumber_(seqNumber), keys_(keys), values_(values), data_(data) {
|
|
548
|
-
if (column) {
|
|
549
|
-
auto columns = database->columns_;
|
|
550
|
-
auto columnIt = std::find_if(columns.begin(), columns.end(),
|
|
551
|
-
[&](const auto& handle) { return handle->GetName() == *column; });
|
|
552
|
-
if (columnIt != columns.end()) {
|
|
553
|
-
column_family_id_ = (*columnIt)->GetID();
|
|
554
|
-
} else {
|
|
555
|
-
// TODO: Throw?
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
}
|
|
546
|
+
const rocksdb::ColumnFamilyHandle* column)
|
|
547
|
+
: database_(database), seqNumber_(seqNumber), keys_(keys), values_(values), data_(data), column_(column) {}
|
|
559
548
|
|
|
560
549
|
void Close() { iterator_.reset(); }
|
|
561
550
|
|
|
@@ -577,7 +566,7 @@ struct Updates {
|
|
|
577
566
|
bool keys_;
|
|
578
567
|
bool values_;
|
|
579
568
|
bool data_;
|
|
580
|
-
|
|
569
|
+
const rocksdb::ColumnFamilyHandle* column_;
|
|
581
570
|
|
|
582
571
|
private:
|
|
583
572
|
napi_ref ref_ = nullptr;
|
|
@@ -586,7 +575,8 @@ struct Updates {
|
|
|
586
575
|
static napi_status GetColumnFamily(Database* database,
|
|
587
576
|
napi_env env,
|
|
588
577
|
napi_value options,
|
|
589
|
-
rocksdb::ColumnFamilyHandle** column
|
|
578
|
+
rocksdb::ColumnFamilyHandle** column,
|
|
579
|
+
bool fallback = true) {
|
|
590
580
|
bool hasColumn = false;
|
|
591
581
|
NAPI_STATUS_RETURN(napi_has_named_property(env, options, "column", &hasColumn));
|
|
592
582
|
|
|
@@ -594,8 +584,10 @@ static napi_status GetColumnFamily(Database* database,
|
|
|
594
584
|
napi_value value = nullptr;
|
|
595
585
|
NAPI_STATUS_RETURN(napi_get_named_property(env, options, "column", &value));
|
|
596
586
|
NAPI_STATUS_RETURN(napi_get_value_external(env, value, reinterpret_cast<void**>(column)));
|
|
597
|
-
} else {
|
|
587
|
+
} else if (fallback) {
|
|
598
588
|
*column = database->db_->DefaultColumnFamily();
|
|
589
|
+
} else {
|
|
590
|
+
*column = nullptr;
|
|
599
591
|
}
|
|
600
592
|
|
|
601
593
|
return napi_ok;
|
|
@@ -841,6 +833,7 @@ NAPI_METHOD(db_open) {
|
|
|
841
833
|
dbOptions.wal_compression = BooleanProperty(env, argv[2], "walCompression").value_or(false)
|
|
842
834
|
? rocksdb::CompressionType::kZSTD
|
|
843
835
|
: rocksdb::CompressionType::kNoCompression;
|
|
836
|
+
dbOptions.manual_wal_flush = BooleanProperty(env, argv[2], "manualWalFlush").value_or(false);
|
|
844
837
|
|
|
845
838
|
// TODO (feat): dbOptions.listeners
|
|
846
839
|
|
|
@@ -1013,57 +1006,82 @@ struct UpdatesNextWorker final : public rocksdb::WriteBatch::Handler, public Wor
|
|
|
1013
1006
|
}
|
|
1014
1007
|
|
|
1015
1008
|
rocksdb::Status PutCF(uint32_t column_family_id, const rocksdb::Slice& key, const rocksdb::Slice& value) override {
|
|
1016
|
-
if (updates_->
|
|
1009
|
+
if (updates_->column_ && updates_->column_->GetID() != column_family_id) {
|
|
1017
1010
|
return rocksdb::Status::OK();
|
|
1018
1011
|
}
|
|
1012
|
+
|
|
1019
1013
|
cache_.emplace_back("put");
|
|
1014
|
+
|
|
1020
1015
|
if (updates_->keys_) {
|
|
1021
1016
|
cache_.emplace_back(key.ToStringView());
|
|
1022
1017
|
} else {
|
|
1023
1018
|
cache_.emplace_back(std::nullopt);
|
|
1024
1019
|
}
|
|
1020
|
+
|
|
1025
1021
|
if (updates_->values_) {
|
|
1026
1022
|
cache_.emplace_back(value.ToStringView());
|
|
1027
1023
|
} else {
|
|
1028
1024
|
cache_.emplace_back(std::nullopt);
|
|
1029
1025
|
}
|
|
1030
|
-
|
|
1026
|
+
|
|
1027
|
+
if (!updates_->column_) {
|
|
1028
|
+
cache_.emplace_back(GetColumnName(column_family_id));
|
|
1029
|
+
} else {
|
|
1030
|
+
cache_.emplace_back(std::nullopt);
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1031
1033
|
return rocksdb::Status::OK();
|
|
1032
1034
|
}
|
|
1033
1035
|
|
|
1034
1036
|
rocksdb::Status DeleteCF(uint32_t column_family_id, const rocksdb::Slice& key) override {
|
|
1035
|
-
if (updates_->
|
|
1037
|
+
if (updates_->column_ && updates_->column_->GetID() != column_family_id) {
|
|
1036
1038
|
return rocksdb::Status::OK();
|
|
1037
1039
|
}
|
|
1040
|
+
|
|
1038
1041
|
cache_.emplace_back("del");
|
|
1042
|
+
|
|
1039
1043
|
if (updates_->keys_) {
|
|
1040
1044
|
cache_.emplace_back(key.ToStringView());
|
|
1041
1045
|
} else {
|
|
1042
1046
|
cache_.emplace_back(std::nullopt);
|
|
1043
1047
|
}
|
|
1048
|
+
|
|
1044
1049
|
cache_.emplace_back(std::nullopt);
|
|
1045
|
-
|
|
1050
|
+
|
|
1051
|
+
if (!updates_->column_) {
|
|
1052
|
+
cache_.emplace_back(GetColumnName(column_family_id));
|
|
1053
|
+
} else {
|
|
1054
|
+
cache_.emplace_back(std::nullopt);
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1046
1057
|
return rocksdb::Status::OK();
|
|
1047
1058
|
}
|
|
1048
1059
|
|
|
1049
1060
|
rocksdb::Status MergeCF(uint32_t column_family_id, const rocksdb::Slice& key, const rocksdb::Slice& value) override {
|
|
1050
|
-
if (updates_->
|
|
1061
|
+
if (updates_->column_ && updates_->column_->GetID() != column_family_id) {
|
|
1051
1062
|
return rocksdb::Status::OK();
|
|
1052
1063
|
}
|
|
1064
|
+
|
|
1053
1065
|
cache_.emplace_back("put");
|
|
1066
|
+
|
|
1054
1067
|
if (updates_->keys_) {
|
|
1055
1068
|
cache_.emplace_back(key.ToStringView());
|
|
1056
1069
|
} else {
|
|
1057
1070
|
cache_.emplace_back(std::nullopt);
|
|
1058
1071
|
}
|
|
1072
|
+
|
|
1059
1073
|
if (updates_->values_) {
|
|
1060
1074
|
cache_.emplace_back(value.ToStringView());
|
|
1061
1075
|
} else {
|
|
1062
1076
|
cache_.emplace_back(std::nullopt);
|
|
1063
1077
|
}
|
|
1064
|
-
|
|
1078
|
+
|
|
1079
|
+
if (!updates_->column_) {
|
|
1065
1080
|
cache_.emplace_back(GetColumnName(column_family_id));
|
|
1081
|
+
} else {
|
|
1082
|
+
cache_.emplace_back(std::nullopt);
|
|
1066
1083
|
}
|
|
1084
|
+
|
|
1067
1085
|
return rocksdb::Status::OK();
|
|
1068
1086
|
}
|
|
1069
1087
|
|
|
@@ -1094,7 +1112,9 @@ NAPI_METHOD(updates_init) {
|
|
|
1094
1112
|
const auto keys = BooleanProperty(env, argv[1], "keys").value_or(true);
|
|
1095
1113
|
const auto values = BooleanProperty(env, argv[1], "values").value_or(true);
|
|
1096
1114
|
const auto data = BooleanProperty(env, argv[1], "data").value_or(true);
|
|
1097
|
-
|
|
1115
|
+
|
|
1116
|
+
rocksdb::ColumnFamilyHandle* column;
|
|
1117
|
+
NAPI_STATUS_THROWS(GetColumnFamily(database, env, argv[1], &column, false));
|
|
1098
1118
|
|
|
1099
1119
|
auto updates = std::make_unique<Updates>(database, seqNumber, keys, values, data, column);
|
|
1100
1120
|
|
|
@@ -1858,6 +1878,19 @@ NAPI_METHOD(batch_merge) {
|
|
|
1858
1878
|
return 0;
|
|
1859
1879
|
}
|
|
1860
1880
|
|
|
1881
|
+
NAPI_METHOD(db_flush_wal) {
|
|
1882
|
+
NAPI_ARGV(2);
|
|
1883
|
+
|
|
1884
|
+
Database* database;
|
|
1885
|
+
NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], reinterpret_cast<void**>(&database)));
|
|
1886
|
+
|
|
1887
|
+
const auto flush = BooleanProperty(env, argv[1], "flush").value_or(false);
|
|
1888
|
+
|
|
1889
|
+
ROCKS_STATUS_THROWS(database->db_->FlushWAL(flush));
|
|
1890
|
+
|
|
1891
|
+
return 0;
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1861
1894
|
NAPI_INIT() {
|
|
1862
1895
|
NAPI_EXPORT_FUNCTION(db_init);
|
|
1863
1896
|
NAPI_EXPORT_FUNCTION(db_open);
|
|
@@ -1880,6 +1913,8 @@ NAPI_INIT() {
|
|
|
1880
1913
|
NAPI_EXPORT_FUNCTION(updates_close);
|
|
1881
1914
|
NAPI_EXPORT_FUNCTION(updates_next);
|
|
1882
1915
|
|
|
1916
|
+
NAPI_EXPORT_FUNCTION(db_flush_wal);
|
|
1917
|
+
|
|
1883
1918
|
NAPI_EXPORT_FUNCTION(batch_do);
|
|
1884
1919
|
NAPI_EXPORT_FUNCTION(batch_init);
|
|
1885
1920
|
NAPI_EXPORT_FUNCTION(batch_put);
|
package/index.js
CHANGED
|
@@ -145,6 +145,10 @@ class RocksLevel extends AbstractLevel {
|
|
|
145
145
|
return binding.db_get_property(this[kContext], property)
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
async flushWAL (options) {
|
|
149
|
+
binding.db_flush_wal(this[kContext], options)
|
|
150
|
+
}
|
|
151
|
+
|
|
148
152
|
async query (options) {
|
|
149
153
|
if (this.status !== 'open') {
|
|
150
154
|
throw new ModuleError('Database is not open', {
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|