orez 0.0.29 → 0.0.31
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.js +200 -33
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -163
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/src/cli.ts +217 -39
- package/src/index.ts +19 -163
- package/src/sqlite-loader.cjs +40 -0
- package/src/sqlite-shim.cjs +8 -14
package/dist/cli.js
CHANGED
|
@@ -149,23 +149,76 @@ function shouldSkipStatement(stmt) {
|
|
|
149
149
|
const BATCH_SIZE = 500;
|
|
150
150
|
// run CHECKPOINT every N batches to flush WAL and reclaim wasm memory
|
|
151
151
|
const CHECKPOINT_INTERVAL = 10;
|
|
152
|
-
// true for statements that are data manipulation (INSERT/UPDATE/DELETE
|
|
152
|
+
// true for statements that are data manipulation (INSERT/UPDATE/DELETE)
|
|
153
153
|
// these get batched into transactions. DDL runs outside batches.
|
|
154
|
+
// note: COPY FROM stdin is handled separately by the copy-data converter
|
|
154
155
|
function isDataStatement(stmt) {
|
|
155
156
|
try {
|
|
156
157
|
const parsed = parseSync(stmt);
|
|
157
158
|
if (parsed.stmts.length === 0)
|
|
158
159
|
return false;
|
|
159
160
|
const nodeType = Object.keys(parsed.stmts[0].stmt)[0];
|
|
160
|
-
return (nodeType === 'InsertStmt' ||
|
|
161
|
-
nodeType === 'UpdateStmt' ||
|
|
162
|
-
nodeType === 'DeleteStmt' ||
|
|
163
|
-
nodeType === 'CopyStmt');
|
|
161
|
+
return (nodeType === 'InsertStmt' || nodeType === 'UpdateStmt' || nodeType === 'DeleteStmt');
|
|
164
162
|
}
|
|
165
163
|
catch {
|
|
166
164
|
return false;
|
|
167
165
|
}
|
|
168
166
|
}
|
|
167
|
+
// detect COPY ... FROM stdin and extract table + columns from AST
|
|
168
|
+
function parseCopyFromStdin(stmt) {
|
|
169
|
+
try {
|
|
170
|
+
const parsed = parseSync(stmt);
|
|
171
|
+
if (parsed.stmts.length === 0)
|
|
172
|
+
return null;
|
|
173
|
+
const node = parsed.stmts[0].stmt.CopyStmt;
|
|
174
|
+
if (!node || !node.is_from)
|
|
175
|
+
return null;
|
|
176
|
+
const schema = node.relation.schemaname;
|
|
177
|
+
const table = schema
|
|
178
|
+
? `"${schema}"."${node.relation.relname}"`
|
|
179
|
+
: `"${node.relation.relname}"`;
|
|
180
|
+
const columns = node.attlist ? node.attlist.map((a) => `"${a.String.sval}"`) : [];
|
|
181
|
+
return { table, columns };
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// convert a COPY text-format value to a SQL literal
|
|
188
|
+
// handles: \N → NULL, \\ → \, \t \n \r escapes, and single-quote escaping
|
|
189
|
+
function copyValueToLiteral(val) {
|
|
190
|
+
if (val === '\\N')
|
|
191
|
+
return 'NULL';
|
|
192
|
+
let result = '';
|
|
193
|
+
for (let i = 0; i < val.length; i++) {
|
|
194
|
+
if (val[i] === '\\' && i + 1 < val.length) {
|
|
195
|
+
const next = val[i + 1];
|
|
196
|
+
if (next === '\\') {
|
|
197
|
+
result += '\\';
|
|
198
|
+
i++;
|
|
199
|
+
}
|
|
200
|
+
else if (next === 'n') {
|
|
201
|
+
result += '\n';
|
|
202
|
+
i++;
|
|
203
|
+
}
|
|
204
|
+
else if (next === 'r') {
|
|
205
|
+
result += '\r';
|
|
206
|
+
i++;
|
|
207
|
+
}
|
|
208
|
+
else if (next === 't') {
|
|
209
|
+
result += '\t';
|
|
210
|
+
i++;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
result += val[i];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
result += val[i];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return "'" + result.replace(/'/g, "''") + "'";
|
|
221
|
+
}
|
|
169
222
|
// stream a sql dump file statement-by-statement with transaction batching
|
|
170
223
|
async function execDumpFile(db, filePath) {
|
|
171
224
|
const { createReadStream } = await import('node:fs');
|
|
@@ -181,6 +234,8 @@ async function execDumpFile(db, filePath) {
|
|
|
181
234
|
let batchesSinceCheckpoint = 0;
|
|
182
235
|
let inBatch = false;
|
|
183
236
|
let dollarTag = null; // tracks $tag$ quoting
|
|
237
|
+
// copy-data mode: when we hit COPY ... FROM stdin, we read data lines until \.
|
|
238
|
+
let copyTarget = null;
|
|
184
239
|
async function flushBatch() {
|
|
185
240
|
if (inBatch) {
|
|
186
241
|
await db.exec('COMMIT');
|
|
@@ -194,6 +249,27 @@ async function execDumpFile(db, filePath) {
|
|
|
194
249
|
batchCount = 0;
|
|
195
250
|
}
|
|
196
251
|
for await (const line of rl) {
|
|
252
|
+
// in copy-data mode: read tab-delimited rows until \.
|
|
253
|
+
if (copyTarget) {
|
|
254
|
+
if (line === '\\.') {
|
|
255
|
+
copyTarget = null;
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
const values = line.split('\t').map(copyValueToLiteral);
|
|
259
|
+
const colList = copyTarget.columns.length > 0 ? ` (${copyTarget.columns.join(', ')})` : '';
|
|
260
|
+
const insert = `INSERT INTO ${copyTarget.table}${colList} VALUES (${values.join(', ')})`;
|
|
261
|
+
if (!inBatch) {
|
|
262
|
+
await db.exec('BEGIN');
|
|
263
|
+
inBatch = true;
|
|
264
|
+
}
|
|
265
|
+
await db.exec(insert);
|
|
266
|
+
executed++;
|
|
267
|
+
batchCount++;
|
|
268
|
+
if (batchCount >= BATCH_SIZE) {
|
|
269
|
+
await flushBatch();
|
|
270
|
+
}
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
197
273
|
// skip empty lines and sql comments (only outside dollar-quoted blocks)
|
|
198
274
|
if (!dollarTag && (line === '' || line.startsWith('--')))
|
|
199
275
|
continue;
|
|
@@ -220,6 +296,12 @@ async function execDumpFile(db, filePath) {
|
|
|
220
296
|
skipped++;
|
|
221
297
|
continue;
|
|
222
298
|
}
|
|
299
|
+
// check for COPY ... FROM stdin → convert to INSERTs
|
|
300
|
+
const copyInfo = parseCopyFromStdin(stmt);
|
|
301
|
+
if (copyInfo) {
|
|
302
|
+
copyTarget = copyInfo;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
223
305
|
// rewrite CREATE SCHEMA → CREATE SCHEMA IF NOT EXISTS
|
|
224
306
|
let rewritten = stmt;
|
|
225
307
|
try {
|
|
@@ -269,6 +351,78 @@ async function execDumpFile(db, filePath) {
|
|
|
269
351
|
}
|
|
270
352
|
return { executed, skipped };
|
|
271
353
|
}
|
|
354
|
+
// try restoring via wire protocol (postgres running on given port)
|
|
355
|
+
// returns true if connected and restored, false if connection unavailable
|
|
356
|
+
async function tryWireRestore(opts) {
|
|
357
|
+
const postgres = (await import('postgres')).default;
|
|
358
|
+
const sql = postgres({
|
|
359
|
+
host: '127.0.0.1',
|
|
360
|
+
port: opts.port,
|
|
361
|
+
user: opts.user,
|
|
362
|
+
password: opts.password,
|
|
363
|
+
database: 'postgres',
|
|
364
|
+
connect_timeout: 3,
|
|
365
|
+
max: 1, // single connection so BEGIN/COMMIT work correctly
|
|
366
|
+
});
|
|
367
|
+
try {
|
|
368
|
+
await sql `SELECT 1`;
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
await sql.end({ timeout: 0 }).catch(() => { });
|
|
372
|
+
return false;
|
|
373
|
+
}
|
|
374
|
+
// connected — restore errors should propagate, not fall back
|
|
375
|
+
log.orez(`connected via wire protocol on port ${opts.port}`);
|
|
376
|
+
try {
|
|
377
|
+
if (opts.clean) {
|
|
378
|
+
log.orez('dropping and recreating public schema');
|
|
379
|
+
await sql.unsafe('DROP SCHEMA public CASCADE');
|
|
380
|
+
await sql.unsafe('CREATE SCHEMA public');
|
|
381
|
+
}
|
|
382
|
+
const db = { exec: (query) => sql.unsafe(query) };
|
|
383
|
+
const { executed, skipped } = await execDumpFile(db, opts.sqlFile);
|
|
384
|
+
log.orez(`restored ${opts.sqlFile} via wire protocol (${executed} statements, ${skipped} skipped)`);
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
finally {
|
|
388
|
+
await sql.end();
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
// restore by opening PGlite directly (requires no other process holding the lock)
|
|
392
|
+
async function directRestore(opts) {
|
|
393
|
+
const { PGlite } = await import('@electric-sql/pglite');
|
|
394
|
+
const { vector } = await import('@electric-sql/pglite/vector');
|
|
395
|
+
const { pg_trgm } = await import('@electric-sql/pglite/contrib/pg_trgm');
|
|
396
|
+
const dataPath = resolve(opts.dataDir, 'pgdata-postgres');
|
|
397
|
+
let db;
|
|
398
|
+
try {
|
|
399
|
+
db = new PGlite({
|
|
400
|
+
dataDir: dataPath,
|
|
401
|
+
extensions: { vector, pg_trgm },
|
|
402
|
+
relaxedDurability: true,
|
|
403
|
+
});
|
|
404
|
+
await db.waitReady;
|
|
405
|
+
if (opts.clean) {
|
|
406
|
+
log.orez('dropping and recreating public schema');
|
|
407
|
+
await db.exec('DROP SCHEMA public CASCADE');
|
|
408
|
+
await db.exec('CREATE SCHEMA public');
|
|
409
|
+
}
|
|
410
|
+
const { executed, skipped } = await execDumpFile(db, opts.sqlFile);
|
|
411
|
+
log.orez(`restored ${opts.sqlFile} into ${dataPath} (${executed} statements, ${skipped} skipped)`);
|
|
412
|
+
}
|
|
413
|
+
catch (err) {
|
|
414
|
+
if (err?.message?.includes('lock')) {
|
|
415
|
+
console.error('error: database is locked — stop orez first before running pg_restore');
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
console.error(`error: ${err?.message ?? err}`);
|
|
419
|
+
}
|
|
420
|
+
process.exit(1);
|
|
421
|
+
}
|
|
422
|
+
finally {
|
|
423
|
+
await db?.close();
|
|
424
|
+
}
|
|
425
|
+
}
|
|
272
426
|
const pgRestoreCommand = defineCommand({
|
|
273
427
|
meta: {
|
|
274
428
|
name: 'pg_restore',
|
|
@@ -290,46 +444,59 @@ const pgRestoreCommand = defineCommand({
|
|
|
290
444
|
description: 'drop and recreate public schema before restoring',
|
|
291
445
|
default: false,
|
|
292
446
|
},
|
|
447
|
+
'pg-port': {
|
|
448
|
+
type: 'string',
|
|
449
|
+
description: 'postgresql port for wire protocol connection',
|
|
450
|
+
default: '6434',
|
|
451
|
+
},
|
|
452
|
+
'pg-user': {
|
|
453
|
+
type: 'string',
|
|
454
|
+
description: 'postgresql user',
|
|
455
|
+
default: 'user',
|
|
456
|
+
},
|
|
457
|
+
'pg-password': {
|
|
458
|
+
type: 'string',
|
|
459
|
+
description: 'postgresql password',
|
|
460
|
+
default: 'password',
|
|
461
|
+
},
|
|
462
|
+
direct: {
|
|
463
|
+
type: 'boolean',
|
|
464
|
+
description: 'force direct PGlite access, skip wire protocol auto-detection',
|
|
465
|
+
default: false,
|
|
466
|
+
},
|
|
293
467
|
},
|
|
294
468
|
async run({ args }) {
|
|
295
|
-
const { PGlite } = await import('@electric-sql/pglite');
|
|
296
|
-
const { vector } = await import('@electric-sql/pglite/vector');
|
|
297
|
-
const { pg_trgm } = await import('@electric-sql/pglite/contrib/pg_trgm');
|
|
298
469
|
await loadModule(); // initialize pgsql-parser WASM
|
|
299
470
|
const sqlFile = args.file;
|
|
300
471
|
if (!existsSync(sqlFile)) {
|
|
301
472
|
console.error(`error: file not found: ${sqlFile}`);
|
|
302
473
|
process.exit(1);
|
|
303
474
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
475
|
+
// try wire protocol first (unless --direct)
|
|
476
|
+
if (!args.direct) {
|
|
477
|
+
try {
|
|
478
|
+
const restored = await tryWireRestore({
|
|
479
|
+
port: Number(args['pg-port']),
|
|
480
|
+
user: args['pg-user'],
|
|
481
|
+
password: args['pg-password'],
|
|
482
|
+
clean: args.clean,
|
|
483
|
+
sqlFile,
|
|
484
|
+
});
|
|
485
|
+
if (restored)
|
|
486
|
+
return;
|
|
487
|
+
log.orez('wire protocol unavailable, falling back to direct PGlite');
|
|
317
488
|
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}
|
|
321
|
-
catch (err) {
|
|
322
|
-
if (err?.message?.includes('lock')) {
|
|
323
|
-
console.error('error: database is locked — stop orez first before running pg_restore');
|
|
324
|
-
}
|
|
325
|
-
else {
|
|
489
|
+
catch (err) {
|
|
490
|
+
// connected but restore failed — report error, don't fall back
|
|
326
491
|
console.error(`error: ${err?.message ?? err}`);
|
|
492
|
+
process.exit(1);
|
|
327
493
|
}
|
|
328
|
-
process.exit(1);
|
|
329
|
-
}
|
|
330
|
-
finally {
|
|
331
|
-
await db?.close();
|
|
332
494
|
}
|
|
495
|
+
await directRestore({
|
|
496
|
+
dataDir: args['data-dir'],
|
|
497
|
+
clean: args.clean,
|
|
498
|
+
sqlFile,
|
|
499
|
+
});
|
|
333
500
|
},
|
|
334
501
|
});
|
|
335
502
|
const main = defineCommand({
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC5D,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAe3D,wBAAsB,aAAa,CAAC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM;;;;;;;GA2H1E"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
import { spawn } from 'node:child_process';
|
|
9
9
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
10
10
|
import { createRequire } from 'node:module';
|
|
11
|
-
import {
|
|
11
|
+
import { dirname, resolve } from 'node:path';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
12
13
|
import { getConfig, getConnectionString } from './config.js';
|
|
13
14
|
import { log, port, setLogLevel } from './log.js';
|
|
14
15
|
import { startPgProxy } from './pg-proxy.js';
|
|
@@ -220,167 +221,19 @@ async function seedIfNeeded(db, config) {
|
|
|
220
221
|
}
|
|
221
222
|
log.orez('seeded');
|
|
222
223
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
let libDir;
|
|
230
|
-
const sqliteEntry = resolvePackage('@rocicorp/zero-sqlite3');
|
|
231
|
-
if (sqliteEntry) {
|
|
232
|
-
libDir = resolve(sqliteEntry, '..');
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
// native build likely failed, find package via @rocicorp/zero
|
|
236
|
-
const zeroEntry = resolvePackage('@rocicorp/zero');
|
|
237
|
-
// walk up to find the actual node_modules dir (entry depth varies)
|
|
238
|
-
let nodeModules = dirname(zeroEntry);
|
|
239
|
-
while (nodeModules !== '/' && basename(nodeModules) !== 'node_modules') {
|
|
240
|
-
nodeModules = dirname(nodeModules);
|
|
241
|
-
}
|
|
242
|
-
const pkgDir = resolve(nodeModules, '@rocicorp', 'zero-sqlite3');
|
|
243
|
-
if (!existsSync(resolve(pkgDir, 'package.json'))) {
|
|
244
|
-
log.debug.orez('@rocicorp/zero-sqlite3 not found, skipping wasm patch');
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
libDir = resolve(pkgDir, 'lib');
|
|
248
|
-
mkdirSync(libDir, { recursive: true });
|
|
249
|
-
}
|
|
250
|
-
const indexPath = resolve(libDir, 'index.js');
|
|
251
|
-
// check if already patched
|
|
252
|
-
if (existsSync(indexPath)) {
|
|
253
|
-
const current = readFileSync(indexPath, 'utf-8');
|
|
254
|
-
if (current.includes('OrigDatabase'))
|
|
255
|
-
return; // already patched
|
|
256
|
-
}
|
|
257
|
-
// back up originals before patching
|
|
258
|
-
if (existsSync(indexPath)) {
|
|
259
|
-
writeFileSync(indexPath + '.original', readFileSync(indexPath));
|
|
260
|
-
}
|
|
261
|
-
const dbBackupPath = resolve(libDir, 'database.js');
|
|
262
|
-
if (existsSync(dbBackupPath)) {
|
|
263
|
-
writeFileSync(dbBackupPath + '.original', readFileSync(dbBackupPath));
|
|
264
|
-
}
|
|
265
|
-
// resolve bedrock-sqlite's dist entry point
|
|
266
|
-
const bedrockEntry = resolvePackage('bedrock-sqlite');
|
|
267
|
-
if (!existsSync(bedrockEntry)) {
|
|
268
|
-
log.debug.orez('bedrock-sqlite not found, skipping wasm patch');
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
// inline the full shim into index.js - no external file dependency
|
|
272
|
-
const shim = `'use strict';
|
|
273
|
-
// patched by orez: bedrock-sqlite (wasm) replaces native bindings
|
|
274
|
-
var mod = require('${bedrockEntry}');
|
|
275
|
-
var OrigDatabase = mod.Database;
|
|
276
|
-
var SqliteError = mod.SqliteError;
|
|
277
|
-
|
|
278
|
-
// wrap constructor to set busy_timeout on every connection immediately.
|
|
279
|
-
function Database() {
|
|
280
|
-
var db = new OrigDatabase(...arguments);
|
|
281
|
-
try {
|
|
282
|
-
db.pragma('busy_timeout = 30000');
|
|
283
|
-
db.pragma('synchronous = normal');
|
|
284
|
-
// reduce page cache from compile-time 64MB to 8MB.
|
|
285
|
-
// wasm keeps page cache inside V8 heap (unlike native),
|
|
286
|
-
// so a smaller cache prevents OOM during initial sync.
|
|
287
|
-
db.pragma('cache_size = -8000');
|
|
288
|
-
} catch(e) {}
|
|
289
|
-
return db;
|
|
290
|
-
}
|
|
291
|
-
Database.prototype = OrigDatabase.prototype;
|
|
292
|
-
Database.prototype.constructor = Database;
|
|
293
|
-
Object.keys(OrigDatabase).forEach(function(k) { Database[k] = OrigDatabase[k]; });
|
|
294
|
-
|
|
295
|
-
// unsafeMode enables resetting sibling statements before commit/rollback
|
|
296
|
-
// (native better-sqlite3 does this in C++, we do it in JS in api.js)
|
|
297
|
-
Database.prototype.unsafeMode = function(enabled) {
|
|
298
|
-
if (enabled === undefined) enabled = true;
|
|
299
|
-
this._unsafe = !!enabled;
|
|
300
|
-
return this;
|
|
301
|
-
};
|
|
302
|
-
if (!Database.prototype.defaultSafeIntegers) Database.prototype.defaultSafeIntegers = function() { return this; };
|
|
303
|
-
if (!Database.prototype.serialize) Database.prototype.serialize = function() { throw new Error('not supported in wasm'); };
|
|
304
|
-
if (!Database.prototype.backup) Database.prototype.backup = function() { throw new Error('not supported in wasm'); };
|
|
305
|
-
|
|
306
|
-
// patch Statement prototype
|
|
307
|
-
var tmpDb = new OrigDatabase(':memory:');
|
|
308
|
-
var tmpStmt = tmpDb.prepare('SELECT 1');
|
|
309
|
-
var SP = Object.getPrototypeOf(tmpStmt);
|
|
310
|
-
if (!SP.safeIntegers) SP.safeIntegers = function() { return this; };
|
|
311
|
-
// unconditionally override scanStatus — bedrock-sqlite may have a broken
|
|
312
|
-
// native impl that returns non-undefined garbage, causing infinite loops
|
|
313
|
-
// in zero-cache's getScanstatusLoops
|
|
314
|
-
SP.scanStatus = function() { return undefined; };
|
|
315
|
-
SP.scanStatusV2 = function() { return []; };
|
|
316
|
-
SP.scanStatusReset = function() {};
|
|
317
|
-
tmpDb.close();
|
|
318
|
-
|
|
319
|
-
// scanstat constants
|
|
320
|
-
Database.SQLITE_SCANSTAT_NLOOP = 0;
|
|
321
|
-
Database.SQLITE_SCANSTAT_NVISIT = 1;
|
|
322
|
-
Database.SQLITE_SCANSTAT_EST = 2;
|
|
323
|
-
Database.SQLITE_SCANSTAT_NAME = 3;
|
|
324
|
-
Database.SQLITE_SCANSTAT_EXPLAIN = 4;
|
|
325
|
-
Database.SQLITE_SCANSTAT_SELECTID = 5;
|
|
326
|
-
Database.SQLITE_SCANSTAT_PARENTID = 6;
|
|
327
|
-
Database.SQLITE_SCANSTAT_NCYCLE = 7;
|
|
328
|
-
Database.SQLITE_SCANSTAT_COMPLEX = 8;
|
|
329
|
-
|
|
330
|
-
module.exports = Database;
|
|
331
|
-
module.exports.SqliteError = SqliteError;
|
|
332
|
-
`;
|
|
333
|
-
writeFileSync(indexPath, shim);
|
|
334
|
-
// also patch database.js since it has top-level native addon loading
|
|
335
|
-
const dbPath = resolve(libDir, 'database.js');
|
|
336
|
-
if (existsSync(dbPath)) {
|
|
337
|
-
writeFileSync(dbPath, `'use strict';\nmodule.exports = require('./index');\n`);
|
|
338
|
-
}
|
|
339
|
-
log.debug.orez('patched @rocicorp/zero-sqlite3 -> bedrock-sqlite (wasm)');
|
|
340
|
-
}
|
|
341
|
-
catch (e) {
|
|
342
|
-
log.orez(`sqlite wasm patch failed: ${e}`);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
function unpatchSqliteWasm() {
|
|
346
|
-
// restore native @rocicorp/zero-sqlite3 if it was previously patched
|
|
347
|
-
try {
|
|
348
|
-
const sqliteEntry = resolvePackage('@rocicorp/zero-sqlite3');
|
|
349
|
-
if (!sqliteEntry)
|
|
350
|
-
return;
|
|
351
|
-
const libDir = resolve(sqliteEntry, '..');
|
|
352
|
-
const indexPath = resolve(libDir, 'index.js');
|
|
353
|
-
if (!existsSync(indexPath))
|
|
354
|
-
return;
|
|
355
|
-
const current = readFileSync(indexPath, 'utf-8');
|
|
356
|
-
if (!current.includes('OrigDatabase'))
|
|
357
|
-
return; // not patched
|
|
358
|
-
// restore from backups if available
|
|
359
|
-
for (const file of ['index.js', 'database.js']) {
|
|
360
|
-
const filePath = resolve(libDir, file);
|
|
361
|
-
const backupPath = filePath + '.original';
|
|
362
|
-
if (existsSync(backupPath)) {
|
|
363
|
-
writeFileSync(filePath, readFileSync(backupPath));
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
log.orez('restored native @rocicorp/zero-sqlite3 (removed wasm patch)');
|
|
367
|
-
}
|
|
368
|
-
catch (e) {
|
|
369
|
-
log.orez(`failed to restore native sqlite: ${e}`);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
224
|
+
// resolve path to the --require hook for sqlite.
|
|
225
|
+
// the loader tries native @rocicorp/zero-sqlite3 first, falling back to
|
|
226
|
+
// bedrock-sqlite (wasm) if native bindings aren't available.
|
|
227
|
+
// loaded via NODE_OPTIONS — no files in node_modules are modified.
|
|
228
|
+
const __dirname_esm = dirname(fileURLToPath(import.meta.url));
|
|
229
|
+
const sqliteLoaderPath = resolve(__dirname_esm, 'sqlite-loader.cjs');
|
|
372
230
|
async function startZeroCache(config) {
|
|
373
231
|
// resolve @rocicorp/zero entry for finding zero-cache modules
|
|
374
232
|
const zeroEntry = resolvePackage('@rocicorp/zero');
|
|
375
233
|
if (!zeroEntry) {
|
|
376
234
|
throw new Error('zero-cache not found. install @rocicorp/zero');
|
|
377
235
|
}
|
|
378
|
-
|
|
379
|
-
if (!config.disableWasmSqlite) {
|
|
380
|
-
patchSqliteForWasm();
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
unpatchSqliteWasm();
|
|
236
|
+
if (config.disableWasmSqlite) {
|
|
384
237
|
log.debug.orez('wasm sqlite disabled, using native @rocicorp/zero-sqlite3');
|
|
385
238
|
}
|
|
386
239
|
const upstreamUrl = getConnectionString(config, 'postgres');
|
|
@@ -391,11 +244,13 @@ async function startZeroCache(config) {
|
|
|
391
244
|
NODE_ENV: 'development',
|
|
392
245
|
ZERO_LOG_LEVEL: config.logLevel,
|
|
393
246
|
ZERO_NUM_SYNC_WORKERS: '1',
|
|
394
|
-
// wasm sqlite's scanStatus returns non-undefined garbage that causes
|
|
395
|
-
// infinite loops in getScanstatusLoops. disable the query planner to
|
|
396
|
-
// avoid the code path entirely (planner is an optimization, not required).
|
|
397
|
-
ZERO_ENABLE_QUERY_PLANNER: 'false',
|
|
398
247
|
};
|
|
248
|
+
// when wasm sqlite may be used, disable the query planner — wasm's
|
|
249
|
+
// scanStatus returns garbage that causes infinite loops in zero-cache.
|
|
250
|
+
// when user forces native (--disable-wasm-sqlite), planner is safe.
|
|
251
|
+
if (!config.disableWasmSqlite) {
|
|
252
|
+
defaults.ZERO_ENABLE_QUERY_PLANNER = 'false';
|
|
253
|
+
}
|
|
399
254
|
const env = {
|
|
400
255
|
...defaults,
|
|
401
256
|
...process.env,
|
|
@@ -412,10 +267,10 @@ async function startZeroCache(config) {
|
|
|
412
267
|
if (!existsSync(zeroCacheBin)) {
|
|
413
268
|
throw new Error('zero-cache cli.js not found. install @rocicorp/zero');
|
|
414
269
|
}
|
|
415
|
-
//
|
|
416
|
-
//
|
|
270
|
+
// sqlite loader: tries native first, falls back to wasm. when user forces
|
|
271
|
+
// native via --disable-wasm-sqlite, skip the loader entirely.
|
|
417
272
|
const nodeOptions = !config.disableWasmSqlite
|
|
418
|
-
? `--max-old-space-size=16384 ${process.env.NODE_OPTIONS || ''}`
|
|
273
|
+
? `--require ${sqliteLoaderPath} --max-old-space-size=16384 ${process.env.NODE_OPTIONS || ''}`
|
|
419
274
|
: process.env.NODE_OPTIONS || '';
|
|
420
275
|
if (nodeOptions.trim())
|
|
421
276
|
env.NODE_OPTIONS = nodeOptions.trim();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orez",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.31",
|
|
4
4
|
"description": "PGlite-powered zero-sync development backend. No Docker required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,9 +46,10 @@
|
|
|
46
46
|
"@electric-sql/pglite": "^0.2.17",
|
|
47
47
|
"@electric-sql/pglite-tools": "0.2.4",
|
|
48
48
|
"@rocicorp/zero": ">=0.1.0",
|
|
49
|
-
"bedrock-sqlite": "0.0.
|
|
49
|
+
"bedrock-sqlite": "0.0.23",
|
|
50
50
|
"citty": "^0.2.0",
|
|
51
51
|
"pg-gateway": "^0.3.0-beta.4",
|
|
52
|
+
"postgres": "^3.4.5",
|
|
52
53
|
"pgsql-parser": "^17.9.11"
|
|
53
54
|
},
|
|
54
55
|
"peerDependencies": {
|
package/src/cli.ts
CHANGED
|
@@ -162,24 +162,70 @@ const BATCH_SIZE = 500
|
|
|
162
162
|
// run CHECKPOINT every N batches to flush WAL and reclaim wasm memory
|
|
163
163
|
const CHECKPOINT_INTERVAL = 10
|
|
164
164
|
|
|
165
|
-
// true for statements that are data manipulation (INSERT/UPDATE/DELETE
|
|
165
|
+
// true for statements that are data manipulation (INSERT/UPDATE/DELETE)
|
|
166
166
|
// these get batched into transactions. DDL runs outside batches.
|
|
167
|
+
// note: COPY FROM stdin is handled separately by the copy-data converter
|
|
167
168
|
function isDataStatement(stmt: string): boolean {
|
|
168
169
|
try {
|
|
169
170
|
const parsed = parseSync(stmt)
|
|
170
171
|
if (parsed.stmts.length === 0) return false
|
|
171
172
|
const nodeType = Object.keys(parsed.stmts[0].stmt)[0]
|
|
172
173
|
return (
|
|
173
|
-
nodeType === 'InsertStmt' ||
|
|
174
|
-
nodeType === 'UpdateStmt' ||
|
|
175
|
-
nodeType === 'DeleteStmt' ||
|
|
176
|
-
nodeType === 'CopyStmt'
|
|
174
|
+
nodeType === 'InsertStmt' || nodeType === 'UpdateStmt' || nodeType === 'DeleteStmt'
|
|
177
175
|
)
|
|
178
176
|
} catch {
|
|
179
177
|
return false
|
|
180
178
|
}
|
|
181
179
|
}
|
|
182
180
|
|
|
181
|
+
// detect COPY ... FROM stdin and extract table + columns from AST
|
|
182
|
+
function parseCopyFromStdin(stmt: string): { table: string; columns: string[] } | null {
|
|
183
|
+
try {
|
|
184
|
+
const parsed = parseSync(stmt)
|
|
185
|
+
if (parsed.stmts.length === 0) return null
|
|
186
|
+
const node = parsed.stmts[0].stmt.CopyStmt
|
|
187
|
+
if (!node || !node.is_from) return null
|
|
188
|
+
const schema = node.relation.schemaname
|
|
189
|
+
const table = schema
|
|
190
|
+
? `"${schema}"."${node.relation.relname}"`
|
|
191
|
+
: `"${node.relation.relname}"`
|
|
192
|
+
const columns = node.attlist ? node.attlist.map((a: any) => `"${a.String.sval}"`) : []
|
|
193
|
+
return { table, columns }
|
|
194
|
+
} catch {
|
|
195
|
+
return null
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// convert a COPY text-format value to a SQL literal
|
|
200
|
+
// handles: \N → NULL, \\ → \, \t \n \r escapes, and single-quote escaping
|
|
201
|
+
function copyValueToLiteral(val: string): string {
|
|
202
|
+
if (val === '\\N') return 'NULL'
|
|
203
|
+
let result = ''
|
|
204
|
+
for (let i = 0; i < val.length; i++) {
|
|
205
|
+
if (val[i] === '\\' && i + 1 < val.length) {
|
|
206
|
+
const next = val[i + 1]
|
|
207
|
+
if (next === '\\') {
|
|
208
|
+
result += '\\'
|
|
209
|
+
i++
|
|
210
|
+
} else if (next === 'n') {
|
|
211
|
+
result += '\n'
|
|
212
|
+
i++
|
|
213
|
+
} else if (next === 'r') {
|
|
214
|
+
result += '\r'
|
|
215
|
+
i++
|
|
216
|
+
} else if (next === 't') {
|
|
217
|
+
result += '\t'
|
|
218
|
+
i++
|
|
219
|
+
} else {
|
|
220
|
+
result += val[i]
|
|
221
|
+
}
|
|
222
|
+
} else {
|
|
223
|
+
result += val[i]
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return "'" + result.replace(/'/g, "''") + "'"
|
|
227
|
+
}
|
|
228
|
+
|
|
183
229
|
// stream a sql dump file statement-by-statement with transaction batching
|
|
184
230
|
async function execDumpFile(
|
|
185
231
|
db: { exec: (sql: string) => Promise<unknown> },
|
|
@@ -201,6 +247,9 @@ async function execDumpFile(
|
|
|
201
247
|
let inBatch = false
|
|
202
248
|
let dollarTag: string | null = null // tracks $tag$ quoting
|
|
203
249
|
|
|
250
|
+
// copy-data mode: when we hit COPY ... FROM stdin, we read data lines until \.
|
|
251
|
+
let copyTarget: { table: string; columns: string[] } | null = null
|
|
252
|
+
|
|
204
253
|
async function flushBatch() {
|
|
205
254
|
if (inBatch) {
|
|
206
255
|
await db.exec('COMMIT')
|
|
@@ -215,6 +264,29 @@ async function execDumpFile(
|
|
|
215
264
|
}
|
|
216
265
|
|
|
217
266
|
for await (const line of rl) {
|
|
267
|
+
// in copy-data mode: read tab-delimited rows until \.
|
|
268
|
+
if (copyTarget) {
|
|
269
|
+
if (line === '\\.') {
|
|
270
|
+
copyTarget = null
|
|
271
|
+
continue
|
|
272
|
+
}
|
|
273
|
+
const values = line.split('\t').map(copyValueToLiteral)
|
|
274
|
+
const colList =
|
|
275
|
+
copyTarget.columns.length > 0 ? ` (${copyTarget.columns.join(', ')})` : ''
|
|
276
|
+
const insert = `INSERT INTO ${copyTarget.table}${colList} VALUES (${values.join(', ')})`
|
|
277
|
+
if (!inBatch) {
|
|
278
|
+
await db.exec('BEGIN')
|
|
279
|
+
inBatch = true
|
|
280
|
+
}
|
|
281
|
+
await db.exec(insert)
|
|
282
|
+
executed++
|
|
283
|
+
batchCount++
|
|
284
|
+
if (batchCount >= BATCH_SIZE) {
|
|
285
|
+
await flushBatch()
|
|
286
|
+
}
|
|
287
|
+
continue
|
|
288
|
+
}
|
|
289
|
+
|
|
218
290
|
// skip empty lines and sql comments (only outside dollar-quoted blocks)
|
|
219
291
|
if (!dollarTag && (line === '' || line.startsWith('--'))) continue
|
|
220
292
|
|
|
@@ -244,6 +316,13 @@ async function execDumpFile(
|
|
|
244
316
|
continue
|
|
245
317
|
}
|
|
246
318
|
|
|
319
|
+
// check for COPY ... FROM stdin → convert to INSERTs
|
|
320
|
+
const copyInfo = parseCopyFromStdin(stmt)
|
|
321
|
+
if (copyInfo) {
|
|
322
|
+
copyTarget = copyInfo
|
|
323
|
+
continue
|
|
324
|
+
}
|
|
325
|
+
|
|
247
326
|
// rewrite CREATE SCHEMA → CREATE SCHEMA IF NOT EXISTS
|
|
248
327
|
let rewritten = stmt
|
|
249
328
|
try {
|
|
@@ -296,6 +375,98 @@ async function execDumpFile(
|
|
|
296
375
|
return { executed, skipped }
|
|
297
376
|
}
|
|
298
377
|
|
|
378
|
+
// try restoring via wire protocol (postgres running on given port)
|
|
379
|
+
// returns true if connected and restored, false if connection unavailable
|
|
380
|
+
async function tryWireRestore(opts: {
|
|
381
|
+
port: number
|
|
382
|
+
user: string
|
|
383
|
+
password: string
|
|
384
|
+
clean: boolean
|
|
385
|
+
sqlFile: string
|
|
386
|
+
}): Promise<boolean> {
|
|
387
|
+
const postgres = (await import('postgres')).default
|
|
388
|
+
const sql = postgres({
|
|
389
|
+
host: '127.0.0.1',
|
|
390
|
+
port: opts.port,
|
|
391
|
+
user: opts.user,
|
|
392
|
+
password: opts.password,
|
|
393
|
+
database: 'postgres',
|
|
394
|
+
connect_timeout: 3,
|
|
395
|
+
max: 1, // single connection so BEGIN/COMMIT work correctly
|
|
396
|
+
})
|
|
397
|
+
|
|
398
|
+
try {
|
|
399
|
+
await sql`SELECT 1`
|
|
400
|
+
} catch {
|
|
401
|
+
await sql.end({ timeout: 0 }).catch(() => {})
|
|
402
|
+
return false
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// connected — restore errors should propagate, not fall back
|
|
406
|
+
log.orez(`connected via wire protocol on port ${opts.port}`)
|
|
407
|
+
try {
|
|
408
|
+
if (opts.clean) {
|
|
409
|
+
log.orez('dropping and recreating public schema')
|
|
410
|
+
await sql.unsafe('DROP SCHEMA public CASCADE')
|
|
411
|
+
await sql.unsafe('CREATE SCHEMA public')
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
const db = { exec: (query: string) => sql.unsafe(query) as Promise<unknown> }
|
|
415
|
+
const { executed, skipped } = await execDumpFile(db, opts.sqlFile)
|
|
416
|
+
log.orez(
|
|
417
|
+
`restored ${opts.sqlFile} via wire protocol (${executed} statements, ${skipped} skipped)`
|
|
418
|
+
)
|
|
419
|
+
return true
|
|
420
|
+
} finally {
|
|
421
|
+
await sql.end()
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// restore by opening PGlite directly (requires no other process holding the lock)
|
|
426
|
+
async function directRestore(opts: {
|
|
427
|
+
dataDir: string
|
|
428
|
+
clean: boolean
|
|
429
|
+
sqlFile: string
|
|
430
|
+
}): Promise<void> {
|
|
431
|
+
const { PGlite } = await import('@electric-sql/pglite')
|
|
432
|
+
const { vector } = await import('@electric-sql/pglite/vector')
|
|
433
|
+
const { pg_trgm } = await import('@electric-sql/pglite/contrib/pg_trgm')
|
|
434
|
+
|
|
435
|
+
const dataPath = resolve(opts.dataDir, 'pgdata-postgres')
|
|
436
|
+
|
|
437
|
+
let db: InstanceType<typeof PGlite> | undefined
|
|
438
|
+
try {
|
|
439
|
+
db = new PGlite({
|
|
440
|
+
dataDir: dataPath,
|
|
441
|
+
extensions: { vector, pg_trgm },
|
|
442
|
+
relaxedDurability: true,
|
|
443
|
+
})
|
|
444
|
+
await db.waitReady
|
|
445
|
+
|
|
446
|
+
if (opts.clean) {
|
|
447
|
+
log.orez('dropping and recreating public schema')
|
|
448
|
+
await db.exec('DROP SCHEMA public CASCADE')
|
|
449
|
+
await db.exec('CREATE SCHEMA public')
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const { executed, skipped } = await execDumpFile(db, opts.sqlFile)
|
|
453
|
+
log.orez(
|
|
454
|
+
`restored ${opts.sqlFile} into ${dataPath} (${executed} statements, ${skipped} skipped)`
|
|
455
|
+
)
|
|
456
|
+
} catch (err: any) {
|
|
457
|
+
if (err?.message?.includes('lock')) {
|
|
458
|
+
console.error(
|
|
459
|
+
'error: database is locked — stop orez first before running pg_restore'
|
|
460
|
+
)
|
|
461
|
+
} else {
|
|
462
|
+
console.error(`error: ${err?.message ?? err}`)
|
|
463
|
+
}
|
|
464
|
+
process.exit(1)
|
|
465
|
+
} finally {
|
|
466
|
+
await db?.close()
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
299
470
|
const pgRestoreCommand = defineCommand({
|
|
300
471
|
meta: {
|
|
301
472
|
name: 'pg_restore',
|
|
@@ -317,12 +488,28 @@ const pgRestoreCommand = defineCommand({
|
|
|
317
488
|
description: 'drop and recreate public schema before restoring',
|
|
318
489
|
default: false,
|
|
319
490
|
},
|
|
491
|
+
'pg-port': {
|
|
492
|
+
type: 'string',
|
|
493
|
+
description: 'postgresql port for wire protocol connection',
|
|
494
|
+
default: '6434',
|
|
495
|
+
},
|
|
496
|
+
'pg-user': {
|
|
497
|
+
type: 'string',
|
|
498
|
+
description: 'postgresql user',
|
|
499
|
+
default: 'user',
|
|
500
|
+
},
|
|
501
|
+
'pg-password': {
|
|
502
|
+
type: 'string',
|
|
503
|
+
description: 'postgresql password',
|
|
504
|
+
default: 'password',
|
|
505
|
+
},
|
|
506
|
+
direct: {
|
|
507
|
+
type: 'boolean',
|
|
508
|
+
description: 'force direct PGlite access, skip wire protocol auto-detection',
|
|
509
|
+
default: false,
|
|
510
|
+
},
|
|
320
511
|
},
|
|
321
512
|
async run({ args }) {
|
|
322
|
-
const { PGlite } = await import('@electric-sql/pglite')
|
|
323
|
-
const { vector } = await import('@electric-sql/pglite/vector')
|
|
324
|
-
const { pg_trgm } = await import('@electric-sql/pglite/contrib/pg_trgm')
|
|
325
|
-
|
|
326
513
|
await loadModule() // initialize pgsql-parser WASM
|
|
327
514
|
|
|
328
515
|
const sqlFile = args.file
|
|
@@ -331,39 +518,30 @@ const pgRestoreCommand = defineCommand({
|
|
|
331
518
|
process.exit(1)
|
|
332
519
|
}
|
|
333
520
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
await db.exec('CREATE SCHEMA public')
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
const { executed, skipped } = await execDumpFile(db, sqlFile)
|
|
352
|
-
log.orez(
|
|
353
|
-
`restored ${sqlFile} into ${dataPath} (${executed} statements, ${skipped} skipped)`
|
|
354
|
-
)
|
|
355
|
-
} catch (err: any) {
|
|
356
|
-
if (err?.message?.includes('lock')) {
|
|
357
|
-
console.error(
|
|
358
|
-
'error: database is locked — stop orez first before running pg_restore'
|
|
359
|
-
)
|
|
360
|
-
} else {
|
|
521
|
+
// try wire protocol first (unless --direct)
|
|
522
|
+
if (!args.direct) {
|
|
523
|
+
try {
|
|
524
|
+
const restored = await tryWireRestore({
|
|
525
|
+
port: Number(args['pg-port']),
|
|
526
|
+
user: args['pg-user'],
|
|
527
|
+
password: args['pg-password'],
|
|
528
|
+
clean: args.clean,
|
|
529
|
+
sqlFile,
|
|
530
|
+
})
|
|
531
|
+
if (restored) return
|
|
532
|
+
log.orez('wire protocol unavailable, falling back to direct PGlite')
|
|
533
|
+
} catch (err: any) {
|
|
534
|
+
// connected but restore failed — report error, don't fall back
|
|
361
535
|
console.error(`error: ${err?.message ?? err}`)
|
|
536
|
+
process.exit(1)
|
|
362
537
|
}
|
|
363
|
-
process.exit(1)
|
|
364
|
-
} finally {
|
|
365
|
-
await db?.close()
|
|
366
538
|
}
|
|
539
|
+
|
|
540
|
+
await directRestore({
|
|
541
|
+
dataDir: args['data-dir'],
|
|
542
|
+
clean: args.clean,
|
|
543
|
+
sqlFile,
|
|
544
|
+
})
|
|
367
545
|
},
|
|
368
546
|
})
|
|
369
547
|
|
package/src/index.ts
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
import { spawn, type ChildProcess } from 'node:child_process'
|
|
10
10
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs'
|
|
11
11
|
import { createRequire } from 'node:module'
|
|
12
|
-
import {
|
|
12
|
+
import { dirname, resolve } from 'node:path'
|
|
13
|
+
import { fileURLToPath } from 'node:url'
|
|
13
14
|
|
|
14
15
|
import { getConfig, getConnectionString } from './config.js'
|
|
15
16
|
import { log, port, setLogLevel } from './log.js'
|
|
@@ -249,156 +250,12 @@ async function seedIfNeeded(db: PGlite, config: ZeroLiteConfig): Promise<void> {
|
|
|
249
250
|
log.orez('seeded')
|
|
250
251
|
}
|
|
251
252
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
let libDir: string
|
|
259
|
-
const sqliteEntry = resolvePackage('@rocicorp/zero-sqlite3')
|
|
260
|
-
if (sqliteEntry) {
|
|
261
|
-
libDir = resolve(sqliteEntry, '..')
|
|
262
|
-
} else {
|
|
263
|
-
// native build likely failed, find package via @rocicorp/zero
|
|
264
|
-
const zeroEntry = resolvePackage('@rocicorp/zero')
|
|
265
|
-
// walk up to find the actual node_modules dir (entry depth varies)
|
|
266
|
-
let nodeModules = dirname(zeroEntry)
|
|
267
|
-
while (nodeModules !== '/' && basename(nodeModules) !== 'node_modules') {
|
|
268
|
-
nodeModules = dirname(nodeModules)
|
|
269
|
-
}
|
|
270
|
-
const pkgDir = resolve(nodeModules, '@rocicorp', 'zero-sqlite3')
|
|
271
|
-
if (!existsSync(resolve(pkgDir, 'package.json'))) {
|
|
272
|
-
log.debug.orez('@rocicorp/zero-sqlite3 not found, skipping wasm patch')
|
|
273
|
-
return
|
|
274
|
-
}
|
|
275
|
-
libDir = resolve(pkgDir, 'lib')
|
|
276
|
-
mkdirSync(libDir, { recursive: true })
|
|
277
|
-
}
|
|
278
|
-
const indexPath = resolve(libDir, 'index.js')
|
|
279
|
-
|
|
280
|
-
// check if already patched
|
|
281
|
-
if (existsSync(indexPath)) {
|
|
282
|
-
const current = readFileSync(indexPath, 'utf-8')
|
|
283
|
-
if (current.includes('OrigDatabase')) return // already patched
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// back up originals before patching
|
|
287
|
-
if (existsSync(indexPath)) {
|
|
288
|
-
writeFileSync(indexPath + '.original', readFileSync(indexPath))
|
|
289
|
-
}
|
|
290
|
-
const dbBackupPath = resolve(libDir, 'database.js')
|
|
291
|
-
if (existsSync(dbBackupPath)) {
|
|
292
|
-
writeFileSync(dbBackupPath + '.original', readFileSync(dbBackupPath))
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// resolve bedrock-sqlite's dist entry point
|
|
296
|
-
const bedrockEntry = resolvePackage('bedrock-sqlite')
|
|
297
|
-
if (!existsSync(bedrockEntry)) {
|
|
298
|
-
log.debug.orez('bedrock-sqlite not found, skipping wasm patch')
|
|
299
|
-
return
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// inline the full shim into index.js - no external file dependency
|
|
303
|
-
const shim = `'use strict';
|
|
304
|
-
// patched by orez: bedrock-sqlite (wasm) replaces native bindings
|
|
305
|
-
var mod = require('${bedrockEntry}');
|
|
306
|
-
var OrigDatabase = mod.Database;
|
|
307
|
-
var SqliteError = mod.SqliteError;
|
|
308
|
-
|
|
309
|
-
// wrap constructor to set busy_timeout on every connection immediately.
|
|
310
|
-
function Database() {
|
|
311
|
-
var db = new OrigDatabase(...arguments);
|
|
312
|
-
try {
|
|
313
|
-
db.pragma('busy_timeout = 30000');
|
|
314
|
-
db.pragma('synchronous = normal');
|
|
315
|
-
// reduce page cache from compile-time 64MB to 8MB.
|
|
316
|
-
// wasm keeps page cache inside V8 heap (unlike native),
|
|
317
|
-
// so a smaller cache prevents OOM during initial sync.
|
|
318
|
-
db.pragma('cache_size = -8000');
|
|
319
|
-
} catch(e) {}
|
|
320
|
-
return db;
|
|
321
|
-
}
|
|
322
|
-
Database.prototype = OrigDatabase.prototype;
|
|
323
|
-
Database.prototype.constructor = Database;
|
|
324
|
-
Object.keys(OrigDatabase).forEach(function(k) { Database[k] = OrigDatabase[k]; });
|
|
325
|
-
|
|
326
|
-
// unsafeMode enables resetting sibling statements before commit/rollback
|
|
327
|
-
// (native better-sqlite3 does this in C++, we do it in JS in api.js)
|
|
328
|
-
Database.prototype.unsafeMode = function(enabled) {
|
|
329
|
-
if (enabled === undefined) enabled = true;
|
|
330
|
-
this._unsafe = !!enabled;
|
|
331
|
-
return this;
|
|
332
|
-
};
|
|
333
|
-
if (!Database.prototype.defaultSafeIntegers) Database.prototype.defaultSafeIntegers = function() { return this; };
|
|
334
|
-
if (!Database.prototype.serialize) Database.prototype.serialize = function() { throw new Error('not supported in wasm'); };
|
|
335
|
-
if (!Database.prototype.backup) Database.prototype.backup = function() { throw new Error('not supported in wasm'); };
|
|
336
|
-
|
|
337
|
-
// patch Statement prototype
|
|
338
|
-
var tmpDb = new OrigDatabase(':memory:');
|
|
339
|
-
var tmpStmt = tmpDb.prepare('SELECT 1');
|
|
340
|
-
var SP = Object.getPrototypeOf(tmpStmt);
|
|
341
|
-
if (!SP.safeIntegers) SP.safeIntegers = function() { return this; };
|
|
342
|
-
// unconditionally override scanStatus — bedrock-sqlite may have a broken
|
|
343
|
-
// native impl that returns non-undefined garbage, causing infinite loops
|
|
344
|
-
// in zero-cache's getScanstatusLoops
|
|
345
|
-
SP.scanStatus = function() { return undefined; };
|
|
346
|
-
SP.scanStatusV2 = function() { return []; };
|
|
347
|
-
SP.scanStatusReset = function() {};
|
|
348
|
-
tmpDb.close();
|
|
349
|
-
|
|
350
|
-
// scanstat constants
|
|
351
|
-
Database.SQLITE_SCANSTAT_NLOOP = 0;
|
|
352
|
-
Database.SQLITE_SCANSTAT_NVISIT = 1;
|
|
353
|
-
Database.SQLITE_SCANSTAT_EST = 2;
|
|
354
|
-
Database.SQLITE_SCANSTAT_NAME = 3;
|
|
355
|
-
Database.SQLITE_SCANSTAT_EXPLAIN = 4;
|
|
356
|
-
Database.SQLITE_SCANSTAT_SELECTID = 5;
|
|
357
|
-
Database.SQLITE_SCANSTAT_PARENTID = 6;
|
|
358
|
-
Database.SQLITE_SCANSTAT_NCYCLE = 7;
|
|
359
|
-
Database.SQLITE_SCANSTAT_COMPLEX = 8;
|
|
360
|
-
|
|
361
|
-
module.exports = Database;
|
|
362
|
-
module.exports.SqliteError = SqliteError;
|
|
363
|
-
`
|
|
364
|
-
writeFileSync(indexPath, shim)
|
|
365
|
-
|
|
366
|
-
// also patch database.js since it has top-level native addon loading
|
|
367
|
-
const dbPath = resolve(libDir, 'database.js')
|
|
368
|
-
if (existsSync(dbPath)) {
|
|
369
|
-
writeFileSync(dbPath, `'use strict';\nmodule.exports = require('./index');\n`)
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
log.debug.orez('patched @rocicorp/zero-sqlite3 -> bedrock-sqlite (wasm)')
|
|
373
|
-
} catch (e) {
|
|
374
|
-
log.orez(`sqlite wasm patch failed: ${e}`)
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
function unpatchSqliteWasm(): void {
|
|
379
|
-
// restore native @rocicorp/zero-sqlite3 if it was previously patched
|
|
380
|
-
try {
|
|
381
|
-
const sqliteEntry = resolvePackage('@rocicorp/zero-sqlite3')
|
|
382
|
-
if (!sqliteEntry) return
|
|
383
|
-
const libDir = resolve(sqliteEntry, '..')
|
|
384
|
-
const indexPath = resolve(libDir, 'index.js')
|
|
385
|
-
if (!existsSync(indexPath)) return
|
|
386
|
-
const current = readFileSync(indexPath, 'utf-8')
|
|
387
|
-
if (!current.includes('OrigDatabase')) return // not patched
|
|
388
|
-
|
|
389
|
-
// restore from backups if available
|
|
390
|
-
for (const file of ['index.js', 'database.js']) {
|
|
391
|
-
const filePath = resolve(libDir, file)
|
|
392
|
-
const backupPath = filePath + '.original'
|
|
393
|
-
if (existsSync(backupPath)) {
|
|
394
|
-
writeFileSync(filePath, readFileSync(backupPath))
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
log.orez('restored native @rocicorp/zero-sqlite3 (removed wasm patch)')
|
|
398
|
-
} catch (e) {
|
|
399
|
-
log.orez(`failed to restore native sqlite: ${e}`)
|
|
400
|
-
}
|
|
401
|
-
}
|
|
253
|
+
// resolve path to the --require hook for sqlite.
|
|
254
|
+
// the loader tries native @rocicorp/zero-sqlite3 first, falling back to
|
|
255
|
+
// bedrock-sqlite (wasm) if native bindings aren't available.
|
|
256
|
+
// loaded via NODE_OPTIONS — no files in node_modules are modified.
|
|
257
|
+
const __dirname_esm = dirname(fileURLToPath(import.meta.url))
|
|
258
|
+
const sqliteLoaderPath = resolve(__dirname_esm, 'sqlite-loader.cjs')
|
|
402
259
|
|
|
403
260
|
async function startZeroCache(config: ZeroLiteConfig): Promise<ChildProcess> {
|
|
404
261
|
// resolve @rocicorp/zero entry for finding zero-cache modules
|
|
@@ -408,11 +265,7 @@ async function startZeroCache(config: ZeroLiteConfig): Promise<ChildProcess> {
|
|
|
408
265
|
throw new Error('zero-cache not found. install @rocicorp/zero')
|
|
409
266
|
}
|
|
410
267
|
|
|
411
|
-
|
|
412
|
-
if (!config.disableWasmSqlite) {
|
|
413
|
-
patchSqliteForWasm()
|
|
414
|
-
} else {
|
|
415
|
-
unpatchSqliteWasm()
|
|
268
|
+
if (config.disableWasmSqlite) {
|
|
416
269
|
log.debug.orez('wasm sqlite disabled, using native @rocicorp/zero-sqlite3')
|
|
417
270
|
}
|
|
418
271
|
|
|
@@ -425,10 +278,13 @@ async function startZeroCache(config: ZeroLiteConfig): Promise<ChildProcess> {
|
|
|
425
278
|
NODE_ENV: 'development',
|
|
426
279
|
ZERO_LOG_LEVEL: config.logLevel,
|
|
427
280
|
ZERO_NUM_SYNC_WORKERS: '1',
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// when wasm sqlite may be used, disable the query planner — wasm's
|
|
284
|
+
// scanStatus returns garbage that causes infinite loops in zero-cache.
|
|
285
|
+
// when user forces native (--disable-wasm-sqlite), planner is safe.
|
|
286
|
+
if (!config.disableWasmSqlite) {
|
|
287
|
+
defaults.ZERO_ENABLE_QUERY_PLANNER = 'false'
|
|
432
288
|
}
|
|
433
289
|
|
|
434
290
|
const env: Record<string, string> = {
|
|
@@ -449,10 +305,10 @@ async function startZeroCache(config: ZeroLiteConfig): Promise<ChildProcess> {
|
|
|
449
305
|
throw new Error('zero-cache cli.js not found. install @rocicorp/zero')
|
|
450
306
|
}
|
|
451
307
|
|
|
452
|
-
//
|
|
453
|
-
//
|
|
308
|
+
// sqlite loader: tries native first, falls back to wasm. when user forces
|
|
309
|
+
// native via --disable-wasm-sqlite, skip the loader entirely.
|
|
454
310
|
const nodeOptions = !config.disableWasmSqlite
|
|
455
|
-
? `--max-old-space-size=16384 ${process.env.NODE_OPTIONS || ''}`
|
|
311
|
+
? `--require ${sqliteLoaderPath} --max-old-space-size=16384 ${process.env.NODE_OPTIONS || ''}`
|
|
456
312
|
: process.env.NODE_OPTIONS || ''
|
|
457
313
|
if (nodeOptions.trim()) env.NODE_OPTIONS = nodeOptions.trim()
|
|
458
314
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// require hook: intercepts @rocicorp/zero-sqlite3 to use native if available,
|
|
2
|
+
// falling back to bedrock-sqlite (wasm) seamlessly.
|
|
3
|
+
// loaded via NODE_OPTIONS='--require ./sqlite-loader.cjs'.
|
|
4
|
+
// avoids patching files in node_modules — module resolution is intercepted in-process.
|
|
5
|
+
'use strict'
|
|
6
|
+
|
|
7
|
+
const Module = require('module')
|
|
8
|
+
const path = require('path')
|
|
9
|
+
|
|
10
|
+
const shimPath = path.resolve(__dirname, 'sqlite-shim.cjs')
|
|
11
|
+
const originalResolveFilename = Module._resolveFilename
|
|
12
|
+
|
|
13
|
+
// check once at startup whether native bindings work
|
|
14
|
+
let nativeWorks = false
|
|
15
|
+
try {
|
|
16
|
+
const nativePath = originalResolveFilename.call(
|
|
17
|
+
Module,
|
|
18
|
+
'@rocicorp/zero-sqlite3',
|
|
19
|
+
module,
|
|
20
|
+
false
|
|
21
|
+
)
|
|
22
|
+
// actually load it to confirm native addon binds
|
|
23
|
+
const native = require(nativePath)
|
|
24
|
+
const testDb = new native(':memory:')
|
|
25
|
+
testDb.close()
|
|
26
|
+
nativeWorks = true
|
|
27
|
+
} catch {}
|
|
28
|
+
|
|
29
|
+
if (!nativeWorks) {
|
|
30
|
+
Module._resolveFilename = function (request, parent, isMain, options) {
|
|
31
|
+
// intercept any require of @rocicorp/zero-sqlite3 (main or subpaths)
|
|
32
|
+
if (
|
|
33
|
+
request === '@rocicorp/zero-sqlite3' ||
|
|
34
|
+
request.startsWith('@rocicorp/zero-sqlite3/')
|
|
35
|
+
) {
|
|
36
|
+
return shimPath
|
|
37
|
+
}
|
|
38
|
+
return originalResolveFilename.call(this, request, parent, isMain, options)
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/sqlite-shim.cjs
CHANGED
|
@@ -54,22 +54,16 @@ if (!StmtProto.safeIntegers) {
|
|
|
54
54
|
return this
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (!StmtProto.scanStatusV2) {
|
|
65
|
-
// returns empty stats - zero-cache uses this for query performance tracking
|
|
66
|
-
StmtProto.scanStatusV2 = function () {
|
|
67
|
-
return []
|
|
68
|
-
}
|
|
57
|
+
// unconditionally override scanStatus — bedrock-sqlite may have a broken
|
|
58
|
+
// native impl that returns non-undefined garbage, causing infinite loops
|
|
59
|
+
// in zero-cache's getScanstatusLoops
|
|
60
|
+
StmtProto.scanStatus = function () {
|
|
61
|
+
return undefined
|
|
69
62
|
}
|
|
70
|
-
|
|
71
|
-
|
|
63
|
+
StmtProto.scanStatusV2 = function () {
|
|
64
|
+
return []
|
|
72
65
|
}
|
|
66
|
+
StmtProto.scanStatusReset = function () {}
|
|
73
67
|
|
|
74
68
|
tmpDb.close()
|
|
75
69
|
|