@peerbit/indexer-sqlite3 3.0.6 → 3.0.7

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.
Files changed (41) hide show
  1. package/dist/assets/sqlite3/sqlite3.worker.min.js +6 -1
  2. package/dist/benchmark/query-planner.d.ts +2 -0
  3. package/dist/benchmark/query-planner.d.ts.map +1 -0
  4. package/dist/benchmark/query-planner.js +97 -0
  5. package/dist/benchmark/query-planner.js.map +1 -0
  6. package/dist/index.min.js +535 -183
  7. package/dist/index.min.js.map +3 -3
  8. package/dist/src/engine.d.ts +15 -4
  9. package/dist/src/engine.d.ts.map +1 -1
  10. package/dist/src/engine.js +364 -179
  11. package/dist/src/engine.js.map +1 -1
  12. package/dist/src/query-planner.d.ts +20 -0
  13. package/dist/src/query-planner.d.ts.map +1 -1
  14. package/dist/src/query-planner.js +191 -21
  15. package/dist/src/query-planner.js.map +1 -1
  16. package/dist/src/schema.d.ts +6 -2
  17. package/dist/src/schema.d.ts.map +1 -1
  18. package/dist/src/schema.js +11 -8
  19. package/dist/src/schema.js.map +1 -1
  20. package/dist/src/sqlite3-messages.worker.d.ts +8 -1
  21. package/dist/src/sqlite3-messages.worker.d.ts.map +1 -1
  22. package/dist/src/sqlite3-messages.worker.js.map +1 -1
  23. package/dist/src/sqlite3.browser.d.ts.map +1 -1
  24. package/dist/src/sqlite3.browser.js +21 -0
  25. package/dist/src/sqlite3.browser.js.map +1 -1
  26. package/dist/src/sqlite3.wasm.d.ts.map +1 -1
  27. package/dist/src/sqlite3.wasm.js +4 -1
  28. package/dist/src/sqlite3.wasm.js.map +1 -1
  29. package/dist/src/sqlite3.worker.js +6 -0
  30. package/dist/src/sqlite3.worker.js.map +1 -1
  31. package/dist/src/types.d.ts +4 -0
  32. package/dist/src/types.d.ts.map +1 -1
  33. package/package.json +6 -5
  34. package/src/engine.ts +464 -235
  35. package/src/query-planner.ts +247 -22
  36. package/src/schema.ts +21 -4
  37. package/src/sqlite3-messages.worker.ts +6 -0
  38. package/src/sqlite3.browser.ts +33 -0
  39. package/src/sqlite3.wasm.ts +4 -1
  40. package/src/sqlite3.worker.ts +6 -0
  41. package/src/types.ts +3 -0
@@ -17732,7 +17732,6 @@ var create = async (directory, options) => {
17732
17732
  directory: poolDirectory
17733
17733
  });
17734
17734
  poolUtil = activePoolUtil;
17735
- await activePoolUtil.reserveMinimumCapacity(100);
17736
17735
  sqliteDb = new activePoolUtil.OpfsSAHPoolDb(dbFileName);
