@peerbit/indexer-sqlite3 3.0.5 → 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.
- package/dist/assets/sqlite3/sqlite3.worker.min.js +13 -6
- package/dist/benchmark/query-planner.d.ts +2 -0
- package/dist/benchmark/query-planner.d.ts.map +1 -0
- package/dist/benchmark/query-planner.js +97 -0
- package/dist/benchmark/query-planner.js.map +1 -0
- package/dist/index.min.js +807 -453
- package/dist/index.min.js.map +4 -4
- package/dist/src/engine.d.ts +15 -4
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +364 -179
- package/dist/src/engine.js.map +1 -1
- package/dist/src/query-planner.d.ts +20 -0
- package/dist/src/query-planner.d.ts.map +1 -1
- package/dist/src/query-planner.js +191 -21
- package/dist/src/query-planner.js.map +1 -1
- package/dist/src/schema.d.ts +6 -2
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +11 -8
- package/dist/src/schema.js.map +1 -1
- package/dist/src/sqlite3-messages.worker.d.ts +8 -1
- package/dist/src/sqlite3-messages.worker.d.ts.map +1 -1
- package/dist/src/sqlite3-messages.worker.js.map +1 -1
- package/dist/src/sqlite3.browser.d.ts.map +1 -1
- package/dist/src/sqlite3.browser.js +21 -0
- package/dist/src/sqlite3.browser.js.map +1 -1
- package/dist/src/sqlite3.wasm.d.ts.map +1 -1
- package/dist/src/sqlite3.wasm.js +4 -1
- package/dist/src/sqlite3.wasm.js.map +1 -1
- package/dist/src/sqlite3.worker.js +6 -0
- package/dist/src/sqlite3.worker.js.map +1 -1
- package/dist/src/types.d.ts +4 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +7 -6
- package/src/engine.ts +464 -235
- package/src/query-planner.ts +247 -22
- package/src/schema.ts +21 -4
- package/src/sqlite3-messages.worker.ts +6 -0
- package/src/sqlite3.browser.ts +33 -0
- package/src/sqlite3.wasm.ts +4 -1
- package/src/sqlite3.worker.ts +6 -0
- package/src/types.ts +3 -0
|
@@ -17182,7 +17182,10 @@ var PROTOTYPE_DEPENDENCY_HANDLER_OFFSET = PROTOTYPE_DESERIALIZATION_HANDLER_OFFS
|
|
|
17182
17182
|
var PROTOTYPE_SCHEMA_OFFSET = PROTOTYPE_DESERIALIZATION_HANDLER_OFFSET + PROTOTYPE_POLLUTION_CONTEXT_RANGE * 2;
|
|
17183
17183
|
var MAX_ARRAY_SIZE_ALLOCATION = 1024 * 1024;
|
|
17184
17184
|
|
|
17185
|
-
//
|
|
17185
|
+
// ../../crypto/dist/src/utils.js
|
|
17186
|
+
var import_libsodium_wrappers = __toESM(require_libsodium_wrappers(), 1);
|
|
17187
|
+
|
|
17188
|
+
// ../../../../node_modules/.pnpm/multiformats@13.4.2/node_modules/multiformats/dist/src/bytes.js
|
|
17186
17189
|
var empty = new Uint8Array(0);
|
|
17187
17190
|
function coerce(o) {
|
|
17188
17191
|
if (o instanceof Uint8Array && o.constructor.name === "Uint8Array") {
|
|
@@ -17197,7 +17200,7 @@ function coerce(o) {
|
|
|
17197
17200
|
throw new Error("Unknown type, must be binary type");
|
|
17198
17201
|
}
|
|
17199
17202
|
|
|
17200
|
-
// ../../../../node_modules/.pnpm/multiformats@13.4.
|
|
17203
|
+
// ../../../../node_modules/.pnpm/multiformats@13.4.2/node_modules/multiformats/dist/src/vendor/base-x.js
|
|
17201
17204
|
function base(ALPHABET, name) {
|
|
17202
17205
|
if (ALPHABET.length >= 255) {
|
|
17203
17206
|
throw new TypeError("Alphabet too long");
|
|
@@ -17333,7 +17336,7 @@ var src = base;
|
|
|
17333
17336
|
var _brrp__multiformats_scope_baseX = src;
|
|
17334
17337
|
var base_x_default = _brrp__multiformats_scope_baseX;
|
|
17335
17338
|
|
|
17336
|
-
// ../../../../node_modules/.pnpm/multiformats@13.4.
|
|
17339
|
+
// ../../../../node_modules/.pnpm/multiformats@13.4.2/node_modules/multiformats/dist/src/bases/base.js
|
|
17337
17340
|
var Encoder = class {
|
|
17338
17341
|
name;
|
|
17339
17342
|
prefix;
|
|
@@ -17439,7 +17442,7 @@ function baseX({ name, prefix, alphabet }) {
|
|
|
17439
17442
|
});
|
|
17440
17443
|
}
|
|
17441
17444
|
|
|
17442
|
-
// ../../../../node_modules/.pnpm/multiformats@13.4.
|
|
17445
|
+
// ../../../../node_modules/.pnpm/multiformats@13.4.2/node_modules/multiformats/dist/src/bases/base58.js
|
|
17443
17446
|
var base58btc = baseX({
|
|
17444
17447
|
name: "base58btc",
|
|
17445
17448
|
prefix: "z",
|
|
@@ -17452,7 +17455,6 @@ var base58flickr = baseX({
|
|
|
17452
17455
|
});
|
|
17453
17456
|
|
|
17454
17457
|
// ../../crypto/dist/src/utils.js
|
|
17455
|
-
var import_libsodium_wrappers = __toESM(require_libsodium_wrappers(), 1);
|
|
17456
17458
|
var fromBase64 = (base64) => {
|
|
17457
17459
|
return import_libsodium_wrappers.default.from_base64(base64, import_libsodium_wrappers.default.base64_variants.ORIGINAL);
|
|
17458
17460
|
};
|
|
@@ -17730,7 +17732,6 @@ var create = async (directory, options) => {
|
|
|
17730
17732
|
directory: poolDirectory
|
|
17731
17733
|
});
|
|
17732
17734
|
poolUtil = activePoolUtil;
|
|
17733
|
-
await activePoolUtil.reserveMinimumCapacity(100);
|
|
17734
17735
|
sqliteDb = new activePoolUtil.OpfsSAHPoolDb(dbFileName);
|
|
17735
17736
|
} else {
|
|
17736
17737
|
sqliteDb = new sqlite32.oo1.DB(":memory:");
|
|
@@ -17850,6 +17851,12 @@ var SqliteWorkerHandler = class {
|
|
|
17850
17851
|
await db.prepare(message.sql, message.id);
|
|
17851
17852
|
return statementId;
|
|
17852
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
|
+
}
|
|
17853
17860
|
if (message.type === "close") {
|
|
17854
17861
|
await db.close();
|
|
17855
17862
|
this.databases.delete(message.databaseId);
|
|
@@ -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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"}
|