orez-lite 0.9.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/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/browser/generated/sqlite3-browser.wasm +0 -0
- package/dist/browser/generated/sync_wasm.js +922 -0
- package/dist/browser/generated/sync_wasm_bg.wasm +0 -0
- package/dist/browser/host.d.ts +10 -0
- package/dist/browser/host.d.ts.map +1 -0
- package/dist/browser/host.js +496 -0
- package/dist/browser/host.js.map +1 -0
- package/dist/browser/idb-snapshot.d.ts +11 -0
- package/dist/browser/idb-snapshot.d.ts.map +1 -0
- package/dist/browser/idb-snapshot.js +122 -0
- package/dist/browser/idb-snapshot.js.map +1 -0
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +5 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/message-port.d.ts +7 -0
- package/dist/browser/message-port.d.ts.map +1 -0
- package/dist/browser/message-port.js +188 -0
- package/dist/browser/message-port.js.map +1 -0
- package/dist/browser/sqlite-adapter.d.ts +53 -0
- package/dist/browser/sqlite-adapter.d.ts.map +1 -0
- package/dist/browser/sqlite-adapter.js +126 -0
- package/dist/browser/sqlite-adapter.js.map +1 -0
- package/dist/browser/types.d.ts +52 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/cf-deploy/bundle.d.ts +18 -0
- package/dist/cf-deploy/bundle.d.ts.map +1 -0
- package/dist/cf-deploy/bundle.js +273 -0
- package/dist/cf-deploy/bundle.js.map +1 -0
- package/dist/cf-deploy/config.d.ts +12 -0
- package/dist/cf-deploy/config.d.ts.map +1 -0
- package/dist/cf-deploy/config.js +11 -0
- package/dist/cf-deploy/config.js.map +1 -0
- package/dist/cf-deploy/index.d.ts +10 -0
- package/dist/cf-deploy/index.d.ts.map +1 -0
- package/dist/cf-deploy/index.js +12 -0
- package/dist/cf-deploy/index.js.map +1 -0
- package/dist/cf-deploy/leaves.d.ts +8 -0
- package/dist/cf-deploy/leaves.d.ts.map +1 -0
- package/dist/cf-deploy/leaves.js +66 -0
- package/dist/cf-deploy/leaves.js.map +1 -0
- package/dist/cf-deploy/migration.d.ts +27 -0
- package/dist/cf-deploy/migration.d.ts.map +1 -0
- package/dist/cf-deploy/migration.js +734 -0
- package/dist/cf-deploy/migration.js.map +1 -0
- package/dist/cf-deploy/nativeMigrations.d.ts +24 -0
- package/dist/cf-deploy/nativeMigrations.d.ts.map +1 -0
- package/dist/cf-deploy/nativeMigrations.js +185 -0
- package/dist/cf-deploy/nativeMigrations.js.map +1 -0
- package/dist/cf-deploy/prune.d.ts +14 -0
- package/dist/cf-deploy/prune.d.ts.map +1 -0
- package/dist/cf-deploy/prune.js +235 -0
- package/dist/cf-deploy/prune.js.map +1 -0
- package/dist/cf-deploy/readiness.d.ts +11 -0
- package/dist/cf-deploy/readiness.d.ts.map +1 -0
- package/dist/cf-deploy/readiness.js +56 -0
- package/dist/cf-deploy/readiness.js.map +1 -0
- package/dist/cf-deploy/sources.d.ts +3 -0
- package/dist/cf-deploy/sources.d.ts.map +1 -0
- package/dist/cf-deploy/sources.js +24 -0
- package/dist/cf-deploy/sources.js.map +1 -0
- package/dist/cf-deploy/wrangler.d.ts +9 -0
- package/dist/cf-deploy/wrangler.d.ts.map +1 -0
- package/dist/cf-deploy/wrangler.js +48 -0
- package/dist/cf-deploy/wrangler.js.map +1 -0
- package/dist/cf-do/application-sql.d.ts +49 -0
- package/dist/cf-do/application-sql.d.ts.map +1 -0
- package/dist/cf-do/application-sql.js +124 -0
- package/dist/cf-do/application-sql.js.map +1 -0
- package/dist/cf-do/cdc.d.ts +155 -0
- package/dist/cf-do/cdc.d.ts.map +1 -0
- package/dist/cf-do/cdc.js +723 -0
- package/dist/cf-do/cdc.js.map +1 -0
- package/dist/cf-do/cursor-pull.d.ts +27 -0
- package/dist/cf-do/cursor-pull.d.ts.map +1 -0
- package/dist/cf-do/cursor-pull.js +78 -0
- package/dist/cf-do/cursor-pull.js.map +1 -0
- package/dist/cf-do/lite-data-worker.d.ts +171 -0
- package/dist/cf-do/lite-data-worker.d.ts.map +1 -0
- package/dist/cf-do/lite-data-worker.js +685 -0
- package/dist/cf-do/lite-data-worker.js.map +1 -0
- package/dist/cf-do/namespace-backup.d.ts +85 -0
- package/dist/cf-do/namespace-backup.d.ts.map +1 -0
- package/dist/cf-do/namespace-backup.js +470 -0
- package/dist/cf-do/namespace-backup.js.map +1 -0
- package/dist/cf-do/row-undo.d.ts +36 -0
- package/dist/cf-do/row-undo.d.ts.map +1 -0
- package/dist/cf-do/row-undo.js +221 -0
- package/dist/cf-do/row-undo.js.map +1 -0
- package/dist/cf-do/tx-journal.d.ts +118 -0
- package/dist/cf-do/tx-journal.d.ts.map +1 -0
- package/dist/cf-do/tx-journal.js +717 -0
- package/dist/cf-do/tx-journal.js.map +1 -0
- package/dist/cf-do/watermark.d.ts +29 -0
- package/dist/cf-do/watermark.d.ts.map +1 -0
- package/dist/cf-do/watermark.js +105 -0
- package/dist/cf-do/watermark.js.map +1 -0
- package/dist/cf-do/worker.d.ts +282 -0
- package/dist/cf-do/worker.d.ts.map +1 -0
- package/dist/cf-do/worker.js +1999 -0
- package/dist/cf-do/worker.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -0
- package/dist/cloudflare-build.d.ts +9 -0
- package/dist/cloudflare-build.d.ts.map +1 -0
- package/dist/cloudflare-build.js +9 -0
- package/dist/cloudflare-build.js.map +1 -0
- package/dist/cloudflare-bun-wasm-loader.d.ts +2 -0
- package/dist/cloudflare-bun-wasm-loader.d.ts.map +1 -0
- package/dist/cloudflare-bun-wasm-loader.js +2 -0
- package/dist/cloudflare-bun-wasm-loader.js.map +1 -0
- package/dist/cloudflare-query-compiler.d.ts +2 -0
- package/dist/cloudflare-query-compiler.d.ts.map +1 -0
- package/dist/cloudflare-query-compiler.js +2 -0
- package/dist/cloudflare-query-compiler.js.map +1 -0
- package/dist/cloudflare-runtime.d.ts +15 -0
- package/dist/cloudflare-runtime.d.ts.map +1 -0
- package/dist/cloudflare-runtime.js +11 -0
- package/dist/cloudflare-runtime.js.map +1 -0
- package/dist/cloudflare-sync.d.ts +3 -0
- package/dist/cloudflare-sync.d.ts.map +1 -0
- package/dist/cloudflare-sync.js +3 -0
- package/dist/cloudflare-sync.js.map +1 -0
- package/dist/cloudflare-transaction-query.d.ts +2 -0
- package/dist/cloudflare-transaction-query.d.ts.map +1 -0
- package/dist/cloudflare-transaction-query.js +2 -0
- package/dist/cloudflare-transaction-query.js.map +1 -0
- package/dist/cloudflare-vite-wasm-loader.d.ts +2 -0
- package/dist/cloudflare-vite-wasm-loader.d.ts.map +1 -0
- package/dist/cloudflare-vite-wasm-loader.js +2 -0
- package/dist/cloudflare-vite-wasm-loader.js.map +1 -0
- package/dist/cloudflare.d.ts +3 -0
- package/dist/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare.js +3 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/do-sql-tracking.d.ts +114 -0
- package/dist/do-sql-tracking.d.ts.map +1 -0
- package/dist/do-sql-tracking.js +280 -0
- package/dist/do-sql-tracking.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/wake.d.ts +22 -0
- package/dist/wake.d.ts.map +1 -0
- package/dist/wake.js +114 -0
- package/dist/wake.js.map +1 -0
- package/dist/worker/cf-do-shim.d.ts +53 -0
- package/dist/worker/cf-do-shim.d.ts.map +1 -0
- package/dist/worker/cf-do-shim.js +66 -0
- package/dist/worker/cf-do-shim.js.map +1 -0
- package/dist/zero-http/encrypted-column-codec.d.ts +46 -0
- package/dist/zero-http/encrypted-column-codec.d.ts.map +1 -0
- package/dist/zero-http/encrypted-column-codec.js +676 -0
- package/dist/zero-http/encrypted-column-codec.js.map +1 -0
- package/dist/zero-http/encrypted-column-conformance.d.ts +7 -0
- package/dist/zero-http/encrypted-column-conformance.d.ts.map +1 -0
- package/dist/zero-http/encrypted-column-conformance.js +161 -0
- package/dist/zero-http/encrypted-column-conformance.js.map +1 -0
- package/dist/zero-http/fixture-schema.d.ts +127 -0
- package/dist/zero-http/fixture-schema.d.ts.map +1 -0
- package/dist/zero-http/fixture-schema.js +56 -0
- package/dist/zero-http/fixture-schema.js.map +1 -0
- package/dist/zero-http/mount.d.ts +71 -0
- package/dist/zero-http/mount.d.ts.map +1 -0
- package/dist/zero-http/mount.js +594 -0
- package/dist/zero-http/mount.js.map +1 -0
- package/dist/zero-http/payload-codec.d.ts +91 -0
- package/dist/zero-http/payload-codec.d.ts.map +1 -0
- package/dist/zero-http/payload-codec.js +10 -0
- package/dist/zero-http/payload-codec.js.map +1 -0
- package/dist/zero-http/server.d.ts +16 -0
- package/dist/zero-http/server.d.ts.map +1 -0
- package/dist/zero-http/server.js +270 -0
- package/dist/zero-http/server.js.map +1 -0
- package/dist/zero-http/test-harness.d.ts +32 -0
- package/dist/zero-http/test-harness.d.ts.map +1 -0
- package/dist/zero-http/test-harness.js +77 -0
- package/dist/zero-http/test-harness.js.map +1 -0
- package/dist/zero-http/transport.d.ts +71 -0
- package/dist/zero-http/transport.d.ts.map +1 -0
- package/dist/zero-http/transport.js +1106 -0
- package/dist/zero-http/transport.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespace-backup.js","sourceRoot":"","sources":["../../src/cf-do/namespace-backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type JournalRecord } from './cdc.js';
|
|
2
|
+
import type { DurableSqlStorage } from './watermark.js';
|
|
3
|
+
export declare const PENDING_CHANGES_TABLE = "_zero_pending_changes";
|
|
4
|
+
type Op = 'INSERT' | 'UPDATE' | 'DELETE';
|
|
5
|
+
export declare function ensurePendingChangesTable(sql: DurableSqlStorage): void;
|
|
6
|
+
export declare function appendPendingChange(sql: DurableSqlStorage, change: {
|
|
7
|
+
transactionID: string;
|
|
8
|
+
physicalTableName?: string;
|
|
9
|
+
tableName: string;
|
|
10
|
+
publish?: boolean;
|
|
11
|
+
op: Op;
|
|
12
|
+
rowData: Record<string, unknown> | null;
|
|
13
|
+
oldData: Record<string, unknown> | null;
|
|
14
|
+
/**
|
|
15
|
+
* Present only for CDC-captured writes. Their absence means the row is
|
|
16
|
+
* published to the changefeed but rolled back by a table snapshot, so undo
|
|
17
|
+
* must skip it.
|
|
18
|
+
*/
|
|
19
|
+
rowJournal?: JournalRecord | null;
|
|
20
|
+
oldJournal?: JournalRecord | null;
|
|
21
|
+
newRowid?: string | null;
|
|
22
|
+
oldRowid?: string | null;
|
|
23
|
+
undoable: boolean;
|
|
24
|
+
}): void;
|
|
25
|
+
/**
|
|
26
|
+
* Restore row before-images in reverse statement order. Must run atomically.
|
|
27
|
+
*
|
|
28
|
+
* Every trigger on the touched tables is detached for the duration, business
|
|
29
|
+
* triggers included: a restore replays the inverse DML, and letting the table's
|
|
30
|
+
* own triggers fire on it would write side effects the original transaction
|
|
31
|
+
* never made.
|
|
32
|
+
*/
|
|
33
|
+
export declare function rollbackPendingChanges(sql: DurableSqlStorage, transactionID: string): number;
|
|
34
|
+
export declare function deletePendingChanges(sql: DurableSqlStorage, transactionID: string): number;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=row-undo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"row-undo.d.ts","sourceRoot":"","sources":["../../src/cf-do/row-undo.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,EAEnB,MAAM,UAAU,CAAA;AAGjB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,eAAO,MAAM,qBAAqB,0BAA0B,CAAA;AAE5D,KAAK,EAAE,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAMxC,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CA6CtE;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE;IACN,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,EAAE,EAAE,EAAE,CAAA;IACN,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACvC;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IACjC,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,OAAO,CAAA;CAClB,GACA,IAAI,CAmBN;AAyED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,CA6HR;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,iBAAiB,EACtB,aAAa,EAAE,MAAM,GACpB,MAAM,CAQR"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { journalValueSqlBinding, parseJournalRecord, restoreTriggers, suspendTriggers, tableIdentity, } from './cdc.js';
|
|
2
|
+
import { schemaRestoreOwnsTable } from './tx-journal.js';
|
|
3
|
+
export const PENDING_CHANGES_TABLE = '_zero_pending_changes';
|
|
4
|
+
function quoteIdent(name) {
|
|
5
|
+
return `"${name.replace(/"/g, '""')}"`;
|
|
6
|
+
}
|
|
7
|
+
export function ensurePendingChangesTable(sql) {
|
|
8
|
+
sql.exec(`CREATE TABLE IF NOT EXISTS ${PENDING_CHANGES_TABLE} (` +
|
|
9
|
+
'id INTEGER PRIMARY KEY AUTOINCREMENT, ' +
|
|
10
|
+
'transaction_id TEXT NOT NULL, ' +
|
|
11
|
+
'physical_table_name TEXT, ' +
|
|
12
|
+
'table_name TEXT NOT NULL, ' +
|
|
13
|
+
'publish INTEGER NOT NULL DEFAULT 1, ' +
|
|
14
|
+
"op TEXT NOT NULL CHECK (op IN ('INSERT', 'UPDATE', 'DELETE')), " +
|
|
15
|
+
'row_data TEXT, ' +
|
|
16
|
+
'old_data TEXT, ' +
|
|
17
|
+
'row_journal TEXT, ' +
|
|
18
|
+
'old_journal TEXT, ' +
|
|
19
|
+
'new_rowid TEXT, ' +
|
|
20
|
+
'old_rowid TEXT, ' +
|
|
21
|
+
'undoable INTEGER NOT NULL DEFAULT 0, ' +
|
|
22
|
+
'created_at INTEGER NOT NULL DEFAULT (unixepoch()))');
|
|
23
|
+
const columns = sql
|
|
24
|
+
.exec(`PRAGMA table_info(${PENDING_CHANGES_TABLE})`)
|
|
25
|
+
.toArray()
|
|
26
|
+
.map((column) => String(column.name ?? ''));
|
|
27
|
+
if (!columns.includes('physical_table_name')) {
|
|
28
|
+
sql.exec(`ALTER TABLE ${PENDING_CHANGES_TABLE} ADD COLUMN physical_table_name TEXT`);
|
|
29
|
+
}
|
|
30
|
+
if (!columns.includes('publish')) {
|
|
31
|
+
sql.exec(`ALTER TABLE ${PENDING_CHANGES_TABLE} ADD COLUMN publish INTEGER NOT NULL DEFAULT 1`);
|
|
32
|
+
}
|
|
33
|
+
for (const column of ['row_journal', 'old_journal', 'new_rowid', 'old_rowid']) {
|
|
34
|
+
if (columns.includes(column))
|
|
35
|
+
continue;
|
|
36
|
+
sql.exec(`ALTER TABLE ${PENDING_CHANGES_TABLE} ADD COLUMN ${column} TEXT`);
|
|
37
|
+
}
|
|
38
|
+
if (!columns.includes('undoable')) {
|
|
39
|
+
sql.exec(`ALTER TABLE ${PENDING_CHANGES_TABLE} ADD COLUMN undoable INTEGER NOT NULL DEFAULT 0`);
|
|
40
|
+
// Rows written before the typed journal claimed row-level undo but only
|
|
41
|
+
// carry the lossy Zero wire image, where a blob is indistinguishable from
|
|
42
|
+
// text and an int64 is already rounded. Restoring from that would corrupt
|
|
43
|
+
// the table, so mark them undoable and let rollback fail loudly on them
|
|
44
|
+
// rather than silently revive a wrong value.
|
|
45
|
+
sql.exec(`UPDATE ${PENDING_CHANGES_TABLE} SET undoable = 1`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function appendPendingChange(sql, change) {
|
|
49
|
+
sql.exec(`INSERT INTO ${PENDING_CHANGES_TABLE} ` +
|
|
50
|
+
'(transaction_id, physical_table_name, table_name, publish, op, row_data, old_data, ' +
|
|
51
|
+
'row_journal, old_journal, new_rowid, old_rowid, undoable) ' +
|
|
52
|
+
'VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', change.transactionID, change.physicalTableName || null, change.tableName, change.publish === false ? 0 : 1, change.op, change.rowData ? JSON.stringify(change.rowData) : null, change.oldData ? JSON.stringify(change.oldData) : null, change.rowJournal ? JSON.stringify(change.rowJournal) : null, change.oldJournal ? JSON.stringify(change.oldJournal) : null, change.newRowid ?? null, change.oldRowid ?? null, change.undoable ? 1 : 0);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The WHERE clause that selects exactly the row this change touched.
|
|
56
|
+
*
|
|
57
|
+
* The captured rowid is the strongest identity: it survives primary-key updates
|
|
58
|
+
* and tells two otherwise identical rows of a keyless table apart. WITHOUT ROWID
|
|
59
|
+
* tables have no rowid but always declare a primary key, so they match on that.
|
|
60
|
+
*/
|
|
61
|
+
function identityWhere(identity, journal, rowid, table) {
|
|
62
|
+
if (identity.rowidAlias && rowid !== null) {
|
|
63
|
+
return {
|
|
64
|
+
sql: `${identity.rowidAlias} = CAST(? AS INTEGER)`,
|
|
65
|
+
params: [rowid],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (identity.keyColumns.length === 0) {
|
|
69
|
+
throw new Error(`cdc undo: ${table} has no stable row identity (no rowid, no primary key)`);
|
|
70
|
+
}
|
|
71
|
+
const clauses = [];
|
|
72
|
+
const params = [];
|
|
73
|
+
for (const column of identity.keyColumns) {
|
|
74
|
+
const encoded = journal?.[column];
|
|
75
|
+
if (encoded === undefined) {
|
|
76
|
+
throw new Error(`cdc undo: ${table} before-image is missing key column ${column}`);
|
|
77
|
+
}
|
|
78
|
+
const binding = journalValueSqlBinding(encoded);
|
|
79
|
+
clauses.push(`${quoteIdent(column)} IS ${binding.expr}`);
|
|
80
|
+
params.push(...binding.params);
|
|
81
|
+
}
|
|
82
|
+
return { sql: clauses.join(' AND '), params };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Run one undo statement and assert it moved exactly one row. A rollback that
|
|
86
|
+
* silently touches zero rows (already gone) or several (a keyless duplicate
|
|
87
|
+
* matched by value) has corrupted the table, so fail the storage transaction
|
|
88
|
+
* instead of leaving the damage behind.
|
|
89
|
+
*/
|
|
90
|
+
function execExactlyOneRow(sql, statement, params, context) {
|
|
91
|
+
const affected = sql.exec(`${statement} RETURNING 1 AS ok`, ...params).toArray().length;
|
|
92
|
+
if (affected !== 1) {
|
|
93
|
+
throw new Error(`cdc undo: ${context} matched ${affected} rows, expected exactly 1`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function requireCompleteImage(journal, identity, table, label) {
|
|
97
|
+
if (!journal)
|
|
98
|
+
throw new Error(`cdc undo: ${table} has no ${label}`);
|
|
99
|
+
const missing = identity.columns.filter((column) => journal[column] === undefined);
|
|
100
|
+
if (missing.length > 0) {
|
|
101
|
+
throw new Error(`cdc undo: ${table} ${label} is missing column(s): ${missing.join(', ')}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Restore row before-images in reverse statement order. Must run atomically.
|
|
106
|
+
*
|
|
107
|
+
* Every trigger on the touched tables is detached for the duration, business
|
|
108
|
+
* triggers included: a restore replays the inverse DML, and letting the table's
|
|
109
|
+
* own triggers fire on it would write side effects the original transaction
|
|
110
|
+
* never made.
|
|
111
|
+
*/
|
|
112
|
+
export function rollbackPendingChanges(sql, transactionID) {
|
|
113
|
+
ensurePendingChangesTable(sql);
|
|
114
|
+
const rows = sql
|
|
115
|
+
.exec(`SELECT physical_table_name, op, row_journal, old_journal, new_rowid, old_rowid
|
|
116
|
+
FROM ${PENDING_CHANGES_TABLE}
|
|
117
|
+
WHERE transaction_id = ? AND physical_table_name IS NOT NULL AND undoable != 0
|
|
118
|
+
ORDER BY id DESC`, transactionID)
|
|
119
|
+
.toArray();
|
|
120
|
+
const tables = rows.map((row) => String(row.physical_table_name ?? '')).filter(Boolean);
|
|
121
|
+
const suspended = suspendTriggers(sql, tables);
|
|
122
|
+
const identities = new Map();
|
|
123
|
+
const schemaOwned = new Map();
|
|
124
|
+
try {
|
|
125
|
+
for (const row of rows) {
|
|
126
|
+
const table = String(row.physical_table_name);
|
|
127
|
+
const op = String(row.op);
|
|
128
|
+
const next = parseJournalRecord(row.row_journal);
|
|
129
|
+
const old = parseJournalRecord(row.old_journal);
|
|
130
|
+
const newRowid = row.new_rowid == null ? null : String(row.new_rowid);
|
|
131
|
+
const oldRowid = row.old_rowid == null ? null : String(row.old_rowid);
|
|
132
|
+
// a table created, dropped, or rebuilt by in-tx transactional DDL needs
|
|
133
|
+
// no row undo: the schema rollback (restoreSchemaSnapshot) rebuilds it
|
|
134
|
+
// wholesale from its pre-tx snapshot, and undoing rows against a
|
|
135
|
+
// dropped or reshaped table throws (which used to wedge recovery — and
|
|
136
|
+
// the namespace — permanently).
|
|
137
|
+
if (!schemaOwned.has(table)) {
|
|
138
|
+
schemaOwned.set(table, schemaRestoreOwnsTable(sql, transactionID, table));
|
|
139
|
+
}
|
|
140
|
+
if (schemaOwned.get(table))
|
|
141
|
+
continue;
|
|
142
|
+
if (!identities.has(table))
|
|
143
|
+
identities.set(table, tableIdentity(sql, table));
|
|
144
|
+
const identity = identities.get(table);
|
|
145
|
+
if (!identity) {
|
|
146
|
+
throw new Error(`cdc undo: ${table} has no stable row identity, so its rows cannot be restored`);
|
|
147
|
+
}
|
|
148
|
+
// Every undoable row is written with its before-image in the same SQLite
|
|
149
|
+
// statement as the write itself. A missing one means the row predates the
|
|
150
|
+
// typed journal, and its lossy wire image would restore the wrong value.
|
|
151
|
+
// Fail the whole rollback rather than let a write survive it.
|
|
152
|
+
if ((op === 'INSERT' && !next && newRowid === null) || (op !== 'INSERT' && !old)) {
|
|
153
|
+
throw new Error(`cdc undo: ${op} on ${table} has no usable before-image, so the transaction ` +
|
|
154
|
+
`cannot be rolled back (pending row predates the typed journal)`);
|
|
155
|
+
}
|
|
156
|
+
if (op === 'INSERT' || op === 'UPDATE') {
|
|
157
|
+
requireCompleteImage(next, identity, table, 'new image');
|
|
158
|
+
}
|
|
159
|
+
if (op === 'DELETE' || op === 'UPDATE') {
|
|
160
|
+
requireCompleteImage(old, identity, table, 'old image');
|
|
161
|
+
}
|
|
162
|
+
if (op === 'INSERT') {
|
|
163
|
+
const where = identityWhere(identity, next, newRowid, table);
|
|
164
|
+
execExactlyOneRow(sql, `DELETE FROM ${quoteIdent(table)} WHERE ${where.sql}`, where.params, `INSERT undo on ${table}`);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (op === 'DELETE') {
|
|
168
|
+
const oldImage = old;
|
|
169
|
+
const columns = [];
|
|
170
|
+
const values = [];
|
|
171
|
+
const params = [];
|
|
172
|
+
for (const column of identity.writableColumns) {
|
|
173
|
+
const encoded = oldImage[column];
|
|
174
|
+
const binding = journalValueSqlBinding(encoded);
|
|
175
|
+
columns.push(quoteIdent(column));
|
|
176
|
+
values.push(binding.expr);
|
|
177
|
+
params.push(...binding.params);
|
|
178
|
+
}
|
|
179
|
+
// Restore the original rowid too, so any earlier change in this
|
|
180
|
+
// transaction that identified a row by rowid still resolves. When the
|
|
181
|
+
// table has an INTEGER PRIMARY KEY that column already is the rowid.
|
|
182
|
+
if (identity.rowidAlias && !identity.rowidColumn && oldRowid !== null) {
|
|
183
|
+
columns.push(identity.rowidAlias);
|
|
184
|
+
values.push('CAST(? AS INTEGER)');
|
|
185
|
+
params.push(oldRowid);
|
|
186
|
+
}
|
|
187
|
+
if (columns.length === 0) {
|
|
188
|
+
throw new Error(`cdc undo: DELETE on ${table} has no writable columns`);
|
|
189
|
+
}
|
|
190
|
+
execExactlyOneRow(sql, `INSERT INTO ${quoteIdent(table)} (${columns.join(', ')}) VALUES (${values.join(', ')})`, params, `DELETE undo on ${table}`);
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
const assignments = [];
|
|
194
|
+
const params = [];
|
|
195
|
+
const oldImage = old;
|
|
196
|
+
for (const column of identity.writableColumns) {
|
|
197
|
+
const encoded = oldImage[column];
|
|
198
|
+
const binding = journalValueSqlBinding(encoded);
|
|
199
|
+
assignments.push(`${quoteIdent(column)} = ${binding.expr}`);
|
|
200
|
+
params.push(...binding.params);
|
|
201
|
+
}
|
|
202
|
+
if (assignments.length === 0) {
|
|
203
|
+
throw new Error(`cdc undo: UPDATE on ${table} has no writable columns`);
|
|
204
|
+
}
|
|
205
|
+
const where = identityWhere(identity, next, newRowid, table);
|
|
206
|
+
params.push(...where.params);
|
|
207
|
+
execExactlyOneRow(sql, `UPDATE ${quoteIdent(table)} SET ${assignments.join(', ')} WHERE ${where.sql}`, params, `UPDATE undo on ${table}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
restoreTriggers(sql, suspended);
|
|
212
|
+
}
|
|
213
|
+
return rows.length;
|
|
214
|
+
}
|
|
215
|
+
export function deletePendingChanges(sql, transactionID) {
|
|
216
|
+
ensurePendingChangesTable(sql);
|
|
217
|
+
return sql
|
|
218
|
+
.exec(`DELETE FROM ${PENDING_CHANGES_TABLE} WHERE transaction_id = ? RETURNING 1 AS deleted`, transactionID)
|
|
219
|
+
.toArray().length;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=row-undo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"row-undo.js","sourceRoot":"","sources":["../../src/cf-do/row-undo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* durable transaction journal for the DO SQL backend.
|
|
3
|
+
*
|
|
4
|
+
* Durable Object RPC transactions apply writes eagerly. Parsed DML is rolled back from the
|
|
5
|
+
* CDC row before-images captured by the same SQLite statement; unknown writes
|
|
6
|
+
* fall back to a first-write table snapshot (`_orez_tx_<txID>_*`). Before this
|
|
7
|
+
* journal, the rollback bookkeeping lived only in the client's memory: a DO eviction or
|
|
8
|
+
* deploy upgrade-kill mid-transaction persisted the partial writes forever
|
|
9
|
+
* (the 2026-06 poisoned cdc changeLog incident — zero's catchup replays
|
|
10
|
+
* begin→data→begin and the replicator wedges permanently).
|
|
11
|
+
*
|
|
12
|
+
* the journal makes the snapshot bookkeeping durable and the commit point
|
|
13
|
+
* atomic:
|
|
14
|
+
*
|
|
15
|
+
* - every row-journal marker or fallback snapshot is recorded in
|
|
16
|
+
* `_orez_tx_manifest` atomically with its rollback state.
|
|
17
|
+
* - COMMIT = one atomic storage transaction that drops rollback state and
|
|
18
|
+
* deletes the manifest rows (plus promoting pending tracked changes in
|
|
19
|
+
* ZeroDO). a tx is committed if and only if its manifest rows are gone.
|
|
20
|
+
* - ROLLBACK = one atomic storage transaction that restores row before-images
|
|
21
|
+
* plus any fallback table snapshots (in reverse order).
|
|
22
|
+
* - RECOVERY (`recoverTxJournal`) rolls back every manifest tx for an
|
|
23
|
+
* owner whose process generation is known dead (e.g. the zero-cache
|
|
24
|
+
* embed at boot, before it opens any pg session), so a partial tx is
|
|
25
|
+
* invisible on the next boot.
|
|
26
|
+
*
|
|
27
|
+
* all functions are synchronous over a minimal sql-exec interface so the
|
|
28
|
+
* same core runs inside ZeroDO's ctx.storage.transaction() and inside the
|
|
29
|
+
* embed-local backend's transactionSync().
|
|
30
|
+
*/
|
|
31
|
+
import type { DurableSqlStorage } from './watermark.js';
|
|
32
|
+
export declare const TX_MANIFEST_TABLE = "_orez_tx_manifest";
|
|
33
|
+
export declare const TX_SCHEMA_TABLE = "_orez_tx_schema";
|
|
34
|
+
export declare const TX_MANIFEST_DDL: string;
|
|
35
|
+
export declare const TX_SCHEMA_DDL: string;
|
|
36
|
+
/**
|
|
37
|
+
* true when restoreSchemaSnapshot will rebuild `table` during the rollback of
|
|
38
|
+
* `txID`: the tx recorded a transactional-DDL schema marker and the table was
|
|
39
|
+
* created, dropped, or DDL-changed since the schema snapshot. row-level undo
|
|
40
|
+
* consults this to skip such tables — their pre-tx content comes back
|
|
41
|
+
* wholesale from the table snapshot, and undoing rows against a dropped or
|
|
42
|
+
* rebuilt table either throws or targets the wrong shape. before this,
|
|
43
|
+
* recovery of a tx killed mid table rebuild threw on every boot and wedged
|
|
44
|
+
* the namespace permanently (2026-07-24 prod fresh-project incident).
|
|
45
|
+
*/
|
|
46
|
+
export declare function schemaRestoreOwnsTable(sql: DurableSqlStorage, txID: string, table: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Capture the application schema before the first DDL statement and the data
|
|
49
|
+
* of each table that a later DDL statement can destructively change. SQLite
|
|
50
|
+
* can transact DDL, but the DO protocol spans requests, so rollback needs an
|
|
51
|
+
* explicit durable image. The caller must wrap this in one storage transaction.
|
|
52
|
+
*/
|
|
53
|
+
export declare function snapshotTxSchema(sql: DurableSqlStorage, txID: string, owner?: string, affectedTables?: string[]): void;
|
|
54
|
+
/** persist one cheap recovery marker only when a transaction first mutates data. */
|
|
55
|
+
export declare function beginTxJournal(sql: DurableSqlStorage, txID: string, owner?: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* commit a journaled transaction: drop its snapshot tables and delete its
|
|
58
|
+
* manifest rows. the data writes were applied eagerly during the tx, so once
|
|
59
|
+
* the manifest rows are gone the tx is durably committed. must run inside an
|
|
60
|
+
* atomic storage transaction.
|
|
61
|
+
*/
|
|
62
|
+
export declare function commitTxJournal(sql: DurableSqlStorage, txID: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* roll back a journaled transaction: restore every snapshotted table to its
|
|
65
|
+
* pre-tx contents (parents before children), drop tables that did not exist at
|
|
66
|
+
* first write (null snapshot), then clean up. triggers on restored tables are
|
|
67
|
+
* detached during the restore and re-created after, so restore DML doesn't
|
|
68
|
+
* re-fire change tracking. must run inside an atomic storage transaction.
|
|
69
|
+
*/
|
|
70
|
+
export declare function rollbackTxJournal(sql: DurableSqlStorage, txID: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Point a transaction's journal entry for `table` at a real table snapshot.
|
|
73
|
+
*
|
|
74
|
+
* The transaction owner marks a parsed write row-journaled (an empty snapshot) before the
|
|
75
|
+
* DO has said whether it can capture that table. When CDC declines it, because
|
|
76
|
+
* the table has no stable row identity, that empty marker promises a row-level
|
|
77
|
+
* rollback nothing is able to perform. The owner therefore copies the table and
|
|
78
|
+
* rewrites the marker in the same storage transaction as the write, which puts
|
|
79
|
+
* the transaction back on the snapshot path recovery already knows how to
|
|
80
|
+
* replay. Safe to call repeatedly: only the first write to a table in a
|
|
81
|
+
* transaction takes the copy.
|
|
82
|
+
*/
|
|
83
|
+
export declare function upgradeToTableSnapshot(sql: DurableSqlStorage, txID: string, table: string, owner?: string): void;
|
|
84
|
+
/** The operation a tracked statement performs on its own table. */
|
|
85
|
+
export type TrackedOperation = 'INSERT' | 'UPDATE' | 'DELETE' | 'UPSERT';
|
|
86
|
+
/**
|
|
87
|
+
* snapshot the source table and the transitive targets of its business
|
|
88
|
+
* triggers and cascading/SET foreign keys. trigger SQL and FK metadata name
|
|
89
|
+
* every table SQLite can mutate implicitly, so copying unrelated published
|
|
90
|
+
* tables only multiplies billable writes during zero-cache startup. if a
|
|
91
|
+
* reachable trigger cannot be understood, retain the conservative all-table
|
|
92
|
+
* fallback.
|
|
93
|
+
*
|
|
94
|
+
* reachability is per (table, operation), because SQLite fires implicit writes
|
|
95
|
+
* per operation: `ON DELETE CASCADE` only fires when the parent row is deleted,
|
|
96
|
+
* and `AFTER DELETE` triggers only fire on a delete. discovering side effects
|
|
97
|
+
* from the table alone made every UPDATE pay for its children's delete
|
|
98
|
+
* cascades. soot's five-second `sootAgent.runtimeClaimExpiresAt` renewal copied
|
|
99
|
+
* the whole `agentEvent` table on each beat purely because `agentEvent`
|
|
100
|
+
* references `sootAgent` `ON DELETE CASCADE`: 35 billable rows with an empty
|
|
101
|
+
* event table, 1,035 with 1,000 retained events, and the rolling write budget
|
|
102
|
+
* tripped from heartbeats alone once the table grew.
|
|
103
|
+
*/
|
|
104
|
+
export declare function snapshotSideEffectWriteTables(sql: DurableSqlStorage, txID: string, sourceTable: string, operation: TrackedOperation): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* roll back every journaled transaction belonging to `owner` (or every
|
|
107
|
+
* transaction when owner is undefined), and sweep `_orez_tx_*` snapshot
|
|
108
|
+
* tables no manifest row references (leftovers from pre-journal code).
|
|
109
|
+
*
|
|
110
|
+
* callers must guarantee none of the matched transactions can still be live
|
|
111
|
+
* — i.e. the owning process generation is dead (embed boot before opening pg
|
|
112
|
+
* sessions, or a store whose only client lives in the same isolate).
|
|
113
|
+
*
|
|
114
|
+
* returns the recovered transaction ids so callers can clean up associated
|
|
115
|
+
* state (e.g. pending tracked changes).
|
|
116
|
+
*/
|
|
117
|
+
export declare function recoverTxJournal(sql: DurableSqlStorage, owner?: string, beforeRollback?: (txID: string) => void): string[];
|
|
118
|
+
//# sourceMappingURL=tx-journal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx-journal.d.ts","sourceRoot":"","sources":["../../src/cf-do/tx-journal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,eAAO,MAAM,iBAAiB,sBAAsB,CAAA;AACpD,eAAO,MAAM,eAAe,oBAAoB,CAAA;AAEhD,eAAO,MAAM,eAAe,QAMV,CAAA;AAElB,eAAO,MAAM,aAAa,QAQb,CAAA;AAsJb;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAoBT;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAY,EACjB,cAAc,GAAE,MAAM,EAAO,GAC5B,IAAI,CAuDN;AAyDD,oFAAoF;AACpF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAY,GAChB,IAAI,CAUN;AAkKD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAU1E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgE5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,SAAY,GAChB,IAAI,CAuCN;AAmCD,mEAAmE;AACnE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAmBxE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAiHT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,iBAAiB,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACtC,MAAM,EAAE,CA8CV"}
|