17737
17736
  } else {
17738
17737
  sqliteDb = new sqlite32.oo1.DB(":memory:");
@@ -17852,6 +17851,12 @@ var SqliteWorkerHandler = class {
17852
17851
  await db.prepare(message.sql, message.id);
17853
17852
  return statementId;
17854
17853
  }
17854
+ if (message.type === "prepare-many") {
17855
+ for (const statement2 of message.statements) {
17856
+ await db.prepare(statement2.sql, statement2.id);
17857
+ }
17858
+ return message.statements.map((statement2) => statement2.id);
17859
+ }
17855
17860
  if (message.type === "close") {
17856
17861
  await db.close();
17857
17862
  this.databases.delete(message.databaseId);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=query-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-planner.d.ts","sourceRoot":"","sources":["../../benchmark/query-planner.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ import DB from "better-sqlite3";
2
+ import fs from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { performance } from "node:perf_hooks";
6
+ const rows = Number(process.env.QUERY_PLANNER_BENCH_ROWS ?? 500_000);
7
+ const runs = Number(process.env.QUERY_PLANNER_BENCH_RUNS ?? 50);
8
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "peerbit-qplanner-"));
9
+ const dbPath = path.join(tmpDir, "bench.sqlite");
10
+ const percentile = (values, p) => {
11
+ const sorted = [...values].sort((a, b) => a - b);
12
+ return sorted[Math.floor((sorted.length - 1) * p)];
13
+ };
14
+ const bench = (db, name, sql, params) => {
15
+ const stmt = db.prepare(sql);
16
+ for (let i = 0; i < 5; i++) {
17
+ stmt.all(...params);
18
+ }
19
+ const times = [];
20
+ for (let i = 0; i < runs; i++) {
21
+ const start = performance.now();
22
+ stmt.all(...params);
23
+ times.push(performance.now() - start);
24
+ }
25
+ const plan = db
26
+ .prepare(`EXPLAIN QUERY PLAN ${sql}`)
27
+ .all(...params)
28
+ .map((row) => String(row.detail))
29
+ .join("\n");
30
+ return {
31
+ name,
32
+ avgMs: times.reduce((sum, value) => sum + value, 0) / times.length,
33
+ p50Ms: percentile(times, 0.5),
34
+ minMs: Math.min(...times),
35
+ maxMs: Math.max(...times),
36
+ plan,
37
+ };
38
+ };
39
+ try {
40
+ const db = new DB(dbPath);
41
+ db.pragma("journal_mode = OFF");
42
+ db.pragma("synchronous = OFF");
43
+ db.pragma("temp_store = MEMORY");
44
+ db.exec("CREATE TABLE t(id INTEGER PRIMARY KEY, a INT, b INT, c INT)");
45
+ const insert = db.prepare("INSERT INTO t(id, a, b, c) VALUES (?, ?, ?, ?)");
46
+ const insertMany = db.transaction(() => {
47
+ for (let i = 1; i <= rows; i++) {
48
+ insert.run(i, i % 10, i % 1000, Math.floor(Math.random() * rows));
49
+ }
50
+ });
51
+ const loadStart = performance.now();
52
+ insertMany();
53
+ const loadMs = performance.now() - loadStart;
54
+ const indexTimes = {};
55
+ for (const [name, sql] of [
56
+ ["old_forward", "CREATE INDEX idx_old_a_b_c ON t(a, b, c)"],
57
+ ["old_reverse", "CREATE INDEX idx_old_c_b_a ON t(c, b, a)"],
58
+ ["new_semantic", "CREATE INDEX idx_new_a_c_b ON t(a, c, b)"],
59
+ ]) {
60
+ const start = performance.now();
61
+ db.exec(sql);
62
+ indexTimes[name] = performance.now() - start;
63
+ }
64
+ db.exec("ANALYZE");
65
+ const query = "SELECT id FROM t WHERE a = ? AND b BETWEEN ? AND ? ORDER BY c LIMIT ?";
66
+ const forcedOldForward = "SELECT id FROM t INDEXED BY idx_old_a_b_c WHERE a = ? AND b BETWEEN ? AND ? ORDER BY c LIMIT ?";
67
+ const forcedOldReverse = "SELECT id FROM t INDEXED BY idx_old_c_b_a WHERE a = ? AND b BETWEEN ? AND ? ORDER BY c LIMIT ?";
68
+ const forcedNew = "SELECT id FROM t INDEXED BY idx_new_a_c_b WHERE a = ? AND b BETWEEN ? AND ? ORDER BY c LIMIT ?";
69
+ const params = [1, 0, 999, 50];
70
+ const results = [
71
+ bench(db, "old forced (a,b,c)", forcedOldForward, params),
72
+ bench(db, "old forced reverse (c,b,a)", forcedOldReverse, params),
73
+ bench(db, "new semantic forced (a,c,b)", forcedNew, params),
74
+ bench(db, "sqlite choice with all indexes", query, params),
75
+ ];
76
+ /* eslint-disable no-console */
77
+ console.log(JSON.stringify({
78
+ rows,
79
+ runs,
80
+ loadMs,
81
+ indexTimes,
82
+ }, null, 2));
83
+ console.table(results.map(({ name, avgMs, p50Ms, minMs, maxMs }) => ({
84
+ name,
85
+ avgMs: Number(avgMs.toFixed(3)),
86
+ p50Ms: Number(p50Ms.toFixed(3)),
87
+ minMs: Number(minMs.toFixed(3)),
88
+ maxMs: Number(maxMs.toFixed(3)),
89
+ })));
90
+ for (const result of results) {
91
+ console.log(`\n${result.name}\n${result.plan}`);
92
+ }
93
+ }
94
+ finally {
95
+ fs.rmSync(tmpDir, { recursive: true, force: true });
96
+ }
97
+ //# sourceMappingURL=query-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-planner.js","sourceRoot":"","sources":["../../benchmark/query-planner.ts"],"names":[],"mappings":"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"}