@peerbit/indexer-sqlite3 1.2.8 → 1.2.9

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.
@@ -7983,6 +7983,16 @@ hrtime.bigint = (time) => {
7983
7983
  return BigInt(diff[0] * NS_PER_SEC + diff[1]);
7984
7984
  };
7985
7985
 
7986
+ // ../../../../node_modules/p-defer/index.js
7987
+ function pDefer() {
7988
+ const deferred = {};
7989
+ deferred.promise = new Promise((resolve, reject) => {
7990
+ deferred.resolve = resolve;
7991
+ deferred.reject = reject;
7992
+ });
7993
+ return deferred;
7994
+ }
7995
+
7986
7996
  // dist/src/schema.js
7987
7997
  var __decorate3 = function(decorators, target, key, desc) {
7988
7998
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -9375,17 +9385,23 @@ var QueryPlanner = class {
9375
9385
  }
9376
9386
  let indexCreateCommands = void 0;
9377
9387
  let pickedIndexKeys = /* @__PURE__ */ new Map();
9388
+ let indexCreationPromiseToAwait = [];
9378
9389
  return {
9379
9390
  beforePrepare: async () => {
9380
9391
  if (indexCreateCommands != null) {
9381
- for (const { key, cmd } of indexCreateCommands) {
9382
- if (this.pendingIndexCreation.has(key)) {
9383
- await this.pendingIndexCreation.get(key);
9392
+ for (const { key, cmd, deferred } of indexCreateCommands) {
9393
+ try {
9394
+ if (this.pendingIndexCreation.has(key)) {
9395
+ await this.pendingIndexCreation.get(key);
9396
+ }
9397
+ const promise = this.props.exec(cmd);
9398
+ this.pendingIndexCreation.set(key, promise);
9399
+ await promise;
9400
+ this.pendingIndexCreation.delete(key);
9401
+ deferred.resolve();
9402
+ } catch (error2) {
9403
+ deferred.reject(error2);
9384
9404
  }
9385
- const promise = this.props.exec(cmd);
9386
- this.pendingIndexCreation.set(key, promise);
9387
- await promise;
9388
- this.pendingIndexCreation.delete(key);
9389
9405
  }
9390
9406
  }
9391
9407
  if (this.pendingIndexCreation.size > 0) {
@@ -9393,6 +9409,7 @@ var QueryPlanner = class {
9393
9409
  await this.pendingIndexCreation.get(picked);
9394
9410
  }
9395
9411
  }
9412
+ await Promise.all(indexCreationPromiseToAwait);
9396
9413
  },
9397
9414
  resolveIndex: (tableName, columns) => {
9398
9415
  const sortedNameKey = getSortedNameKey(tableName, columns);
@@ -9408,21 +9425,32 @@ var QueryPlanner = class {
9408
9425
  for (const columns2 of permutations) {
9409
9426
  const indexKey = createIndexKey(tableName, columns2);
9410
9427
  const command = `create index if not exists ${indexKey} on ${tableName} (${columns2.map((n) => escapeColumnName(n)).join(", ")})`;
9428
+ let deferred = pDefer();
9411
9429
  (indexCreateCommands || (indexCreateCommands = [])).push({
9412
9430
  cmd: command,
9413
- key: indexKey
9431
+ key: indexKey,
9432
+ deferred
9433
+ });
9434
+ let created = false;
9435
+ deferred.promise.then(() => {
9436
+ created = true;
9414
9437
  });
9415
9438
  indexStats.results.push({
9416
9439
  used: 0,
9417
9440
  times: [],
9418
9441
  avg: -1,
9419
9442
  // setting -1 will force the first time to be the fastest (i.e. new indices are always tested once)
9420
- indexKey
9443
+ indexKey,
9444
+ created: () => created,
9445
+ creationPromiseDeferred: deferred
9421
9446
  });
9422
9447
  }
9423
9448
  }
9424
9449
  let fastestIndex = indexStats.results[0];
9425
9450
  fastestIndex.used++;
9451
+ if (!fastestIndex.created()) {
9452
+ indexCreationPromiseToAwait.push(fastestIndex.creationPromiseDeferred.promise);
9453
+ }
9426
9454
  pickedIndexKeys.set(fastestIndex.indexKey, sortedNameKey);
9427
9455
  return fastestIndex.indexKey;
9428
9456
  },
@@ -9940,16 +9968,6 @@ var SQLiteIndices = class _SQLiteIndices {
9940
9968
  }
9941
9969
  };
9942
9970
 
9943
- // ../../../../node_modules/p-defer/index.js
9944
- function pDefer() {
9945
- const deferred = {};
9946
- deferred.promise = new Promise((resolve, reject) => {
9947
- deferred.resolve = resolve;
9948
- deferred.reject = reject;
9949
- });
9950
- return deferred;
9951
- }
9952
-
9953
9971
  // dist/src/sqlite3-messages.worker.js
9954
9972
  var encodeValue = (value) => {
9955
9973
  if (value instanceof Uint8Array) {
@@ -1,4 +1,5 @@
1
1
  import { Query, Sort } from "@peerbit/indexer-interface";
2
+ import { type DeferredPromise } from "p-defer";
2
3
  export interface QueryIndexPlanner {
3
4
  columnsToIndexes: Map<string, {
4
5
  results: {
@@ -6,6 +7,8 @@ export interface QueryIndexPlanner {
6
7
  avg: number;
7
8
  times: number[];
8
9
  indexKey: string;
10
+ created: () => boolean;
11
+ creationPromiseDeferred: DeferredPromise<void>;
9
12
  }[];
10
13
  }>;
11
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query-planner.d.ts","sourceRoot":"","sources":["../../src/query-planner.ts"],"names":[],"mappings":"AAGA,OAAO,EAYN,KAAK,EACL,IAAI,EAGJ,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,iBAAiB;IAGjC,gBAAgB,EAAE,GAAG,CACpB,MAAM,EACN;QACC,OAAO,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SACjB,EAAE,CAAC;KACJ,CACD,CAAC;CACF;AAED,KAAK,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAUhD,eAAO,MAAM,YAAY,WAAsB;IAC9C,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;CACrB,KAAG,SAAS,CAAC;IAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,CA4CjE,CAAC;AAgEF,qBAAa,cAAc;IAE1B,KAAK,EAAE,KAAK,EAAE,CAAC;IAGf,IAAI,EAAE,IAAI,EAAE,CAAC;gBAED,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;KAAE;IAS3D,IAAI,GAAG,IAAI,MAAM,CAOhB;CACD;AACD,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAEhE,qBAAa,YAAY;IAMvB,QAAQ,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;KAAE;IALhE,KAAK,EAAE,SAAS,CAAa;IAE7B,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAa;gBAGnD,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;KAAE;IAG1D,IAAI;IAOV,KAAK,CAAC,KAAK,EAAE,cAAc;;kCAkCC,MAAM,WAAW,MAAM,EAAE,KAAG,MAAM;kBAwC5C,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAAC;;CAgCtD"}
1
+ {"version":3,"file":"query-planner.d.ts","sourceRoot":"","sources":["../../src/query-planner.ts"],"names":[],"mappings":"AAGA,OAAO,EAYN,KAAK,EACL,IAAI,EAGJ,MAAM,4BAA4B,CAAC;AAEpC,OAAe,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAGvD,MAAM,WAAW,iBAAiB;IAGjC,gBAAgB,EAAE,GAAG,CACpB,MAAM,EACN;QACC,OAAO,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,EAAE,MAAM,OAAO,CAAC;YACvB,uBAAuB,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;SAC/C,EAAE,CAAC;KACJ,CACD,CAAC;CACF;AAED,KAAK,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAUhD,eAAO,MAAM,YAAY,WAAsB;IAC9C,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;CACrB,KAAG,SAAS,CAAC;IAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,CA4CjE,CAAC;AAgEF,qBAAa,cAAc;IAE1B,KAAK,EAAE,KAAK,EAAE,CAAC;IAGf,IAAI,EAAE,IAAI,EAAE,CAAC;gBAED,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;KAAE;IAS3D,IAAI,GAAG,IAAI,MAAM,CAOhB;CACD;AACD,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAEhE,qBAAa,YAAY;IAMvB,QAAQ,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;KAAE;IALhE,KAAK,EAAE,SAAS,CAAa;IAE7B,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAa;gBAGnD,KAAK,EAAE;QAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;KAAE;IAG1D,IAAI;IAOV,KAAK,CAAC,KAAK,EAAE,cAAc;;kCA6CC,MAAM,WAAW,MAAM,EAAE,KAAG,MAAM;kBAsD5C,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAAC;;CAgCtD"}
@@ -12,6 +12,7 @@ import { field, serialize, vec } from "@dao-xyz/borsh";
12
12
  import { sha256Base64Sync } from "@peerbit/crypto";
13
13
  import { And, BigUnsignedIntegerValue, BoolQuery, ByteMatchQuery, Compare, IntegerCompare, IntegerValue, IsNull, Nested, Not, Or, Query, Sort, StringMatch, UnsignedIntegerValue, } from "@peerbit/indexer-interface";
14
14
  import { hrtime } from "@peerbit/time";
15
+ import pDefer, {} from "p-defer";
15
16
  import { escapeColumnName } from "./schema.js";
16
17
  const getSortedNameKey = (tableName, names) => [tableName, ...names.sort()].join(",");
17
18
  const createIndexKey = (tableName, fields) => `${tableName}_index_${fields.map((x) => x).join("_")}`;
@@ -179,18 +180,26 @@ export class QueryPlanner {
179
180
  // returns a function that takes column names and return the index to use
180
181
  let indexCreateCommands = undefined;
181
182
  let pickedIndexKeys = new Map(); // index key to column names key
183
+ let indexCreationPromiseToAwait = [];
182
184
  return {
183
185
  beforePrepare: async () => {
184
186
  // create missing indices
185
187
  if (indexCreateCommands != null) {
186
- for (const { key, cmd } of indexCreateCommands) {
187
- if (this.pendingIndexCreation.has(key)) {
188
- await this.pendingIndexCreation.get(key);
188
+ for (const { key, cmd, deferred } of indexCreateCommands) {
189
+ try {
190
+ if (this.pendingIndexCreation.has(key)) {
191
+ // TODO is this kind of debouncing needed? how do we end up here?
192
+ await this.pendingIndexCreation.get(key);
193
+ }
194
+ const promise = this.props.exec(cmd);
195
+ this.pendingIndexCreation.set(key, promise);
196
+ await promise;
197
+ this.pendingIndexCreation.delete(key);
198
+ deferred.resolve();
199
+ }
200
+ catch (error) {
201
+ deferred.reject(error);
189
202
  }
190
- const promise = this.props.exec(cmd);
191
- this.pendingIndexCreation.set(key, promise);
192
- await promise;
193
- this.pendingIndexCreation.delete(key);
194
203
  }
195
204
  }
196
205
  if (this.pendingIndexCreation.size > 0) {
@@ -198,6 +207,7 @@ export class QueryPlanner {
198
207
  await this.pendingIndexCreation.get(picked);
199
208
  }
200
209
  }
210
+ await Promise.all(indexCreationPromiseToAwait);
201
211
  },
202
212
  resolveIndex: (tableName, columns) => {
203
213
  // first we figure out whether we want to reuse the fastest index or try a new one
@@ -216,21 +226,32 @@ export class QueryPlanner {
216
226
  for (const columns of permutations) {
217
227
  const indexKey = createIndexKey(tableName, columns);
218
228
  const command = `create index if not exists ${indexKey} on ${tableName} (${columns.map((n) => escapeColumnName(n)).join(", ")})`;
229
+ let deferred = pDefer();
219
230
  (indexCreateCommands || (indexCreateCommands = [])).push({
220
231
  cmd: command,
221
232
  key: indexKey,
233
+ deferred,
234
+ });
235
+ let created = false;
236
+ deferred.promise.then(() => {
237
+ created = true;
222
238
  });
223
239
  indexStats.results.push({
224
240
  used: 0,
225
241
  times: [],
226
242
  avg: -1, // setting -1 will force the first time to be the fastest (i.e. new indices are always tested once)
227
243
  indexKey,
244
+ created: () => created,
245
+ creationPromiseDeferred: deferred,
228
246
  });
229
247
  }
230
248
  }
231
249
  // find the fastest index
232
250
  let fastestIndex = indexStats.results[0];
233
251
  fastestIndex.used++;
252
+ if (!fastestIndex.created()) {
253
+ indexCreationPromiseToAwait.push(fastestIndex.creationPromiseDeferred.promise);
254
+ }
234
255
  pickedIndexKeys.set(fastestIndex.indexKey, sortedNameKey);
235
256
  return fastestIndex.indexKey;
236
257
  },
@@ -1 +1 @@
1
- {"version":3,"file":"query-planner.js","sourceRoot":"","sources":["../../src/query-planner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-planner.js","sourceRoot":"","sources":["../../src/query-planner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/indexer-sqlite3",
3
- "version": "1.2.8",
3
+ "version": "1.2.9",
4
4
  "description": "SQLite index for document store",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -19,6 +19,7 @@ import {
19
19
  UnsignedIntegerValue,
20
20
  } from "@peerbit/indexer-interface";
21
21
  import { hrtime } from "@peerbit/time";
22
+ import pDefer, { type DeferredPromise } from "p-defer";
22
23
  import { escapeColumnName } from "./schema.js";
23
24
 
24
25
  export interface QueryIndexPlanner {
@@ -32,6 +33,8 @@ export interface QueryIndexPlanner {
32
33
  avg: number;
33
34
  times: number[];
34
35
  indexKey: string;
36
+ created: () => boolean;
37
+ creationPromiseDeferred: DeferredPromise<void>;
35
38
  }[];
36
39
  }
37
40
  >; //
@@ -211,21 +214,30 @@ export class QueryPlanner {
211
214
  }
212
215
 
213
216
  // returns a function that takes column names and return the index to use
214
- let indexCreateCommands: { key: string; cmd: string }[] | undefined =
215
- undefined;
217
+ let indexCreateCommands:
218
+ | { key: string; cmd: string; deferred: DeferredPromise<void> }[]
219
+ | undefined = undefined;
216
220
  let pickedIndexKeys: Map<string, string> = new Map(); // index key to column names key
221
+ let indexCreationPromiseToAwait: Promise<void>[] = [];
217
222
  return {
218
223
  beforePrepare: async () => {
219
224
  // create missing indices
220
225
  if (indexCreateCommands != null) {
221
- for (const { key, cmd } of indexCreateCommands) {
222
- if (this.pendingIndexCreation.has(key)) {
223
- await this.pendingIndexCreation.get(key);
226
+ for (const { key, cmd, deferred } of indexCreateCommands) {
227
+ try {
228
+ if (this.pendingIndexCreation.has(key)) {
229
+ // TODO is this kind of debouncing needed? how do we end up here?
230
+ await this.pendingIndexCreation.get(key);
231
+ }
232
+ const promise = this.props.exec(cmd);
233
+ this.pendingIndexCreation.set(key, promise);
234
+ await promise;
235
+
236
+ this.pendingIndexCreation.delete(key);
237
+ deferred.resolve();
238
+ } catch (error) {
239
+ deferred.reject(error);
224
240
  }
225
- const promise = this.props.exec(cmd);
226
- this.pendingIndexCreation.set(key, promise);
227
- await promise;
228
- this.pendingIndexCreation.delete(key);
229
241
  }
230
242
  }
231
243
 
@@ -234,6 +246,8 @@ export class QueryPlanner {
234
246
  await this.pendingIndexCreation.get(picked);
235
247
  }
236
248
  }
249
+
250
+ await Promise.all(indexCreationPromiseToAwait);
237
251
  },
238
252
  resolveIndex: (tableName: string, columns: string[]): string => {
239
253
  // first we figure out whether we want to reuse the fastest index or try a new one
@@ -254,16 +268,24 @@ export class QueryPlanner {
254
268
  const indexKey = createIndexKey(tableName, columns);
255
269
  const command = `create index if not exists ${indexKey} on ${tableName} (${columns.map((n) => escapeColumnName(n)).join(", ")})`;
256
270
 
271
+ let deferred = pDefer<void>();
257
272
  (indexCreateCommands || (indexCreateCommands = [])).push({
258
273
  cmd: command,
259
274
  key: indexKey,
275
+ deferred,
260
276
  });
261
277
 
278
+ let created = false;
279
+ deferred.promise.then(() => {
280
+ created = true;
281
+ });
262
282
  indexStats.results.push({
263
283
  used: 0,
264
284
  times: [],
265
285
  avg: -1, // setting -1 will force the first time to be the fastest (i.e. new indices are always tested once)
266
286
  indexKey,
287
+ created: () => created,
288
+ creationPromiseDeferred: deferred,
267
289
  });
268
290
  }
269
291
  }
@@ -271,6 +293,12 @@ export class QueryPlanner {
271
293
  // find the fastest index
272
294
  let fastestIndex = indexStats.results[0];
273
295
  fastestIndex.used++;
296
+
297
+ if (!fastestIndex.created()) {
298
+ indexCreationPromiseToAwait.push(
299
+ fastestIndex.creationPromiseDeferred.promise,
300
+ );
301
+ }
274
302
  pickedIndexKeys.set(fastestIndex.indexKey, sortedNameKey);
275
303
 
276
304
  return fastestIndex.indexKey!;