@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,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The database every compatibility fixture holds, and the questions asked of it.
|
|
3
|
+
*
|
|
4
|
+
* Shared by the generator (scripts/write-format-fixture.mts) and the test that reads the
|
|
5
|
+
* fixtures back, so the two cannot drift: a fixture written today and a fixture written in two
|
|
6
|
+
* years describe the same database, and any difference in the answers is a difference in the
|
|
7
|
+
* engine rather than in what was asked.
|
|
8
|
+
*
|
|
9
|
+
* The shape is chosen to touch every part of the persisted format that a change could break,
|
|
10
|
+
* because a fixture only protects what it happens to contain:
|
|
11
|
+
*
|
|
12
|
+
* - every column type, and a nullable column of each that actually holds nulls
|
|
13
|
+
* - a low-cardinality string column, which encodes through the dictionary, alongside a
|
|
14
|
+
* high-cardinality one that cannot
|
|
15
|
+
* - a column of near-identical text, which compresses, beside random text that does not, so
|
|
16
|
+
* both codec paths appear in the blocks
|
|
17
|
+
* - enough rows to span several blocks per column, so multi-block columns and their zone maps
|
|
18
|
+
* are covered rather than a single degenerate block
|
|
19
|
+
* - a mutation history: updates and deletes leave delta segments, which are a different
|
|
20
|
+
* segment kind with a different block layout from a plain append
|
|
21
|
+
* - both a string and a numeric unique key, since key encoding differs between them
|
|
22
|
+
* - a table with no unique key at all, which stores no key column
|
|
23
|
+
*
|
|
24
|
+
* Adding to this shape is safe and welcome. Removing from it silently narrows what every future
|
|
25
|
+
* fixture proves, so treat a deletion here as a decision to stop protecting that surface.
|
|
26
|
+
*/
|
|
27
|
+
import type { MinnowDatabase } from "../engine/database.js";
|
|
28
|
+
/**
|
|
29
|
+
* Builds the fixture database. The caller supplies the database so the generator and the test
|
|
30
|
+
* can each choose their own store; nothing here depends on which.
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildFixtureDatabase(database: MinnowDatabase): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* What every fixture is asked. Ordered so the answers are stable, and chosen to read each part
|
|
35
|
+
* of the shape above back out: every type, both codecs, the dictionary, the deltas, both key
|
|
36
|
+
* kinds, and the keyless table.
|
|
37
|
+
*
|
|
38
|
+
* Only ever append here. Changing an existing query changes the question every historical
|
|
39
|
+
* fixture is answering, and the recorded answer no longer means what it meant.
|
|
40
|
+
*/
|
|
41
|
+
export declare const FIXTURE_QUERIES: readonly string[];
|
|
42
|
+
//# sourceMappingURL=fixture-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixture-shape.d.ts","sourceRoot":"","sources":["../../src/storage/fixture-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAkC5D;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFlF;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAoC5C,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/** Deterministic pseudo-randomness, so a regenerated fixture differs only when the format does. */
|
|
2
|
+
function mulberry32(seed) {
|
|
3
|
+
let state = seed >>> 0;
|
|
4
|
+
return () => {
|
|
5
|
+
state = (state + 0x6d2b79f5) >>> 0;
|
|
6
|
+
let mixed = state;
|
|
7
|
+
mixed = Math.imul(mixed ^ (mixed >>> 15), mixed | 1);
|
|
8
|
+
mixed ^= mixed + Math.imul(mixed ^ (mixed >>> 7), mixed | 61);
|
|
9
|
+
return ((mixed ^ (mixed >>> 14)) >>> 0) / 4294967296;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const REGIONS = ["west", "east", "north", "south"];
|
|
13
|
+
const LETTERS = "abcdefghijklmnopqrstuvwxyz";
|
|
14
|
+
/** Text with almost no entropy, which the compressing codec will take. */
|
|
15
|
+
function compressible(index) {
|
|
16
|
+
return `the quick brown fox jumps over the lazy dog ${String(index % 3)}`;
|
|
17
|
+
}
|
|
18
|
+
/** Text with high entropy, which it will not. */
|
|
19
|
+
function incompressible(random) {
|
|
20
|
+
let out = "";
|
|
21
|
+
for (let index = 0; index < 24; index += 1) {
|
|
22
|
+
out += LETTERS[Math.floor(random() * LETTERS.length)] ?? "a";
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
/** Rows enough to span several blocks at the small block size the generator uses. */
|
|
27
|
+
const ROWS = 400;
|
|
28
|
+
/**
|
|
29
|
+
* Builds the fixture database. The caller supplies the database so the generator and the test
|
|
30
|
+
* can each choose their own store; nothing here depends on which.
|
|
31
|
+
*/
|
|
32
|
+
export async function buildFixtureDatabase(database) {
|
|
33
|
+
const random = mulberry32(0x0f1a7);
|
|
34
|
+
await database.createTable({
|
|
35
|
+
name: "records",
|
|
36
|
+
uniqueKey: "id",
|
|
37
|
+
columns: [
|
|
38
|
+
{ name: "id", type: "number" },
|
|
39
|
+
{ name: "region", type: "string" },
|
|
40
|
+
{ name: "note", type: "string" },
|
|
41
|
+
{ name: "noise", type: "string" },
|
|
42
|
+
{ name: "amount", type: "number" },
|
|
43
|
+
{ name: "active", type: "boolean" },
|
|
44
|
+
{ name: "seen_at", type: "datetime" },
|
|
45
|
+
{ name: "maybe_text", type: "string", nullable: true },
|
|
46
|
+
{ name: "maybe_number", type: "number", nullable: true },
|
|
47
|
+
{ name: "maybe_flag", type: "boolean", nullable: true },
|
|
48
|
+
{ name: "maybe_time", type: "datetime", nullable: true },
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
await database.insertBatch("records", Array.from({ length: ROWS }, (_, index) => ({
|
|
52
|
+
id: index + 1,
|
|
53
|
+
region: REGIONS[index % REGIONS.length] ?? "west",
|
|
54
|
+
note: compressible(index),
|
|
55
|
+
noise: incompressible(random),
|
|
56
|
+
// Quarters stay exact in doubles, so a rounding change shows up as a difference rather
|
|
57
|
+
// than as noise nobody can attribute.
|
|
58
|
+
amount: Math.floor(random() * 400) / 4,
|
|
59
|
+
active: index % 3 === 0,
|
|
60
|
+
seen_at: new Date(Date.UTC(2026, 0, 1 + (index % 28), index % 24, 0, 0)),
|
|
61
|
+
maybe_text: index % 5 === 0 ? null : `t${String(index)}`,
|
|
62
|
+
maybe_number: index % 7 === 0 ? null : index * 2,
|
|
63
|
+
maybe_flag: index % 11 === 0 ? null : index % 2 === 0,
|
|
64
|
+
maybe_time: index % 13 === 0 ? null : new Date(Date.UTC(2025, 5, 1 + (index % 27))),
|
|
65
|
+
})));
|
|
66
|
+
// A string unique key, which encodes differently from a numeric one.
|
|
67
|
+
await database.createTable({
|
|
68
|
+
name: "keyed_by_name",
|
|
69
|
+
uniqueKey: "name",
|
|
70
|
+
columns: [
|
|
71
|
+
{ name: "name", type: "string" },
|
|
72
|
+
{ name: "score", type: "number" },
|
|
73
|
+
],
|
|
74
|
+
});
|
|
75
|
+
await database.insertBatch("keyed_by_name", Array.from({ length: 120 }, (_, index) => ({
|
|
76
|
+
name: `name-${String(index).padStart(4, "0")}`,
|
|
77
|
+
score: index % 50,
|
|
78
|
+
})));
|
|
79
|
+
// No unique key at all: this table stores no key column, which is its own layout.
|
|
80
|
+
await database.createTable({
|
|
81
|
+
name: "keyless",
|
|
82
|
+
columns: [
|
|
83
|
+
{ name: "label", type: "string" },
|
|
84
|
+
{ name: "value", type: "number" },
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
await database.insertBatch("keyless", Array.from({ length: 90 }, (_, index) => ({
|
|
88
|
+
label: REGIONS[index % REGIONS.length] ?? "west",
|
|
89
|
+
value: index,
|
|
90
|
+
})));
|
|
91
|
+
// The mutation history. Updates and deletes write delta segments, whose layout differs from an
|
|
92
|
+
// append -- and a fixture with only appends would prove nothing about reading them back.
|
|
93
|
+
await database.execute("UPDATE records SET amount = ? WHERE id = ?", [1234.5, 3]);
|
|
94
|
+
await database.execute("UPDATE records SET maybe_text = ? WHERE id = ?", [null, 4]);
|
|
95
|
+
await database.execute("UPDATE records SET region = ? WHERE id = ?", ["central", 5]);
|
|
96
|
+
await database.execute("DELETE FROM records WHERE id = ?", [6]);
|
|
97
|
+
await database.execute("DELETE FROM records WHERE id > ?", [396]);
|
|
98
|
+
await database.execute("UPDATE keyed_by_name SET score = ? WHERE name = ?", [999, "name-0007"]);
|
|
99
|
+
await database.execute("DELETE FROM keyed_by_name WHERE name = ?", ["name-0008"]);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* What every fixture is asked. Ordered so the answers are stable, and chosen to read each part
|
|
103
|
+
* of the shape above back out: every type, both codecs, the dictionary, the deltas, both key
|
|
104
|
+
* kinds, and the keyless table.
|
|
105
|
+
*
|
|
106
|
+
* Only ever append here. Changing an existing query changes the question every historical
|
|
107
|
+
* fixture is answering, and the recorded answer no longer means what it meant.
|
|
108
|
+
*/
|
|
109
|
+
export const FIXTURE_QUERIES = [
|
|
110
|
+
"SELECT COUNT(*) AS n FROM records",
|
|
111
|
+
"SELECT COUNT(*) AS n FROM keyed_by_name",
|
|
112
|
+
"SELECT COUNT(*) AS n FROM keyless",
|
|
113
|
+
// Every column of one row, after the updates that touched its neighbours.
|
|
114
|
+
"SELECT * FROM records WHERE id = 1",
|
|
115
|
+
// The updated rows, which live in delta segments rather than the base.
|
|
116
|
+
"SELECT id, amount FROM records WHERE id = 3",
|
|
117
|
+
"SELECT id, maybe_text FROM records WHERE id = 4",
|
|
118
|
+
"SELECT id, region FROM records WHERE id = 5",
|
|
119
|
+
// The deleted rows must be gone, both the single and the ranged delete.
|
|
120
|
+
"SELECT id FROM records WHERE id IN (6, 397, 398, 399, 400) ORDER BY id",
|
|
121
|
+
// Nullability across every type, counted rather than listed so the answer stays small.
|
|
122
|
+
"SELECT COUNT(*) AS n FROM records WHERE maybe_text IS NULL",
|
|
123
|
+
"SELECT COUNT(*) AS n FROM records WHERE maybe_number IS NULL",
|
|
124
|
+
"SELECT COUNT(*) AS n FROM records WHERE maybe_flag IS NULL",
|
|
125
|
+
"SELECT COUNT(*) AS n FROM records WHERE maybe_time IS NULL",
|
|
126
|
+
// The dictionary-coded column, and an aggregate that has to decode every value of it.
|
|
127
|
+
"SELECT region, COUNT(*) AS n FROM records GROUP BY region ORDER BY region",
|
|
128
|
+
// Both text columns, which took different codecs.
|
|
129
|
+
"SELECT note FROM records WHERE id = 42",
|
|
130
|
+
"SELECT noise FROM records WHERE id = 42",
|
|
131
|
+
// Numeric and datetime round-trips, including the boundary rows of the range.
|
|
132
|
+
"SELECT SUM(amount) AS total, MIN(amount) AS low, MAX(amount) AS high FROM records",
|
|
133
|
+
"SELECT MIN(seen_at) AS first, MAX(seen_at) AS last FROM records",
|
|
134
|
+
"SELECT COUNT(*) AS n FROM records WHERE active",
|
|
135
|
+
// A scan that spans blocks rather than resolving inside one.
|
|
136
|
+
"SELECT id FROM records WHERE amount > 90 ORDER BY id LIMIT 10",
|
|
137
|
+
// The string key, updated and deleted through.
|
|
138
|
+
"SELECT name, score FROM keyed_by_name WHERE name = 'name-0007'",
|
|
139
|
+
"SELECT name FROM keyed_by_name WHERE name = 'name-0008'",
|
|
140
|
+
"SELECT name, score FROM keyed_by_name ORDER BY name LIMIT 3",
|
|
141
|
+
// The keyless table, which stores no key column.
|
|
142
|
+
"SELECT label, SUM(value) AS total FROM keyless GROUP BY label ORDER BY label",
|
|
143
|
+
// A join, which reads two layouts at once.
|
|
144
|
+
"SELECT r.region, COUNT(*) AS n FROM records r JOIN keyless k ON r.region = k.label GROUP BY r.region ORDER BY r.region",
|
|
145
|
+
];
|
|
146
|
+
//# sourceMappingURL=fixture-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixture-shape.js","sourceRoot":"","sources":["../../src/storage/fixture-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { type BeginTransactionInput, type BeginTransactionResult, type CommitTransactionInput, type CompactionJobRecord, type CompactionJobRecordUpdate, type CreateGarbageCollectionJobInput, type BlockStore, type BlockWrite, type CatalogProbe, type TriggerRecord, type FtsCandidates, type FtsColumnIndexRecord, type FtsPosting, type GarbageCollectionJobRecord, type GarbageCollectionStepResult, type LeaseRecord, type Manifest, type ManifestSummary, type PublishManifestInput, type QueryCatalogState, type RowIdRange, type RunGarbageCollectionStepInput, type SegmentRecord, type StageTransactionArtifactsInput, type StoragePage, type TableColumnRecord, type TableRecord, type TempOwnerRecord, type TempRunPage, type TransactionRecord, type TransactionRecordUpdate } from "./types.js";
|
|
2
|
+
import { type DatabaseSnapshot, type SnapshotLoadProgress } from "./snapshot.js";
|
|
3
|
+
export interface IndexedDbBlockStoreOptions {
|
|
4
|
+
name: string;
|
|
5
|
+
durability?: IDBTransactionDurability;
|
|
6
|
+
indexedDB?: IDBFactory;
|
|
7
|
+
}
|
|
8
|
+
export declare class IndexedDbBlockStore implements BlockStore {
|
|
9
|
+
#private;
|
|
10
|
+
private constructor();
|
|
11
|
+
static open(options: IndexedDbBlockStoreOptions): Promise<IndexedDbBlockStore>;
|
|
12
|
+
addBlock(id: string, bytes: Uint8Array): Promise<void>;
|
|
13
|
+
addBlocks(blocks: readonly BlockWrite[]): Promise<void>;
|
|
14
|
+
getBlock(id: string): Promise<Uint8Array | undefined>;
|
|
15
|
+
getBlocks(ids: readonly string[]): Promise<Array<Uint8Array | undefined>>;
|
|
16
|
+
removeBlock(id: string): Promise<void>;
|
|
17
|
+
listBlockIds(): Promise<string[]>;
|
|
18
|
+
putTempRunPage(page: TempRunPage): Promise<void>;
|
|
19
|
+
getTempRunPage(ownerId: string, runId: string, pageIndex: number): Promise<Uint8Array | undefined>;
|
|
20
|
+
removeTempRun(ownerId: string, runId: string): Promise<void>;
|
|
21
|
+
removeTempOwner(ownerId: string): Promise<void>;
|
|
22
|
+
createTempOwner(record: TempOwnerRecord): Promise<void>;
|
|
23
|
+
getTempOwner(ownerId: string): Promise<TempOwnerRecord | undefined>;
|
|
24
|
+
renewTempOwner(ownerId: string, expectedRevision: number, expiresAt: string): Promise<TempOwnerRecord>;
|
|
25
|
+
removeTempOwnerIfExpired(ownerId: string, expiresAtCutoff: string): Promise<boolean>;
|
|
26
|
+
listTempOwnerIdsPage(afterOwnerId: string | null, limit: number): Promise<StoragePage<string, string>>;
|
|
27
|
+
addTable(record: TableRecord): Promise<void>;
|
|
28
|
+
getTable(id: string): Promise<TableRecord | undefined>;
|
|
29
|
+
updateTable(id: string, expectedRevision: number, update: {
|
|
30
|
+
columns?: TableColumnRecord[];
|
|
31
|
+
ftsColumns?: Record<string, FtsColumnIndexRecord> | null;
|
|
32
|
+
triggers?: TriggerRecord[] | null;
|
|
33
|
+
}): Promise<TableRecord>;
|
|
34
|
+
removeTable(id: string, expectedRevision: number): Promise<void>;
|
|
35
|
+
writeFtsBase(tableId: string, columnId: string, input: {
|
|
36
|
+
coversVersion: number;
|
|
37
|
+
chunks: FtsPosting[][];
|
|
38
|
+
totalTokens: number;
|
|
39
|
+
}): Promise<void>;
|
|
40
|
+
readFtsCandidates(tableId: string, columnId: string, terms: ReadonlyArray<{
|
|
41
|
+
term: string;
|
|
42
|
+
prefix: boolean;
|
|
43
|
+
}>, upToVersion: number): Promise<FtsCandidates & {
|
|
44
|
+
deltaChunkCount: number;
|
|
45
|
+
totalTokens: number;
|
|
46
|
+
coversVersion: number;
|
|
47
|
+
}>;
|
|
48
|
+
/**
|
|
49
|
+
* Resolving a name means two reads — name to id, then id to record — and the second cannot
|
|
50
|
+
* start until the first lands, so the write path pays two serialized round trips for one
|
|
51
|
+
* lookup. A remembered id collapses that to one read, and needs no invalidation: the record
|
|
52
|
+
* carries its own name, so a mapping that has gone stale fails the check below and falls
|
|
53
|
+
* back to the full resolution. Table ids are unique per creation, so a dropped and recreated
|
|
54
|
+
* table cannot be mistaken for its predecessor.
|
|
55
|
+
*/
|
|
56
|
+
getTableByName(name: string): Promise<TableRecord | undefined>;
|
|
57
|
+
listTables(): Promise<TableRecord[]>;
|
|
58
|
+
addSegment(record: SegmentRecord): Promise<void>;
|
|
59
|
+
getSegment(id: string): Promise<SegmentRecord | undefined>;
|
|
60
|
+
listSegments(tableId?: string): Promise<SegmentRecord[]>;
|
|
61
|
+
removeSegment(id: string): Promise<void>;
|
|
62
|
+
reserveRowIds(tableId: string, count: number): Promise<RowIdRange>;
|
|
63
|
+
reserveAutoIncrement(tableId: string, columnId: string, count: number, atLeast?: bigint): Promise<RowIdRange>;
|
|
64
|
+
getExistingUniqueKeys(tableId: string, keyTokens: readonly string[]): Promise<string[]>;
|
|
65
|
+
getCurrentManifestVersion(): Promise<number | null>;
|
|
66
|
+
/**
|
|
67
|
+
* The freshness probe runs once per query, so its latency is a floor under every read the
|
|
68
|
+
* database serves. Both values are final the moment their reads land: a read-only
|
|
69
|
+
* transaction has nothing left to commit, and waiting for its `complete` event only costs
|
|
70
|
+
* another turn of the event loop — measured at roughly 40% of the probe in Chromium — while
|
|
71
|
+
* changing nothing about what was read. The reads still race the transaction's failure
|
|
72
|
+
* events, so an abort surfaces as a rejection here instead of hanging.
|
|
73
|
+
*/
|
|
74
|
+
getCatalogProbe(): Promise<CatalogProbe>;
|
|
75
|
+
getQueryCatalogState(tableNames: readonly string[]): Promise<QueryCatalogState>;
|
|
76
|
+
getCurrentManifest(): Promise<Manifest | undefined>;
|
|
77
|
+
getManifest(version: number): Promise<Manifest | undefined>;
|
|
78
|
+
listManifests(): Promise<Manifest[]>;
|
|
79
|
+
listManifestPage(afterVersion: number | null, limit: number): Promise<{
|
|
80
|
+
records: Manifest[];
|
|
81
|
+
nextCursor: number | null;
|
|
82
|
+
}>;
|
|
83
|
+
publishManifest(input: PublishManifestInput): Promise<Manifest>;
|
|
84
|
+
beginTransaction(input: BeginTransactionInput): Promise<BeginTransactionResult>;
|
|
85
|
+
createTransaction(record: TransactionRecord): Promise<void>;
|
|
86
|
+
getTransaction(id: string): Promise<TransactionRecord | undefined>;
|
|
87
|
+
getTransactions(ids: readonly string[]): Promise<Array<TransactionRecord | undefined>>;
|
|
88
|
+
listTransactions(): Promise<TransactionRecord[]>;
|
|
89
|
+
listTransactionPage(afterId: string | null, limit: number): Promise<{
|
|
90
|
+
records: TransactionRecord[];
|
|
91
|
+
nextCursor: string | null;
|
|
92
|
+
}>;
|
|
93
|
+
updateTransaction(id: string, expectedRevision: number, update: TransactionRecordUpdate): Promise<TransactionRecord>;
|
|
94
|
+
stageTransactionArtifacts(input: StageTransactionArtifactsInput): Promise<TransactionRecord>;
|
|
95
|
+
commitTransaction(input: CommitTransactionInput): Promise<ManifestSummary>;
|
|
96
|
+
createLease(record: LeaseRecord): Promise<void>;
|
|
97
|
+
getLease(id: string): Promise<LeaseRecord | undefined>;
|
|
98
|
+
listLeases(): Promise<LeaseRecord[]>;
|
|
99
|
+
renewLease(id: string, expectedRevision: number, expiresAt: string): Promise<LeaseRecord>;
|
|
100
|
+
removeLeaseIfExpired(id: string, expectedRevision: number, expiresAtCutoff: string): Promise<boolean>;
|
|
101
|
+
removeLease(id: string): Promise<void>;
|
|
102
|
+
createCompactionJob(record: CompactionJobRecord): Promise<void>;
|
|
103
|
+
getCompactionJob(id: string): Promise<CompactionJobRecord | undefined>;
|
|
104
|
+
listCompactionJobs(tableId?: string): Promise<CompactionJobRecord[]>;
|
|
105
|
+
listCompactionJobPage(afterId: string | null, limit: number): Promise<{
|
|
106
|
+
records: CompactionJobRecord[];
|
|
107
|
+
nextCursor: string | null;
|
|
108
|
+
}>;
|
|
109
|
+
updateCompactionJob(id: string, expectedRevision: number, update: CompactionJobRecordUpdate): Promise<CompactionJobRecord>;
|
|
110
|
+
cancelCompactionJob(id: string, expectedRevision: number, cancelledAt: string): Promise<CompactionJobRecord>;
|
|
111
|
+
removeCompactionJob(id: string): Promise<void>;
|
|
112
|
+
createGarbageCollectionJob(input: CreateGarbageCollectionJobInput): Promise<GarbageCollectionJobRecord>;
|
|
113
|
+
getGarbageCollectionJob(id: string): Promise<GarbageCollectionJobRecord | undefined>;
|
|
114
|
+
listGarbageCollectionJobs(): Promise<GarbageCollectionJobRecord[]>;
|
|
115
|
+
runGarbageCollectionStep(input: RunGarbageCollectionStepInput): Promise<GarbageCollectionStepResult>;
|
|
116
|
+
removeGarbageCollectionJob(id: string): Promise<void>;
|
|
117
|
+
getLogicalStorageBytes(): Promise<number>;
|
|
118
|
+
/**
|
|
119
|
+
* Copies the current version out as a portable snapshot. See `./snapshot.ts` for what a
|
|
120
|
+
* snapshot carries and what it deliberately leaves behind.
|
|
121
|
+
*
|
|
122
|
+
* This reads across several transactions rather than one, so a concurrent commit could move
|
|
123
|
+
* the version underneath it. Hold a `backup` lease (see `../transactions/index.ts`) around
|
|
124
|
+
* the call when that is possible; the offline generators that produce published datasets are
|
|
125
|
+
* the only writer in their process and do not need one.
|
|
126
|
+
*/
|
|
127
|
+
exportSnapshot(): Promise<DatabaseSnapshot>;
|
|
128
|
+
/**
|
|
129
|
+
* Loads a snapshot into this store, which must be empty. Block payloads go in batched
|
|
130
|
+
* transactions so a large dataset does not build one enormous write, and the current-version
|
|
131
|
+
* pointer is written last: until it lands, an interrupted load leaves a store that still reads
|
|
132
|
+
* as empty rather than as half a database.
|
|
133
|
+
*/
|
|
134
|
+
importSnapshot(snapshot: DatabaseSnapshot, options?: {
|
|
135
|
+
onProgress?: (progress: SnapshotLoadProgress) => void;
|
|
136
|
+
}): Promise<void>;
|
|
137
|
+
close(): void;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=indexeddb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/storage/indexeddb.ts"],"names":[],"mappings":"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"}
|