orez 0.1.36 → 0.1.37
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/cli-entry.js +0 -0
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -11
- package/dist/index.js.map +1 -1
- package/dist/pg-proxy.d.ts.map +1 -1
- package/dist/pg-proxy.js +8 -4
- package/dist/pg-proxy.js.map +1 -1
- package/dist/pglite-manager.d.ts +12 -0
- package/dist/pglite-manager.d.ts.map +1 -1
- package/dist/pglite-manager.js +81 -0
- package/dist/pglite-manager.js.map +1 -1
- package/dist/recovery.js +2 -2
- package/dist/recovery.js.map +1 -1
- package/dist/replication/change-tracker.js +9 -9
- package/dist/replication/change-tracker.js.map +1 -1
- package/dist/replication/handler.d.ts +12 -0
- package/dist/replication/handler.d.ts.map +1 -1
- package/dist/replication/handler.js +32 -4
- package/dist/replication/handler.js.map +1 -1
- package/dist/worker/browser-build-config.d.ts +59 -0
- package/dist/worker/browser-build-config.d.ts.map +1 -0
- package/dist/worker/browser-build-config.js +101 -0
- package/dist/worker/browser-build-config.js.map +1 -0
- package/dist/worker/browser-embed.d.ts +58 -0
- package/dist/worker/browser-embed.d.ts.map +1 -0
- package/dist/worker/browser-embed.js +195 -0
- package/dist/worker/browser-embed.js.map +1 -0
- package/dist/worker/cf-patches.d.ts +20 -0
- package/dist/worker/cf-patches.d.ts.map +1 -0
- package/dist/worker/cf-patches.js +94 -0
- package/dist/worker/cf-patches.js.map +1 -0
- package/dist/worker/index.d.ts +12 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +105 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/shims/fastify.d.ts +80 -0
- package/dist/worker/shims/fastify.d.ts.map +1 -0
- package/dist/worker/shims/fastify.js +223 -0
- package/dist/worker/shims/fastify.js.map +1 -0
- package/dist/worker/shims/http-service.d.ts +104 -0
- package/dist/worker/shims/http-service.d.ts.map +1 -0
- package/dist/worker/shims/http-service.js +198 -0
- package/dist/worker/shims/http-service.js.map +1 -0
- package/dist/worker/shims/node-stub.d.ts +147 -0
- package/dist/worker/shims/node-stub.d.ts.map +1 -0
- package/dist/worker/shims/node-stub.js +204 -0
- package/dist/worker/shims/node-stub.js.map +1 -0
- package/dist/worker/shims/postgres.d.ts +115 -0
- package/dist/worker/shims/postgres.d.ts.map +1 -0
- package/dist/worker/shims/postgres.js +1167 -0
- package/dist/worker/shims/postgres.js.map +1 -0
- package/dist/worker/shims/sqlite-browser.d.ts +54 -0
- package/dist/worker/shims/sqlite-browser.d.ts.map +1 -0
- package/dist/worker/shims/sqlite-browser.js +144 -0
- package/dist/worker/shims/sqlite-browser.js.map +1 -0
- package/dist/worker/shims/sqlite.d.ts +126 -0
- package/dist/worker/shims/sqlite.d.ts.map +1 -0
- package/dist/worker/shims/sqlite.js +599 -0
- package/dist/worker/shims/sqlite.js.map +1 -0
- package/dist/worker/shims/stream-browser.d.ts +9 -0
- package/dist/worker/shims/stream-browser.d.ts.map +1 -0
- package/dist/worker/shims/stream-browser.js +13 -0
- package/dist/worker/shims/stream-browser.js.map +1 -0
- package/dist/worker/shims/ws-browser.d.ts +50 -0
- package/dist/worker/shims/ws-browser.d.ts.map +1 -0
- package/dist/worker/shims/ws-browser.js +105 -0
- package/dist/worker/shims/ws-browser.js.map +1 -0
- package/dist/worker/shims/ws.d.ts +62 -0
- package/dist/worker/shims/ws.d.ts.map +1 -0
- package/dist/worker/shims/ws.js +310 -0
- package/dist/worker/shims/ws.js.map +1 -0
- package/dist/worker/types.d.ts +57 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +9 -0
- package/dist/worker/types.js.map +1 -0
- package/dist/worker/zero-cache-embed-cf.d.ts +63 -0
- package/dist/worker/zero-cache-embed-cf.d.ts.map +1 -0
- package/dist/worker/zero-cache-embed-cf.js +268 -0
- package/dist/worker/zero-cache-embed-cf.js.map +1 -0
- package/dist/worker/zero-cache-embed.d.ts +66 -0
- package/dist/worker/zero-cache-embed.d.ts.map +1 -0
- package/dist/worker/zero-cache-embed.js +200 -0
- package/dist/worker/zero-cache-embed.js.map +1 -0
- package/package.json +62 -3
- package/src/cli-entry.ts +0 -0
- package/src/cli.ts +8 -1
- package/src/config.ts +2 -0
- package/src/index.ts +15 -10
- package/src/integration/integration.test.ts +1 -1
- package/src/integration/restore-live-stress.test.ts +2 -2
- package/src/pg-proxy.ts +9 -4
- package/src/pglite-manager.ts +111 -0
- package/src/recovery.ts +2 -2
- package/src/replication/change-tracker.test.ts +1 -1
- package/src/replication/change-tracker.ts +9 -9
- package/src/replication/handler.test.ts +37 -0
- package/src/replication/handler.ts +46 -4
- package/src/wasm-sqlite.test.ts +2 -1
- package/src/worker/browser-build-config.test.ts +59 -0
- package/src/worker/browser-build-config.ts +105 -0
- package/src/worker/browser-embed.ts +306 -0
- package/src/worker/cf-patches.ts +114 -0
- package/src/worker/embed-integration.test.ts +321 -0
- package/src/worker/index.ts +138 -0
- package/src/worker/shims/fastify.test.ts +255 -0
- package/src/worker/shims/fastify.ts +292 -0
- package/src/worker/shims/http-service.test.ts +355 -0
- package/src/worker/shims/http-service.ts +293 -0
- package/src/worker/shims/node-stub.ts +223 -0
- package/src/worker/shims/postgres.test.ts +364 -0
- package/src/worker/shims/postgres.ts +1419 -0
- package/src/worker/shims/sqlite-browser.test.ts +233 -0
- package/src/worker/shims/sqlite-browser.ts +178 -0
- package/src/worker/shims/sqlite.test.ts +641 -0
- package/src/worker/shims/sqlite.ts +731 -0
- package/src/worker/shims/ws-browser.test.ts +184 -0
- package/src/worker/shims/ws-browser.ts +125 -0
- package/src/worker/shims/ws.test.ts +288 -0
- package/src/worker/shims/ws.ts +367 -0
- package/src/worker/types.ts +75 -0
- package/src/worker/worker-integration.test.ts +223 -0
- package/src/worker/worker.test.ts +136 -0
- package/src/worker/zero-cache-embed-cf.ts +367 -0
- package/src/worker/zero-cache-embed.ts +277 -0
|
@@ -0,0 +1,599 @@
|
|
|
1
|
+
// NOTE THIS IS NOT OREZ NODE THIS IS NOT A GOOD REFERENCE BECAUSE ITS OUR EARLY GUESS AT WHAT COULD WORK
|
|
2
|
+
// DO NOT STUDY THIS, THE OTHER STUFF IN SRC IS WHERE YOU EANT TO LOOK
|
|
3
|
+
// -- SqliteError --
|
|
4
|
+
export class SqliteError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
constructor(message, code) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'SqliteError';
|
|
9
|
+
this.code = code;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
// -- parameter serialization --
|
|
13
|
+
// sqlite only accepts scalar values; serialize objects/booleans/dates/etc.
|
|
14
|
+
// special case: a single object argument means named parameters (@key syntax)
|
|
15
|
+
// convert named params (@key) in SQL to positional (?) and extract values in order.
|
|
16
|
+
// CF DO SqlStorage doesn't support @key syntax, only ? placeholders.
|
|
17
|
+
function convertNamedParams(sql, params) {
|
|
18
|
+
const values = [];
|
|
19
|
+
// each @param occurrence gets its own ? placeholder and value
|
|
20
|
+
const converted = sql.replace(/@(\w+)/g, (_, name) => {
|
|
21
|
+
values.push(serializeValue(params[name]));
|
|
22
|
+
return '?';
|
|
23
|
+
});
|
|
24
|
+
return { sql: converted, values };
|
|
25
|
+
}
|
|
26
|
+
function serializeValue(p) {
|
|
27
|
+
if (p === null || p === undefined)
|
|
28
|
+
return null;
|
|
29
|
+
if (typeof p === 'string' || typeof p === 'number')
|
|
30
|
+
return p;
|
|
31
|
+
if (typeof p === 'boolean')
|
|
32
|
+
return p ? 1 : 0;
|
|
33
|
+
if (typeof p === 'bigint')
|
|
34
|
+
return Number(p);
|
|
35
|
+
if (p instanceof ArrayBuffer || p instanceof Uint8Array)
|
|
36
|
+
return p;
|
|
37
|
+
if (typeof p === 'object')
|
|
38
|
+
return JSON.stringify(p);
|
|
39
|
+
return String(p);
|
|
40
|
+
}
|
|
41
|
+
function serializeSqliteParams(params) {
|
|
42
|
+
// better-sqlite3 API: stmt.run([val1, val2, ...]) spreads the array
|
|
43
|
+
// as positional parameters. detect this: single array argument.
|
|
44
|
+
if (params.length === 1 && Array.isArray(params[0])) {
|
|
45
|
+
return serializeSqliteParams(params[0]);
|
|
46
|
+
}
|
|
47
|
+
// named parameters: .run({key: value}) → extract values matching @key placeholders
|
|
48
|
+
// handled at the exec level via convertNamedParams, return as marker here
|
|
49
|
+
if (params.length === 1 &&
|
|
50
|
+
params[0] !== null &&
|
|
51
|
+
typeof params[0] === 'object' &&
|
|
52
|
+
!Array.isArray(params[0]) &&
|
|
53
|
+
!(params[0] instanceof ArrayBuffer) &&
|
|
54
|
+
!(params[0] instanceof Uint8Array)) {
|
|
55
|
+
return params; // marker: the Statement methods detect this and convert
|
|
56
|
+
}
|
|
57
|
+
return params.map(serializeValue);
|
|
58
|
+
}
|
|
59
|
+
// -- Statement --
|
|
60
|
+
export class Statement {
|
|
61
|
+
source;
|
|
62
|
+
#sql;
|
|
63
|
+
#db;
|
|
64
|
+
constructor(sql, db, source) {
|
|
65
|
+
this.#sql = sql;
|
|
66
|
+
this.#db = db;
|
|
67
|
+
// auto-add IF NOT EXISTS to CREATE TABLE/INDEX (shared sqlite in browser)
|
|
68
|
+
this.source = source
|
|
69
|
+
.replace(/CREATE\s+TABLE\s+(?!IF\s+NOT\s+EXISTS)/gi, 'CREATE TABLE IF NOT EXISTS ')
|
|
70
|
+
.replace(/CREATE\s+INDEX\s+(?!IF\s+NOT\s+EXISTS)/gi, 'CREATE INDEX IF NOT EXISTS ')
|
|
71
|
+
.replace(/CREATE\s+UNIQUE\s+INDEX\s+(?!IF\s+NOT\s+EXISTS)/gi, 'CREATE UNIQUE INDEX IF NOT EXISTS ');
|
|
72
|
+
}
|
|
73
|
+
// intercept PRAGMAs that sql.js can't handle (wal2, etc.)
|
|
74
|
+
#interceptPragma() {
|
|
75
|
+
const upper = this.source.trimStart().toUpperCase();
|
|
76
|
+
if (!upper.startsWith('PRAGMA'))
|
|
77
|
+
return { intercepted: false };
|
|
78
|
+
// PRAGMA journal_mode — always report wal2 (sql.js doesn't support WAL)
|
|
79
|
+
if (/PRAGMA\s+journal_mode\s*=/i.test(this.source)) {
|
|
80
|
+
const value = this.source.split('=')[1]?.trim().replace(/['"]/g, '') || 'wal2';
|
|
81
|
+
return {
|
|
82
|
+
intercepted: true,
|
|
83
|
+
result: {
|
|
84
|
+
toArray: () => [{ journal_mode: value }],
|
|
85
|
+
rowsRead: 1,
|
|
86
|
+
rowsWritten: 0,
|
|
87
|
+
columnNames: ['journal_mode'],
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (/PRAGMA\s+journal_mode\s*$/i.test(this.source)) {
|
|
92
|
+
return {
|
|
93
|
+
intercepted: true,
|
|
94
|
+
result: {
|
|
95
|
+
toArray: () => [{ journal_mode: 'wal2' }],
|
|
96
|
+
rowsRead: 1,
|
|
97
|
+
rowsWritten: 0,
|
|
98
|
+
columnNames: ['journal_mode'],
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return { intercepted: false };
|
|
103
|
+
}
|
|
104
|
+
// resolve named params (@key) → positional (?), or return sql + values as-is
|
|
105
|
+
#resolveParams(params) {
|
|
106
|
+
const serialized = serializeSqliteParams(params);
|
|
107
|
+
// detect named parameter marker: single non-array object
|
|
108
|
+
const first = serialized[0];
|
|
109
|
+
if (serialized.length === 1 &&
|
|
110
|
+
first !== null &&
|
|
111
|
+
typeof first === 'object' &&
|
|
112
|
+
!Array.isArray(first) &&
|
|
113
|
+
!(first instanceof ArrayBuffer) &&
|
|
114
|
+
!(first instanceof Uint8Array)) {
|
|
115
|
+
return convertNamedParams(this.source, first);
|
|
116
|
+
}
|
|
117
|
+
return { sql: this.source, values: serialized };
|
|
118
|
+
}
|
|
119
|
+
run(...params) {
|
|
120
|
+
if (!this.#db.open) {
|
|
121
|
+
throw new SqliteError('The database connection is not open', 'SQLITE_MISUSE');
|
|
122
|
+
}
|
|
123
|
+
const pragma = this.#interceptPragma();
|
|
124
|
+
if (pragma.intercepted)
|
|
125
|
+
return { changes: 0, lastInsertRowid: 0 };
|
|
126
|
+
const upper = this.source.trimStart().toUpperCase();
|
|
127
|
+
const isTxCmd = upper.startsWith('BEGIN') ||
|
|
128
|
+
upper.startsWith('COMMIT') ||
|
|
129
|
+
upper.startsWith('ROLLBACK') ||
|
|
130
|
+
upper === 'END' ||
|
|
131
|
+
upper.startsWith('END ');
|
|
132
|
+
const { sql, values } = this.#resolveParams(params);
|
|
133
|
+
const cursor = isTxCmd && values.length === 0
|
|
134
|
+
? this.#db._execTransactionAware(sql, this.#sql)
|
|
135
|
+
: this.#sql.exec(sql, ...values);
|
|
136
|
+
return {
|
|
137
|
+
changes: cursor.rowsWritten,
|
|
138
|
+
lastInsertRowid: 0,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
get(...params) {
|
|
142
|
+
if (!this.#db.open) {
|
|
143
|
+
throw new SqliteError('The database connection is not open', 'SQLITE_MISUSE');
|
|
144
|
+
}
|
|
145
|
+
const pragma = this.#interceptPragma();
|
|
146
|
+
if (pragma.intercepted && pragma.result) {
|
|
147
|
+
return pragma.result.toArray()[0];
|
|
148
|
+
}
|
|
149
|
+
const { sql, values } = this.#resolveParams(params);
|
|
150
|
+
const cursor = this.#sql.exec(sql, ...values);
|
|
151
|
+
const rows = cursor.toArray();
|
|
152
|
+
return rows[0] ?? undefined;
|
|
153
|
+
}
|
|
154
|
+
all(...params) {
|
|
155
|
+
if (!this.#db.open) {
|
|
156
|
+
throw new SqliteError('The database connection is not open', 'SQLITE_MISUSE');
|
|
157
|
+
}
|
|
158
|
+
const pragma = this.#interceptPragma();
|
|
159
|
+
if (pragma.intercepted && pragma.result) {
|
|
160
|
+
return pragma.result.toArray();
|
|
161
|
+
}
|
|
162
|
+
const { sql, values } = this.#resolveParams(params);
|
|
163
|
+
const cursor = this.#sql.exec(sql, ...values);
|
|
164
|
+
return cursor.toArray();
|
|
165
|
+
}
|
|
166
|
+
iterate(...params) {
|
|
167
|
+
// eagerly fetch all rows - DO sqlite doesn't support streaming
|
|
168
|
+
const rows = this.all(...params);
|
|
169
|
+
let index = 0;
|
|
170
|
+
return {
|
|
171
|
+
next() {
|
|
172
|
+
if (index < rows.length) {
|
|
173
|
+
return { value: rows[index++], done: false };
|
|
174
|
+
}
|
|
175
|
+
return { value: undefined, done: true };
|
|
176
|
+
},
|
|
177
|
+
[Symbol.iterator]() {
|
|
178
|
+
return this;
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/** no-op for compatibility — DO sqlite doesn't need bigint toggle */
|
|
183
|
+
safeIntegers(_toggle) {
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
/** no-op for compatibility — scan status not available in DO */
|
|
187
|
+
scanStatus() {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
/** no-op for compatibility */
|
|
191
|
+
scanStatusV2() {
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
/** no-op for compatibility */
|
|
195
|
+
scanStatusReset() { }
|
|
196
|
+
/** columns() returns column name metadata */
|
|
197
|
+
columns() {
|
|
198
|
+
// execute a dummy query to get column names
|
|
199
|
+
const cursor = this.#sql.exec(this.source);
|
|
200
|
+
return cursor.columnNames.map((name) => ({
|
|
201
|
+
name,
|
|
202
|
+
column: null,
|
|
203
|
+
table: null,
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// -- Database --
|
|
208
|
+
export class Database {
|
|
209
|
+
name;
|
|
210
|
+
#sql;
|
|
211
|
+
#open;
|
|
212
|
+
#inTransaction;
|
|
213
|
+
constructor(sqlOrFilename, _options) {
|
|
214
|
+
if (typeof sqlOrFilename === 'string') {
|
|
215
|
+
// when used as a bundler alias for @rocicorp/zero-sqlite3,
|
|
216
|
+
// zero-cache passes a file path. look up DO storage from globalThis.
|
|
217
|
+
const storage = globalThis.__orez_do_sqlite;
|
|
218
|
+
if (!storage) {
|
|
219
|
+
throw new SqliteError('sqlite shim: no DO storage on globalThis.__orez_do_sqlite. ' +
|
|
220
|
+
'register DO storage before importing zero-cache.', 'SQLITE_ERROR');
|
|
221
|
+
}
|
|
222
|
+
this.#sql = storage;
|
|
223
|
+
this.name = sqlOrFilename;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this.#sql = sqlOrFilename;
|
|
227
|
+
this.name = ':do-storage:';
|
|
228
|
+
}
|
|
229
|
+
this.#open = true;
|
|
230
|
+
this.#inTransaction = false;
|
|
231
|
+
this.__orez_sql = this.#sql;
|
|
232
|
+
}
|
|
233
|
+
get open() {
|
|
234
|
+
return this.#open;
|
|
235
|
+
}
|
|
236
|
+
get inTransaction() {
|
|
237
|
+
return this.#inTransaction;
|
|
238
|
+
}
|
|
239
|
+
// transaction nesting: converts nested BEGIN to SAVEPOINT
|
|
240
|
+
// uses shared counter on SqlStorageLike to handle multiple Database instances sharing one sql.js db
|
|
241
|
+
//
|
|
242
|
+
// CF DO SQLite rejects raw BEGIN/COMMIT/ROLLBACK/SAVEPOINT statements —
|
|
243
|
+
// it requires state.storage.transactionSync() instead. when transactionSync
|
|
244
|
+
// is available, all transaction control statements become no-ops here.
|
|
245
|
+
// DO handles atomicity via its own write coalescing mechanism.
|
|
246
|
+
_execTransactionAware(sql, sqlStorage) {
|
|
247
|
+
const upper = sql.trimStart().toUpperCase();
|
|
248
|
+
const shared = sqlStorage;
|
|
249
|
+
const noopCursor = {
|
|
250
|
+
toArray: () => [],
|
|
251
|
+
rowsRead: 0,
|
|
252
|
+
rowsWritten: 0,
|
|
253
|
+
columnNames: [],
|
|
254
|
+
};
|
|
255
|
+
// CF DO: all transaction control is no-op (DO coalesces writes automatically)
|
|
256
|
+
if (sqlStorage.transactionSync) {
|
|
257
|
+
if (upper.startsWith('BEGIN')) {
|
|
258
|
+
shared.__txDepth = (shared.__txDepth || 0) + 1;
|
|
259
|
+
this.#inTransaction = true;
|
|
260
|
+
return noopCursor;
|
|
261
|
+
}
|
|
262
|
+
if (upper.startsWith('COMMIT') ||
|
|
263
|
+
upper === 'END' ||
|
|
264
|
+
upper.startsWith('END ') ||
|
|
265
|
+
upper.startsWith('ROLLBACK')) {
|
|
266
|
+
shared.__txDepth = Math.max(0, (shared.__txDepth || 0) - 1);
|
|
267
|
+
if (shared.__txDepth === 0)
|
|
268
|
+
this.#inTransaction = false;
|
|
269
|
+
return noopCursor;
|
|
270
|
+
}
|
|
271
|
+
// non-tx statement inside a "transaction" — just execute normally
|
|
272
|
+
return sqlStorage.exec(sql);
|
|
273
|
+
}
|
|
274
|
+
// non-DO path: real BEGIN/COMMIT/ROLLBACK with SAVEPOINT nesting
|
|
275
|
+
if (upper.startsWith('BEGIN')) {
|
|
276
|
+
shared.__txDepth = (shared.__txDepth || 0) + 1;
|
|
277
|
+
if (shared.__txDepth > 1) {
|
|
278
|
+
return sqlStorage.exec(`SAVEPOINT _nested_${shared.__txDepth}`);
|
|
279
|
+
}
|
|
280
|
+
this.#inTransaction = true;
|
|
281
|
+
return sqlStorage.exec(sql);
|
|
282
|
+
}
|
|
283
|
+
if (upper.startsWith('COMMIT') || upper === 'END' || upper.startsWith('END ')) {
|
|
284
|
+
if ((shared.__txDepth || 0) > 1) {
|
|
285
|
+
const result = sqlStorage.exec(`RELEASE SAVEPOINT _nested_${shared.__txDepth}`);
|
|
286
|
+
shared.__txDepth--;
|
|
287
|
+
return result;
|
|
288
|
+
}
|
|
289
|
+
shared.__txDepth = 0;
|
|
290
|
+
this.#inTransaction = false;
|
|
291
|
+
return sqlStorage.exec(sql);
|
|
292
|
+
}
|
|
293
|
+
if (upper.startsWith('ROLLBACK')) {
|
|
294
|
+
if ((shared.__txDepth || 0) > 1) {
|
|
295
|
+
const result = sqlStorage.exec(`ROLLBACK TO SAVEPOINT _nested_${shared.__txDepth}`);
|
|
296
|
+
shared.__txDepth--;
|
|
297
|
+
return result;
|
|
298
|
+
}
|
|
299
|
+
shared.__txDepth = 0;
|
|
300
|
+
this.#inTransaction = false;
|
|
301
|
+
return sqlStorage.exec(sql);
|
|
302
|
+
}
|
|
303
|
+
return sqlStorage.exec(sql);
|
|
304
|
+
}
|
|
305
|
+
/** prepare a statement */
|
|
306
|
+
prepare(sql) {
|
|
307
|
+
if (!this.#open) {
|
|
308
|
+
throw new SqliteError('The database connection is not open', 'SQLITE_MISUSE');
|
|
309
|
+
}
|
|
310
|
+
return new Statement(this.#sql, this, sql);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* execute pragma statements.
|
|
314
|
+
*
|
|
315
|
+
* DO sqlite supports a subset of pragmas. we handle known ones and
|
|
316
|
+
* return sensible defaults for the rest. the `simple` option returns
|
|
317
|
+
* just the value instead of an array of objects.
|
|
318
|
+
*/
|
|
319
|
+
pragma(source, options) {
|
|
320
|
+
if (!this.#open) {
|
|
321
|
+
throw new SqliteError('The database connection is not open', 'SQLITE_MISUSE');
|
|
322
|
+
}
|
|
323
|
+
const trimmed = source.trim().toLowerCase();
|
|
324
|
+
// skip optimize pragma (not supported / can corrupt)
|
|
325
|
+
if (trimmed.startsWith('optimize')) {
|
|
326
|
+
return options?.simple ? undefined : [];
|
|
327
|
+
}
|
|
328
|
+
// return sensible defaults for pragmas that DO SQLite may not support
|
|
329
|
+
// but that zero-cache's zqlite Database constructor expects
|
|
330
|
+
const pragmaDefaults = {
|
|
331
|
+
page_size: [{ page_size: 4096 }],
|
|
332
|
+
freelist_count: [{ freelist_count: 0 }],
|
|
333
|
+
auto_vacuum: [{ auto_vacuum: 0 }],
|
|
334
|
+
page_count: [{ page_count: 0 }],
|
|
335
|
+
journal_mode: [{ journal_mode: 'wal2' }],
|
|
336
|
+
wal_checkpoint: [{ busy: 0, log: 0, checkpointed: 0 }],
|
|
337
|
+
};
|
|
338
|
+
// parse pragma name and value
|
|
339
|
+
const eqIndex = source.indexOf('=');
|
|
340
|
+
const isSet = eqIndex !== -1;
|
|
341
|
+
if (isSet) {
|
|
342
|
+
// intercept journal_mode set — sql.js doesn't support wal/wal2, fake it
|
|
343
|
+
const pragmaName = source.substring(0, eqIndex).trim().toLowerCase();
|
|
344
|
+
const pragmaValue = source
|
|
345
|
+
.substring(eqIndex + 1)
|
|
346
|
+
.trim()
|
|
347
|
+
.replace(/['"]/g, '');
|
|
348
|
+
if (pragmaName === 'journal_mode') {
|
|
349
|
+
return options?.simple ? pragmaValue : [{ journal_mode: pragmaValue }];
|
|
350
|
+
}
|
|
351
|
+
// setting a pragma - execute it and return result
|
|
352
|
+
try {
|
|
353
|
+
const cursor = this.#sql.exec(`PRAGMA ${source}`);
|
|
354
|
+
const rows = cursor.toArray();
|
|
355
|
+
return options?.simple ? rows[0]?.[Object.keys(rows[0] ?? {})[0]] : rows;
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
// many pragmas are no-ops in DO sqlite - swallow errors
|
|
359
|
+
return options?.simple ? undefined : [];
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// reading a pragma — check defaults first for pragmas we intercept
|
|
363
|
+
const pragmaName = trimmed.split(/[\s(]/)[0];
|
|
364
|
+
const defaultVal = pragmaDefaults[pragmaName];
|
|
365
|
+
if (defaultVal) {
|
|
366
|
+
if (options?.simple) {
|
|
367
|
+
const firstRow = defaultVal[0];
|
|
368
|
+
return firstRow ? firstRow[Object.keys(firstRow)[0]] : undefined;
|
|
369
|
+
}
|
|
370
|
+
return defaultVal;
|
|
371
|
+
}
|
|
372
|
+
// try real execution for unknown pragmas
|
|
373
|
+
try {
|
|
374
|
+
const cursor = this.#sql.exec(`PRAGMA ${source}`);
|
|
375
|
+
const rows = cursor.toArray();
|
|
376
|
+
if (rows.length > 0) {
|
|
377
|
+
if (options?.simple) {
|
|
378
|
+
const firstKey = Object.keys(rows[0])[0];
|
|
379
|
+
return rows[0][firstKey];
|
|
380
|
+
}
|
|
381
|
+
return rows;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
// sql.js may not support this pragma
|
|
386
|
+
}
|
|
387
|
+
if (defaultVal) {
|
|
388
|
+
if (options?.simple) {
|
|
389
|
+
const arr = defaultVal;
|
|
390
|
+
const firstKey = Object.keys(arr[0])[0];
|
|
391
|
+
return arr[0][firstKey];
|
|
392
|
+
}
|
|
393
|
+
return defaultVal;
|
|
394
|
+
}
|
|
395
|
+
return options?.simple ? undefined : [];
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* execute one or more sql statements.
|
|
399
|
+
* does not return results — used for DDL and multi-statement strings.
|
|
400
|
+
*/
|
|
401
|
+
exec(source) {
|
|
402
|
+
if (!this.#open) {
|
|
403
|
+
throw new SqliteError('The database connection is not open', 'SQLITE_MISUSE');
|
|
404
|
+
}
|
|
405
|
+
// split on semicolons to handle multi-statement strings
|
|
406
|
+
// (DO sqlite exec only takes single statements)
|
|
407
|
+
const statements = source
|
|
408
|
+
.split(';')
|
|
409
|
+
.map((s) => s.trim())
|
|
410
|
+
.filter((s) => s.length > 0);
|
|
411
|
+
for (const stmt of statements) {
|
|
412
|
+
// route transaction control through _execTransactionAware
|
|
413
|
+
// so CF DO's transactionSync short-circuit applies
|
|
414
|
+
const upper = stmt.trimStart().toUpperCase();
|
|
415
|
+
const isTxCmd = upper.startsWith('BEGIN') ||
|
|
416
|
+
upper.startsWith('COMMIT') ||
|
|
417
|
+
upper.startsWith('ROLLBACK') ||
|
|
418
|
+
upper === 'END' ||
|
|
419
|
+
upper.startsWith('END ') ||
|
|
420
|
+
upper.startsWith('SAVEPOINT') ||
|
|
421
|
+
upper.startsWith('RELEASE ');
|
|
422
|
+
if (isTxCmd) {
|
|
423
|
+
this._execTransactionAware(stmt, this.#sql);
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
this.#sql.exec(stmt);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
return this;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* create a transaction wrapper function.
|
|
433
|
+
*
|
|
434
|
+
* returns a function that, when called, wraps `fn` in BEGIN/COMMIT.
|
|
435
|
+
* if `fn` throws, issues ROLLBACK instead.
|
|
436
|
+
*
|
|
437
|
+
* the returned function also has `.deferred()`, `.immediate()`, and
|
|
438
|
+
* `.exclusive()` variants.
|
|
439
|
+
*/
|
|
440
|
+
transaction(fn) {
|
|
441
|
+
const self = this;
|
|
442
|
+
const wrapInTransaction = ((...args) => {
|
|
443
|
+
// handle nested transactions — just run fn
|
|
444
|
+
if (self.#inTransaction) {
|
|
445
|
+
return fn(...args);
|
|
446
|
+
}
|
|
447
|
+
// DO SQLite requires transactionSync() — raw BEGIN/COMMIT is rejected.
|
|
448
|
+
// fall back to raw SQL only if transactionSync is unavailable.
|
|
449
|
+
if (self.#sql.transactionSync) {
|
|
450
|
+
return self.#sql.transactionSync(() => {
|
|
451
|
+
self.#inTransaction = true;
|
|
452
|
+
try {
|
|
453
|
+
return fn(...args);
|
|
454
|
+
}
|
|
455
|
+
finally {
|
|
456
|
+
self.#inTransaction = false;
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
// fallback for non-DO environments (tests with bedrock-sqlite)
|
|
461
|
+
self.#sql.exec('BEGIN');
|
|
462
|
+
self.#inTransaction = true;
|
|
463
|
+
try {
|
|
464
|
+
const result = fn(...args);
|
|
465
|
+
self.#sql.exec('COMMIT');
|
|
466
|
+
self.#inTransaction = false;
|
|
467
|
+
return result;
|
|
468
|
+
}
|
|
469
|
+
catch (err) {
|
|
470
|
+
try {
|
|
471
|
+
self.#sql.exec('ROLLBACK');
|
|
472
|
+
}
|
|
473
|
+
catch {
|
|
474
|
+
// swallow rollback errors
|
|
475
|
+
}
|
|
476
|
+
self.#inTransaction = false;
|
|
477
|
+
throw err;
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
// all variants use the same transactionSync wrapper on DO
|
|
481
|
+
const txn = wrapInTransaction;
|
|
482
|
+
txn.deferred = wrapInTransaction;
|
|
483
|
+
txn.immediate = wrapInTransaction;
|
|
484
|
+
txn.exclusive = wrapInTransaction;
|
|
485
|
+
return txn;
|
|
486
|
+
}
|
|
487
|
+
/** close the database connection */
|
|
488
|
+
close() {
|
|
489
|
+
this.#open = false;
|
|
490
|
+
return this;
|
|
491
|
+
}
|
|
492
|
+
/** no-op for compatibility — unsafe mode not needed in DO */
|
|
493
|
+
unsafeMode(_unsafe) {
|
|
494
|
+
return this;
|
|
495
|
+
}
|
|
496
|
+
/** no-op for compatibility */
|
|
497
|
+
defaultSafeIntegers(_toggle) {
|
|
498
|
+
return this;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
// -- StatementRunner --
|
|
502
|
+
// matches zero-cache's db/statements.js StatementRunner interface
|
|
503
|
+
export class StatementRunner {
|
|
504
|
+
db;
|
|
505
|
+
#stmtCache = new Map();
|
|
506
|
+
/** DO SqlStorage for transactionSync — set when Database wraps DO storage */
|
|
507
|
+
#storage = null;
|
|
508
|
+
constructor(db) {
|
|
509
|
+
this.db = db;
|
|
510
|
+
// extract the SqlStorageLike from the Database for transactionSync access.
|
|
511
|
+
// the Database stores it privately, so we pass it via a well-known property.
|
|
512
|
+
this.#storage = db.__orez_sql ?? null;
|
|
513
|
+
}
|
|
514
|
+
#getStatement(sql) {
|
|
515
|
+
const cached = this.#stmtCache.get(sql);
|
|
516
|
+
if (cached && cached.length > 0) {
|
|
517
|
+
return cached.pop();
|
|
518
|
+
}
|
|
519
|
+
return this.db.prepare(sql);
|
|
520
|
+
}
|
|
521
|
+
#returnStatement(sql, stmt) {
|
|
522
|
+
let arr = this.#stmtCache.get(sql);
|
|
523
|
+
if (!arr) {
|
|
524
|
+
arr = [];
|
|
525
|
+
this.#stmtCache.set(sql, arr);
|
|
526
|
+
}
|
|
527
|
+
arr.push(stmt);
|
|
528
|
+
}
|
|
529
|
+
run(sql, ...args) {
|
|
530
|
+
const stmt = this.#getStatement(sql);
|
|
531
|
+
try {
|
|
532
|
+
return stmt.run(...args);
|
|
533
|
+
}
|
|
534
|
+
finally {
|
|
535
|
+
this.#returnStatement(sql, stmt);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
get(sql, ...args) {
|
|
539
|
+
const stmt = this.#getStatement(sql);
|
|
540
|
+
try {
|
|
541
|
+
return stmt.get(...args);
|
|
542
|
+
}
|
|
543
|
+
finally {
|
|
544
|
+
this.#returnStatement(sql, stmt);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
all(sql, ...args) {
|
|
548
|
+
const stmt = this.#getStatement(sql);
|
|
549
|
+
try {
|
|
550
|
+
return stmt.all(...args);
|
|
551
|
+
}
|
|
552
|
+
finally {
|
|
553
|
+
this.#returnStatement(sql, stmt);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
// -- transaction methods --
|
|
557
|
+
// DO SQLite rejects raw BEGIN/COMMIT SQL. when transactionSync is
|
|
558
|
+
// available, begin() starts a transactionSync block and commit()
|
|
559
|
+
// lets it complete. for non-DO environments, falls back to raw SQL.
|
|
560
|
+
#txnResult = { changes: 0, lastInsertRowid: 0 };
|
|
561
|
+
begin() {
|
|
562
|
+
// on DO, transactionSync is closure-based so begin/commit are
|
|
563
|
+
// effectively no-ops — the actual transaction wrapping happens
|
|
564
|
+
// at the Database.transaction() level or implicitly per-statement.
|
|
565
|
+
// we try raw SQL first and swallow the DO rejection.
|
|
566
|
+
if (this.#storage?.transactionSync) {
|
|
567
|
+
return this.#txnResult;
|
|
568
|
+
}
|
|
569
|
+
return this.run('BEGIN');
|
|
570
|
+
}
|
|
571
|
+
beginConcurrent() {
|
|
572
|
+
return this.begin();
|
|
573
|
+
}
|
|
574
|
+
beginImmediate() {
|
|
575
|
+
if (this.#storage?.transactionSync) {
|
|
576
|
+
return this.#txnResult;
|
|
577
|
+
}
|
|
578
|
+
return this.run('BEGIN IMMEDIATE');
|
|
579
|
+
}
|
|
580
|
+
commit() {
|
|
581
|
+
if (this.#storage?.transactionSync) {
|
|
582
|
+
return this.#txnResult;
|
|
583
|
+
}
|
|
584
|
+
return this.run('COMMIT');
|
|
585
|
+
}
|
|
586
|
+
rollback() {
|
|
587
|
+
if (this.#storage?.transactionSync) {
|
|
588
|
+
return this.#txnResult;
|
|
589
|
+
}
|
|
590
|
+
return this.run('ROLLBACK');
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
// -- default export --
|
|
594
|
+
// matches @rocicorp/zero-sqlite3's default export: the Database class.
|
|
595
|
+
// zero-cache's zqlite/src/db.js does:
|
|
596
|
+
// import SQLite3Database, { SqliteError } from "@rocicorp/zero-sqlite3"
|
|
597
|
+
// new SQLite3Database(path, options)
|
|
598
|
+
export default Database;
|
|
599
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/worker/shims/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stream shim — re-exports stream-browserify with missing Node.js stream functions.
|
|
3
|
+
*
|
|
4
|
+
* stream-browserify doesn't include getDefaultHighWaterMark which zero-cache uses.
|
|
5
|
+
*/
|
|
6
|
+
export * from 'stream-browserify';
|
|
7
|
+
export { default } from 'stream-browserify';
|
|
8
|
+
export declare function getDefaultHighWaterMark(objectMode: boolean): number;
|
|
9
|
+
//# sourceMappingURL=stream-browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-browser.d.ts","sourceRoot":"","sources":["../../../src/worker/shims/stream-browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE3C,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stream shim — re-exports stream-browserify with missing Node.js stream functions.
|
|
3
|
+
*
|
|
4
|
+
* stream-browserify doesn't include getDefaultHighWaterMark which zero-cache uses.
|
|
5
|
+
*/
|
|
6
|
+
// @ts-expect-error — stream-browserify is CJS
|
|
7
|
+
export * from 'stream-browserify';
|
|
8
|
+
// @ts-expect-error — stream-browserify is CJS
|
|
9
|
+
export { default } from 'stream-browserify';
|
|
10
|
+
export function getDefaultHighWaterMark(objectMode) {
|
|
11
|
+
return objectMode ? 16 : 16 * 1024;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=stream-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-browser.js","sourceRoot":"","sources":["../../../src/worker/shims/stream-browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,cAAc,mBAAmB,CAAA;AACjC,8CAA8C;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE3C,MAAM,UAAU,uBAAuB,CAAC,UAAmB;IACzD,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAA;AACpC,CAAC"}
|