@nxtedition/rocksdb 7.1.9 → 7.1.12

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 CHANGED
@@ -1495,23 +1495,39 @@ NAPI_METHOD(batch_write) {
1495
1495
  napi_ref batchRef;
1496
1496
  NAPI_STATUS_THROWS(napi_create_reference(env, argv[1], 1, &batchRef));
1497
1497
 
1498
- struct State {};
1499
- runAsync<State>(
1498
+ runAsync<int64_t>(
1500
1499
  "leveldown.batch.write", env, callback,
1501
- [=](auto& state) {
1500
+ [=](int64_t& seq) {
1502
1501
  rocksdb::WriteOptions writeOptions;
1503
1502
  writeOptions.sync = *sync;
1503
+
1504
+ // TODO (fix): Better way to get final batch sequence?
1505
+ seq = database->db->GetLatestSequenceNumber() + 1;
1506
+
1504
1507
  return database->db->Write(writeOptions, batch);
1505
1508
  },
1506
- [=](auto& state, auto env, auto& argv) { return napi_delete_reference(env, batchRef); });
1509
+ [=](int64_t& seq, auto env, auto& argv) {
1510
+ argv.resize(2);
1511
+ NAPI_STATUS_RETURN(napi_delete_reference(env, batchRef));
1512
+ NAPI_STATUS_RETURN(napi_create_int64(env, seq, &argv[1]));
1513
+ return napi_ok;
1514
+ });
1507
1515
  } else {
1516
+ // TODO (fix): Better way to get final batch sequence?
1517
+ auto seq = database->db->GetLatestSequenceNumber() + 1;
1518
+
1519
+ std::array<napi_value, 2> result;
1520
+
1521
+ NAPI_STATUS_THROWS(napi_get_null(env, &result[0]));
1522
+ NAPI_STATUS_THROWS(napi_create_int64(env, seq, &result[1]));
1523
+
1508
1524
  rocksdb::WriteOptions writeOptions;
1509
1525
  ROCKS_STATUS_THROWS_NAPI(database->db->Write(writeOptions, batch));
1510
1526
 
1511
1527
  napi_value global;
1512
1528
  NAPI_STATUS_THROWS(napi_get_global(env, &global));
1513
1529
 
1514
- NAPI_STATUS_THROWS(napi_call_function(env, global, callback, 0, nullptr, nullptr));
1530
+ NAPI_STATUS_THROWS(napi_call_function(env, global, callback, result.size(), result.data(), nullptr));
1515
1531
  }
1516
1532
 
1517
1533
  return 0;
package/index.js CHANGED
@@ -206,14 +206,20 @@ class RocksLevel extends AbstractLevel {
206
206
  const seq = this.sequence
207
207
  let sync = true
208
208
  this[kRef]()
209
- binding.batch_write(this[kContext], context, options, (err) => {
209
+ binding.batch_write(this[kContext], context, options, (err, sequence) => {
210
210
  this[kUnref]()
211
211
 
212
+ // TODO (fix): Temporary workaround.
213
+ if (sequence == null && typeof err === 'number') {
214
+ sequence = err
215
+ err = null
216
+ }
217
+
212
218
  if (!err) {
213
219
  this.emit('update', {
214
220
  rows: batch.toArray(),
215
221
  count: batch.length,
216
- sequence: seq + 1
222
+ sequence: sequence ?? (seq + 1)
217
223
  })
218
224
  }
219
225
  if (sync) {
@@ -346,7 +352,7 @@ class RocksLevel extends AbstractLevel {
346
352
  const db = this
347
353
 
348
354
  try {
349
- let since = options.since
355
+ let since = (options.since ?? 0) + 1
350
356
  while (true) {
351
357
  const buffer = new Readable({
352
358
  signal: ac.signal,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/rocksdb",
3
- "version": "7.1.9",
3
+ "version": "7.1.12",
4
4
  "description": "A low-level Node.js RocksDB binding",
5
5
  "license": "MIT",
6
6
  "main": "index.js",