@minnowdb/core 0.0.1 → 0.1.1
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/LICENSE +21 -0
- package/README.md +38 -1
- package/dist/block-format/block.d.ts +46 -0
- package/dist/block-format/block.d.ts.map +1 -0
- package/dist/block-format/block.js +244 -0
- package/dist/block-format/block.js.map +1 -0
- package/dist/block-format/checksum.d.ts +7 -0
- package/dist/block-format/checksum.d.ts.map +1 -0
- package/dist/block-format/checksum.js +56 -0
- package/dist/block-format/checksum.js.map +1 -0
- package/dist/block-format/codecs.d.ts +24 -0
- package/dist/block-format/codecs.d.ts.map +1 -0
- package/dist/block-format/codecs.js +102 -0
- package/dist/block-format/codecs.js.map +1 -0
- package/dist/block-format/column.d.ts +8 -0
- package/dist/block-format/column.d.ts.map +1 -0
- package/dist/block-format/column.js +166 -0
- package/dist/block-format/column.js.map +1 -0
- package/dist/block-format/index.d.ts +7 -0
- package/dist/block-format/index.d.ts.map +1 -0
- package/dist/block-format/index.js +7 -0
- package/dist/block-format/index.js.map +1 -0
- package/dist/block-format/physical.d.ts +20 -0
- package/dist/block-format/physical.d.ts.map +1 -0
- package/dist/block-format/physical.js +439 -0
- package/dist/block-format/physical.js.map +1 -0
- package/dist/block-format/types.d.ts +93 -0
- package/dist/block-format/types.d.ts.map +1 -0
- package/dist/block-format/types.js +2 -0
- package/dist/block-format/types.js.map +1 -0
- package/dist/engine/artifact-cache.d.ts +22 -0
- package/dist/engine/artifact-cache.d.ts.map +1 -0
- package/dist/engine/artifact-cache.js +68 -0
- package/dist/engine/artifact-cache.js.map +1 -0
- package/dist/engine/batch.d.ts +28 -0
- package/dist/engine/batch.d.ts.map +1 -0
- package/dist/engine/batch.js +38 -0
- package/dist/engine/batch.js.map +1 -0
- package/dist/engine/buffered-writer.d.ts +43 -0
- package/dist/engine/buffered-writer.d.ts.map +1 -0
- package/dist/engine/buffered-writer.js +158 -0
- package/dist/engine/buffered-writer.js.map +1 -0
- package/dist/engine/catalog.d.ts +82 -0
- package/dist/engine/catalog.d.ts.map +1 -0
- package/dist/engine/catalog.js +47 -0
- package/dist/engine/catalog.js.map +1 -0
- package/dist/engine/client.d.ts +211 -0
- package/dist/engine/client.d.ts.map +1 -0
- package/dist/engine/client.js +538 -0
- package/dist/engine/client.js.map +1 -0
- package/dist/engine/coordinator.d.ts +17 -0
- package/dist/engine/coordinator.d.ts.map +1 -0
- package/dist/engine/coordinator.js +60 -0
- package/dist/engine/coordinator.js.map +1 -0
- package/dist/engine/database.d.ts +661 -0
- package/dist/engine/database.d.ts.map +1 -0
- package/dist/engine/database.js +10313 -0
- package/dist/engine/database.js.map +1 -0
- package/dist/engine/defaults.d.ts +33 -0
- package/dist/engine/defaults.d.ts.map +1 -0
- package/dist/engine/defaults.js +87 -0
- package/dist/engine/defaults.js.map +1 -0
- package/dist/engine/errors.d.ts +55 -0
- package/dist/engine/errors.d.ts.map +1 -0
- package/dist/engine/errors.js +81 -0
- package/dist/engine/errors.js.map +1 -0
- package/dist/engine/fts.d.ts +93 -0
- package/dist/engine/fts.d.ts.map +1 -0
- package/dist/engine/fts.js +273 -0
- package/dist/engine/fts.js.map +1 -0
- package/dist/engine/group-index.d.ts +32 -0
- package/dist/engine/group-index.d.ts.map +1 -0
- package/dist/engine/group-index.js +366 -0
- package/dist/engine/group-index.js.map +1 -0
- package/dist/engine/index.d.ts +13 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +12 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/join-index.d.ts +12 -0
- package/dist/engine/join-index.d.ts.map +1 -0
- package/dist/engine/join-index.js +217 -0
- package/dist/engine/join-index.js.map +1 -0
- package/dist/engine/live.d.ts +86 -0
- package/dist/engine/live.d.ts.map +1 -0
- package/dist/engine/live.js +289 -0
- package/dist/engine/live.js.map +1 -0
- package/dist/engine/memory.d.ts +37 -0
- package/dist/engine/memory.d.ts.map +1 -0
- package/dist/engine/memory.js +119 -0
- package/dist/engine/memory.js.map +1 -0
- package/dist/engine/optimizer.d.ts +20 -0
- package/dist/engine/optimizer.d.ts.map +1 -0
- package/dist/engine/optimizer.js +1170 -0
- package/dist/engine/optimizer.js.map +1 -0
- package/dist/engine/query-cache.d.ts +10 -0
- package/dist/engine/query-cache.d.ts.map +1 -0
- package/dist/engine/query-cache.js +58 -0
- package/dist/engine/query-cache.js.map +1 -0
- package/dist/engine/query.d.ts +844 -0
- package/dist/engine/query.d.ts.map +1 -0
- package/dist/engine/query.js +7450 -0
- package/dist/engine/query.js.map +1 -0
- package/dist/engine/schema-wire.d.ts +92 -0
- package/dist/engine/schema-wire.d.ts.map +1 -0
- package/dist/engine/schema-wire.js +115 -0
- package/dist/engine/schema-wire.js.map +1 -0
- package/dist/engine/schema.d.ts +394 -0
- package/dist/engine/schema.d.ts.map +1 -0
- package/dist/engine/schema.js +709 -0
- package/dist/engine/schema.js.map +1 -0
- package/dist/engine/sort-keys.d.ts +36 -0
- package/dist/engine/sort-keys.d.ts.map +1 -0
- package/dist/engine/sort-keys.js +60 -0
- package/dist/engine/sort-keys.js.map +1 -0
- package/dist/engine/sql-json.d.ts +30 -0
- package/dist/engine/sql-json.d.ts.map +1 -0
- package/dist/engine/sql-json.js +120 -0
- package/dist/engine/sql-json.js.map +1 -0
- package/dist/engine/sql-semantics.d.ts +31 -0
- package/dist/engine/sql-semantics.d.ts.map +1 -0
- package/dist/engine/sql-semantics.js +121 -0
- package/dist/engine/sql-semantics.js.map +1 -0
- package/dist/engine/vector.d.ts +87 -0
- package/dist/engine/vector.d.ts.map +1 -0
- package/dist/engine/vector.js +4227 -0
- package/dist/engine/vector.js.map +1 -0
- package/dist/engine/worker-host.d.ts +48 -0
- package/dist/engine/worker-host.d.ts.map +1 -0
- package/dist/engine/worker-host.js +501 -0
- package/dist/engine/worker-host.js.map +1 -0
- package/dist/engine/worker.d.ts +2 -0
- package/dist/engine/worker.d.ts.map +1 -0
- package/dist/engine/worker.js +14 -0
- package/dist/engine/worker.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/plan/index.d.ts +17 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +17 -0
- package/dist/plan/index.js.map +1 -0
- package/dist/storage/fixture-shape.d.ts +42 -0
- package/dist/storage/fixture-shape.d.ts.map +1 -0
- package/dist/storage/fixture-shape.js +146 -0
- package/dist/storage/fixture-shape.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/indexeddb.d.ts +139 -0
- package/dist/storage/indexeddb.d.ts.map +1 -0
- package/dist/storage/indexeddb.js +3161 -0
- package/dist/storage/indexeddb.js.map +1 -0
- package/dist/storage/memory.d.ts +121 -0
- package/dist/storage/memory.d.ts.map +1 -0
- package/dist/storage/memory.js +1455 -0
- package/dist/storage/memory.js.map +1 -0
- package/dist/storage/snapshot.d.ts +108 -0
- package/dist/storage/snapshot.d.ts.map +1 -0
- package/dist/storage/snapshot.js +276 -0
- package/dist/storage/snapshot.js.map +1 -0
- package/dist/storage/types.d.ts +895 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +1549 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/testing/index.d.ts +76 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +233 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/seeds.d.ts +11 -0
- package/dist/testing/seeds.d.ts.map +1 -0
- package/dist/testing/seeds.js +50 -0
- package/dist/testing/seeds.js.map +1 -0
- package/dist/transactions/index.d.ts +148 -0
- package/dist/transactions/index.d.ts.map +1 -0
- package/dist/transactions/index.js +662 -0
- package/dist/transactions/index.js.map +1 -0
- package/dist/worker-protocol/index.d.ts +84 -0
- package/dist/worker-protocol/index.d.ts.map +1 -0
- package/dist/worker-protocol/index.js +117 -0
- package/dist/worker-protocol/index.js.map +1 -0
- package/package.json +66 -16
- package/sql-feature-matrix.json +1275 -0
- package/index.d.ts +0 -1
- package/index.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/engine/memory.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAI7C,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM;IAN9B,SAAkB,IAAI,4BAA4B;gBAGvC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM;CAM/B;AAQD,qBAAa,kBAAkB;;gBAQjB,WAAW,GAAE,MAAgC,EAAE,MAAM,CAAC,EAAE,kBAAkB;IAYtF,IAAI,KAAK,IAAI,gBAAgB,CAE5B;IAED,WAAW,IAAI,kBAAkB;IAKjC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,sBAAsB;IAmB7D;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBzC,KAAK,IAAI,IAAI;IAWb,OAAO,CAAC,WAAW,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CASlE;AAED,qBAAa,sBAAsB;;IAEjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAGX,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM;IAKtD,OAAO,IAAI,IAAI;CAKhB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
export class QueryMemoryBudgetError extends Error {
|
|
2
|
+
label;
|
|
3
|
+
requestedBytes;
|
|
4
|
+
usedBytes;
|
|
5
|
+
budgetBytes;
|
|
6
|
+
name = "QueryMemoryBudgetError";
|
|
7
|
+
constructor(label, requestedBytes, usedBytes, budgetBytes) {
|
|
8
|
+
super(`${label} requested ${String(requestedBytes)} accounted bytes with ${String(usedBytes)} of ${String(budgetBytes)} bytes already reserved`);
|
|
9
|
+
this.label = label;
|
|
10
|
+
this.requestedBytes = requestedBytes;
|
|
11
|
+
this.usedBytes = usedBytes;
|
|
12
|
+
this.budgetBytes = budgetBytes;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class QueryMemoryContext {
|
|
16
|
+
#state;
|
|
17
|
+
#parent;
|
|
18
|
+
#children = new Set();
|
|
19
|
+
#reservations = new Set();
|
|
20
|
+
#talliedBytes = 0;
|
|
21
|
+
#closed = false;
|
|
22
|
+
constructor(budgetBytes = Number.MAX_SAFE_INTEGER, parent) {
|
|
23
|
+
if (!Number.isSafeInteger(budgetBytes) || budgetBytes < 0) {
|
|
24
|
+
throw new RangeError("Query memory budget must be a non-negative safe integer");
|
|
25
|
+
}
|
|
26
|
+
this.#parent = parent;
|
|
27
|
+
if (parent === undefined)
|
|
28
|
+
this.#state = { budgetBytes, usedBytes: 0, peakBytes: 0 };
|
|
29
|
+
else {
|
|
30
|
+
this.#state = parent.#state;
|
|
31
|
+
parent.#children.add(this);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
get usage() {
|
|
35
|
+
return { ...this.#state };
|
|
36
|
+
}
|
|
37
|
+
createChild() {
|
|
38
|
+
this.#assertOpen();
|
|
39
|
+
return new QueryMemoryContext(this.#state.budgetBytes, this);
|
|
40
|
+
}
|
|
41
|
+
reserve(bytes, label) {
|
|
42
|
+
this.#assertOpen();
|
|
43
|
+
validateMemoryBytes(bytes, "Query memory reservation");
|
|
44
|
+
const nextUsed = this.#state.usedBytes + bytes;
|
|
45
|
+
if (!Number.isSafeInteger(nextUsed) || nextUsed > this.#state.budgetBytes) {
|
|
46
|
+
throw new QueryMemoryBudgetError(label, bytes, this.#state.usedBytes, this.#state.budgetBytes);
|
|
47
|
+
}
|
|
48
|
+
this.#state.usedBytes = nextUsed;
|
|
49
|
+
this.#state.peakBytes = Math.max(this.#state.peakBytes, nextUsed);
|
|
50
|
+
const reservation = new QueryMemoryReservation(this, bytes);
|
|
51
|
+
this.#reservations.add(reservation);
|
|
52
|
+
return reservation;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Reserves bytes that live until this context closes, without a per-call reservation object.
|
|
56
|
+
* The hot accumulation paths (result rows, spill pages) reserve once per row; tracking each
|
|
57
|
+
* row as a retained `QueryMemoryReservation` in a Set costs O(result rows) live objects on
|
|
58
|
+
* top of the rows themselves. Tallied bytes share the same budget and error semantics as
|
|
59
|
+
* `reserve` and are released together when the context closes.
|
|
60
|
+
*/
|
|
61
|
+
tally(bytes, label) {
|
|
62
|
+
this.#assertOpen();
|
|
63
|
+
validateMemoryBytes(bytes, "Query memory reservation");
|
|
64
|
+
const nextUsed = this.#state.usedBytes + bytes;
|
|
65
|
+
if (!Number.isSafeInteger(nextUsed) || nextUsed > this.#state.budgetBytes) {
|
|
66
|
+
throw new QueryMemoryBudgetError(label, bytes, this.#state.usedBytes, this.#state.budgetBytes);
|
|
67
|
+
}
|
|
68
|
+
this.#state.usedBytes = nextUsed;
|
|
69
|
+
this.#state.peakBytes = Math.max(this.#state.peakBytes, nextUsed);
|
|
70
|
+
this.#talliedBytes += bytes;
|
|
71
|
+
}
|
|
72
|
+
close() {
|
|
73
|
+
if (this.#closed)
|
|
74
|
+
return;
|
|
75
|
+
this.#closed = true;
|
|
76
|
+
for (const child of [...this.#children])
|
|
77
|
+
child.close();
|
|
78
|
+
for (const reservation of [...this.#reservations])
|
|
79
|
+
reservation.release();
|
|
80
|
+
this.#state.usedBytes -= this.#talliedBytes;
|
|
81
|
+
this.#talliedBytes = 0;
|
|
82
|
+
if (this.#state.usedBytes < 0)
|
|
83
|
+
throw new Error("Query memory accounting underflow");
|
|
84
|
+
if (this.#parent !== undefined)
|
|
85
|
+
this.#parent.#children.delete(this);
|
|
86
|
+
}
|
|
87
|
+
release(reservation, bytes) {
|
|
88
|
+
if (!this.#reservations.delete(reservation))
|
|
89
|
+
return;
|
|
90
|
+
this.#state.usedBytes -= bytes;
|
|
91
|
+
if (this.#state.usedBytes < 0)
|
|
92
|
+
throw new Error("Query memory accounting underflow");
|
|
93
|
+
}
|
|
94
|
+
#assertOpen() {
|
|
95
|
+
if (this.#closed)
|
|
96
|
+
throw new Error("Query memory context is closed");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export class QueryMemoryReservation {
|
|
100
|
+
#context;
|
|
101
|
+
bytes;
|
|
102
|
+
#released = false;
|
|
103
|
+
constructor(context, bytes) {
|
|
104
|
+
this.#context = context;
|
|
105
|
+
this.bytes = bytes;
|
|
106
|
+
}
|
|
107
|
+
release() {
|
|
108
|
+
if (this.#released)
|
|
109
|
+
return;
|
|
110
|
+
this.#released = true;
|
|
111
|
+
this.#context.release(this, this.bytes);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function validateMemoryBytes(bytes, label) {
|
|
115
|
+
if (!Number.isSafeInteger(bytes) || bytes < 0) {
|
|
116
|
+
throw new RangeError(`${label} must be a non-negative safe integer`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/engine/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type CompiledQuery } from "./query.js";
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic plan-to-plan rewrites over the shared compiled representation. Every rule
|
|
4
|
+
* preserves result semantics exactly; rules that cannot prove safety leave the plan unchanged.
|
|
5
|
+
* The optimizer runs before subquery resolution, so subquery blocks optimize recursively and
|
|
6
|
+
* predicates containing subqueries stay self-contained when they move.
|
|
7
|
+
*/
|
|
8
|
+
export declare function optimizePlan(plan: CompiledQuery): CompiledQuery;
|
|
9
|
+
/**
|
|
10
|
+
* Cost-based build-side selection using prepared or catalog-derived row counts. A single inner
|
|
11
|
+
* equi-join probes from the base into an index over the joined table, so a joined input more than
|
|
12
|
+
* twice the base size swaps sides and builds over the smaller input. Asymmetric and observable
|
|
13
|
+
* source-order shapes stay unchanged.
|
|
14
|
+
*/
|
|
15
|
+
export declare function chooseJoinOrder(plan: CompiledQuery, inputs: ReadonlyMap<string, {
|
|
16
|
+
readonly rowCount: number;
|
|
17
|
+
}>): CompiledQuery;
|
|
18
|
+
/** Renders a stable, human-readable plan for snapshot tests and explain(). */
|
|
19
|
+
export declare function renderPlan(plan: CompiledQuery): string;
|
|
20
|
+
//# sourceMappingURL=optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../src/engine/optimizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,aAAa,EAMnB,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAI/D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GACzD,aAAa,CAoBf;AAqkCD,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAItD"}
|