orez 0.0.27 → 0.0.29
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 +123 -14
- package/dist/cli.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/package.json +4 -3
- package/src/cli.ts +131 -14
- package/src/config.ts +1 -1
package/dist/cli.js
CHANGED
|
@@ -3,6 +3,7 @@ import { spawn } from 'node:child_process';
|
|
|
3
3
|
import { existsSync, writeFileSync } from 'node:fs';
|
|
4
4
|
import { resolve } from 'node:path';
|
|
5
5
|
import { defineCommand, runMain } from 'citty';
|
|
6
|
+
import { deparseSync, loadModule, parseSync } from 'pgsql-parser';
|
|
6
7
|
import { startZeroLite } from './index.js';
|
|
7
8
|
import { log } from './log.js';
|
|
8
9
|
const s3Command = defineCommand({
|
|
@@ -110,19 +111,62 @@ const UNSUPPORTED_EXTENSIONS = new Set([
|
|
|
110
111
|
// check if a statement should be skipped during restore
|
|
111
112
|
function shouldSkipStatement(stmt) {
|
|
112
113
|
const trimmed = stmt.trimStart();
|
|
113
|
-
// skip psql meta-commands like \restrict
|
|
114
|
+
// skip psql meta-commands like \restrict (can't be parsed)
|
|
114
115
|
if (trimmed.startsWith('\\'))
|
|
115
116
|
return true;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
117
|
+
let parsed;
|
|
118
|
+
try {
|
|
119
|
+
parsed = parseSync(trimmed);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false; // if parser can't handle it, let pglite try
|
|
123
|
+
}
|
|
124
|
+
for (const entry of parsed.stmts) {
|
|
125
|
+
const nodeType = Object.keys(entry.stmt)[0];
|
|
126
|
+
const node = entry.stmt[nodeType];
|
|
127
|
+
// skip SET transaction_timeout (pg 18+ artifact)
|
|
128
|
+
if (nodeType === 'VariableSetStmt' && node.name === 'transaction_timeout')
|
|
129
|
+
return true;
|
|
130
|
+
// skip CREATE EXTENSION for unsupported extensions
|
|
131
|
+
if (nodeType === 'CreateExtensionStmt' && UNSUPPORTED_EXTENSIONS.has(node.extname))
|
|
132
|
+
return true;
|
|
133
|
+
// skip DROP EXTENSION for unsupported extensions
|
|
134
|
+
if (nodeType === 'DropStmt' && node.removeType === 'OBJECT_EXTENSION') {
|
|
135
|
+
const extName = node.objects?.[0]?.String?.sval;
|
|
136
|
+
if (extName && UNSUPPORTED_EXTENSIONS.has(extName))
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
// skip COMMENT ON EXTENSION for unsupported extensions
|
|
140
|
+
if (nodeType === 'CommentStmt' && node.objtype === 'OBJECT_EXTENSION') {
|
|
141
|
+
const extName = node.object?.String?.sval;
|
|
142
|
+
if (extName && UNSUPPORTED_EXTENSIONS.has(extName))
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
123
146
|
return false;
|
|
124
147
|
}
|
|
125
|
-
//
|
|
148
|
+
// how many data statements to batch into a single transaction
|
|
149
|
+
const BATCH_SIZE = 500;
|
|
150
|
+
// run CHECKPOINT every N batches to flush WAL and reclaim wasm memory
|
|
151
|
+
const CHECKPOINT_INTERVAL = 10;
|
|
152
|
+
// true for statements that are data manipulation (INSERT/UPDATE/DELETE/COPY)
|
|
153
|
+
// these get batched into transactions. DDL runs outside batches.
|
|
154
|
+
function isDataStatement(stmt) {
|
|
155
|
+
try {
|
|
156
|
+
const parsed = parseSync(stmt);
|
|
157
|
+
if (parsed.stmts.length === 0)
|
|
158
|
+
return false;
|
|
159
|
+
const nodeType = Object.keys(parsed.stmts[0].stmt)[0];
|
|
160
|
+
return (nodeType === 'InsertStmt' ||
|
|
161
|
+
nodeType === 'UpdateStmt' ||
|
|
162
|
+
nodeType === 'DeleteStmt' ||
|
|
163
|
+
nodeType === 'CopyStmt');
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// stream a sql dump file statement-by-statement with transaction batching
|
|
126
170
|
async function execDumpFile(db, filePath) {
|
|
127
171
|
const { createReadStream } = await import('node:fs');
|
|
128
172
|
const { createInterface } = await import('node:readline');
|
|
@@ -133,11 +177,40 @@ async function execDumpFile(db, filePath) {
|
|
|
133
177
|
let buf = '';
|
|
134
178
|
let executed = 0;
|
|
135
179
|
let skipped = 0;
|
|
180
|
+
let batchCount = 0;
|
|
181
|
+
let batchesSinceCheckpoint = 0;
|
|
182
|
+
let inBatch = false;
|
|
183
|
+
let dollarTag = null; // tracks $tag$ quoting
|
|
184
|
+
async function flushBatch() {
|
|
185
|
+
if (inBatch) {
|
|
186
|
+
await db.exec('COMMIT');
|
|
187
|
+
inBatch = false;
|
|
188
|
+
batchesSinceCheckpoint++;
|
|
189
|
+
if (batchesSinceCheckpoint >= CHECKPOINT_INTERVAL) {
|
|
190
|
+
await db.exec('CHECKPOINT');
|
|
191
|
+
batchesSinceCheckpoint = 0;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
batchCount = 0;
|
|
195
|
+
}
|
|
136
196
|
for await (const line of rl) {
|
|
137
|
-
// skip empty lines and sql comments
|
|
138
|
-
if (line === '' || line.startsWith('--'))
|
|
197
|
+
// skip empty lines and sql comments (only outside dollar-quoted blocks)
|
|
198
|
+
if (!dollarTag && (line === '' || line.startsWith('--')))
|
|
139
199
|
continue;
|
|
140
200
|
buf += (buf ? '\n' : '') + line;
|
|
201
|
+
// track dollar-quoting: $$ or $tag$
|
|
202
|
+
const dollarMatches = line.matchAll(/(\$[a-zA-Z_]*\$)/g);
|
|
203
|
+
for (const m of dollarMatches) {
|
|
204
|
+
if (dollarTag === null) {
|
|
205
|
+
dollarTag = m[1];
|
|
206
|
+
}
|
|
207
|
+
else if (m[1] === dollarTag) {
|
|
208
|
+
dollarTag = null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// can't end a statement while inside a dollar-quoted block
|
|
212
|
+
if (dollarTag)
|
|
213
|
+
continue;
|
|
141
214
|
// statements end with ; at end of line (pg_dump always formats this way)
|
|
142
215
|
if (!line.trimEnd().endsWith(';'))
|
|
143
216
|
continue;
|
|
@@ -147,10 +220,44 @@ async function execDumpFile(db, filePath) {
|
|
|
147
220
|
skipped++;
|
|
148
221
|
continue;
|
|
149
222
|
}
|
|
150
|
-
|
|
151
|
-
|
|
223
|
+
// rewrite CREATE SCHEMA → CREATE SCHEMA IF NOT EXISTS
|
|
224
|
+
let rewritten = stmt;
|
|
225
|
+
try {
|
|
226
|
+
const parsed = parseSync(stmt);
|
|
227
|
+
if (parsed.stmts.length > 0) {
|
|
228
|
+
const nodeType = Object.keys(parsed.stmts[0].stmt)[0];
|
|
229
|
+
if (nodeType === 'CreateSchemaStmt' &&
|
|
230
|
+
!parsed.stmts[0].stmt.CreateSchemaStmt.if_not_exists) {
|
|
231
|
+
parsed.stmts[0].stmt.CreateSchemaStmt.if_not_exists = true;
|
|
232
|
+
rewritten = deparseSync(parsed);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// if parse/deparse fails, use original
|
|
238
|
+
}
|
|
239
|
+
if (isDataStatement(rewritten)) {
|
|
240
|
+
// batch data statements into transactions
|
|
241
|
+
if (!inBatch) {
|
|
242
|
+
await db.exec('BEGIN');
|
|
243
|
+
inBatch = true;
|
|
244
|
+
}
|
|
245
|
+
await db.exec(rewritten);
|
|
246
|
+
executed++;
|
|
247
|
+
batchCount++;
|
|
248
|
+
if (batchCount >= BATCH_SIZE) {
|
|
249
|
+
await flushBatch();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
// DDL runs outside batches
|
|
254
|
+
await flushBatch();
|
|
255
|
+
await db.exec(rewritten);
|
|
256
|
+
executed++;
|
|
257
|
+
}
|
|
152
258
|
}
|
|
153
|
-
// flush
|
|
259
|
+
// flush remaining batch + buffer
|
|
260
|
+
await flushBatch();
|
|
154
261
|
if (buf.trim()) {
|
|
155
262
|
if (!shouldSkipStatement(buf)) {
|
|
156
263
|
await db.exec(buf);
|
|
@@ -188,6 +295,7 @@ const pgRestoreCommand = defineCommand({
|
|
|
188
295
|
const { PGlite } = await import('@electric-sql/pglite');
|
|
189
296
|
const { vector } = await import('@electric-sql/pglite/vector');
|
|
190
297
|
const { pg_trgm } = await import('@electric-sql/pglite/contrib/pg_trgm');
|
|
298
|
+
await loadModule(); // initialize pgsql-parser WASM
|
|
191
299
|
const sqlFile = args.file;
|
|
192
300
|
if (!existsSync(sqlFile)) {
|
|
193
301
|
console.error(`error: file not found: ${sqlFile}`);
|
|
@@ -199,6 +307,7 @@ const pgRestoreCommand = defineCommand({
|
|
|
199
307
|
db = new PGlite({
|
|
200
308
|
dataDir: dataPath,
|
|
201
309
|
extensions: { vector, pg_trgm },
|
|
310
|
+
relaxedDurability: true,
|
|
202
311
|
});
|
|
203
312
|
await db.waitReady;
|
|
204
313
|
if (args.clean) {
|
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/config.js
CHANGED
|
@@ -8,7 +8,7 @@ export function getConfig(overrides = {}) {
|
|
|
8
8
|
migrationsDir: overrides.migrationsDir || '',
|
|
9
9
|
seedFile: overrides.seedFile || 'src/database/seed.sql',
|
|
10
10
|
skipZeroCache: overrides.skipZeroCache || false,
|
|
11
|
-
disableWasmSqlite: overrides.disableWasmSqlite ??
|
|
11
|
+
disableWasmSqlite: overrides.disableWasmSqlite ?? false,
|
|
12
12
|
logLevel: overrides.logLevel || 'warn',
|
|
13
13
|
pgliteOptions: overrides.pgliteOptions || {},
|
|
14
14
|
onDbReady: overrides.onDbReady || '',
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,SAAS,CAAC,YAAqC,EAAE;IAC/D,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,OAAO;QACrC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,IAAI;QAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,IAAI;QACpC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;QAClC,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,UAAU;QAC9C,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;QAC5C,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,uBAAuB;QACvD,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,KAAK;QAC/C,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,IAAI,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,SAAS,CAAC,YAAqC,EAAE;IAC/D,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,OAAO;QACrC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,IAAI;QAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,IAAI;QACpC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;QAClC,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,UAAU;QAC9C,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;QAC5C,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,uBAAuB;QACvD,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,KAAK;QAC/C,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,IAAI,KAAK;QACvD,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,MAAM;QACtC,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;QAC5C,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;KACrC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAsB,EAAE,MAAM,GAAG,UAAU;IAC7E,OAAO,gBAAgB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,cAAc,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAA;AAClG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orez",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.29",
|
|
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.21",
|
|
50
50
|
"citty": "^0.2.0",
|
|
51
|
-
"pg-gateway": "^0.3.0-beta.4"
|
|
51
|
+
"pg-gateway": "^0.3.0-beta.4",
|
|
52
|
+
"pgsql-parser": "^17.9.11"
|
|
52
53
|
},
|
|
53
54
|
"peerDependencies": {
|
|
54
55
|
"vite": ">=5"
|
package/src/cli.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { existsSync, writeFileSync } from 'node:fs'
|
|
|
4
4
|
import { resolve } from 'node:path'
|
|
5
5
|
|
|
6
6
|
import { defineCommand, runMain } from 'citty'
|
|
7
|
+
import { deparseSync, loadModule, parseSync } from 'pgsql-parser'
|
|
7
8
|
|
|
8
9
|
import { startZeroLite } from './index.js'
|
|
9
10
|
import { log } from './log.js'
|
|
@@ -119,19 +120,67 @@ const UNSUPPORTED_EXTENSIONS = new Set([
|
|
|
119
120
|
// check if a statement should be skipped during restore
|
|
120
121
|
function shouldSkipStatement(stmt: string): boolean {
|
|
121
122
|
const trimmed = stmt.trimStart()
|
|
122
|
-
// skip psql meta-commands like \restrict
|
|
123
|
+
// skip psql meta-commands like \restrict (can't be parsed)
|
|
123
124
|
if (trimmed.startsWith('\\')) return true
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
125
|
+
|
|
126
|
+
let parsed
|
|
127
|
+
try {
|
|
128
|
+
parsed = parseSync(trimmed)
|
|
129
|
+
} catch {
|
|
130
|
+
return false // if parser can't handle it, let pglite try
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
for (const entry of parsed.stmts) {
|
|
134
|
+
const nodeType = Object.keys(entry.stmt)[0]
|
|
135
|
+
const node = entry.stmt[nodeType]
|
|
136
|
+
|
|
137
|
+
// skip SET transaction_timeout (pg 18+ artifact)
|
|
138
|
+
if (nodeType === 'VariableSetStmt' && node.name === 'transaction_timeout') return true
|
|
139
|
+
|
|
140
|
+
// skip CREATE EXTENSION for unsupported extensions
|
|
141
|
+
if (nodeType === 'CreateExtensionStmt' && UNSUPPORTED_EXTENSIONS.has(node.extname))
|
|
142
|
+
return true
|
|
143
|
+
|
|
144
|
+
// skip DROP EXTENSION for unsupported extensions
|
|
145
|
+
if (nodeType === 'DropStmt' && node.removeType === 'OBJECT_EXTENSION') {
|
|
146
|
+
const extName = node.objects?.[0]?.String?.sval
|
|
147
|
+
if (extName && UNSUPPORTED_EXTENSIONS.has(extName)) return true
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// skip COMMENT ON EXTENSION for unsupported extensions
|
|
151
|
+
if (nodeType === 'CommentStmt' && node.objtype === 'OBJECT_EXTENSION') {
|
|
152
|
+
const extName = node.object?.String?.sval
|
|
153
|
+
if (extName && UNSUPPORTED_EXTENSIONS.has(extName)) return true
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
131
157
|
return false
|
|
132
158
|
}
|
|
133
159
|
|
|
134
|
-
//
|
|
160
|
+
// how many data statements to batch into a single transaction
|
|
161
|
+
const BATCH_SIZE = 500
|
|
162
|
+
// run CHECKPOINT every N batches to flush WAL and reclaim wasm memory
|
|
163
|
+
const CHECKPOINT_INTERVAL = 10
|
|
164
|
+
|
|
165
|
+
// true for statements that are data manipulation (INSERT/UPDATE/DELETE/COPY)
|
|
166
|
+
// these get batched into transactions. DDL runs outside batches.
|
|
167
|
+
function isDataStatement(stmt: string): boolean {
|
|
168
|
+
try {
|
|
169
|
+
const parsed = parseSync(stmt)
|
|
170
|
+
if (parsed.stmts.length === 0) return false
|
|
171
|
+
const nodeType = Object.keys(parsed.stmts[0].stmt)[0]
|
|
172
|
+
return (
|
|
173
|
+
nodeType === 'InsertStmt' ||
|
|
174
|
+
nodeType === 'UpdateStmt' ||
|
|
175
|
+
nodeType === 'DeleteStmt' ||
|
|
176
|
+
nodeType === 'CopyStmt'
|
|
177
|
+
)
|
|
178
|
+
} catch {
|
|
179
|
+
return false
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// stream a sql dump file statement-by-statement with transaction batching
|
|
135
184
|
async function execDumpFile(
|
|
136
185
|
db: { exec: (sql: string) => Promise<unknown> },
|
|
137
186
|
filePath: string
|
|
@@ -147,13 +196,43 @@ async function execDumpFile(
|
|
|
147
196
|
let buf = ''
|
|
148
197
|
let executed = 0
|
|
149
198
|
let skipped = 0
|
|
199
|
+
let batchCount = 0
|
|
200
|
+
let batchesSinceCheckpoint = 0
|
|
201
|
+
let inBatch = false
|
|
202
|
+
let dollarTag: string | null = null // tracks $tag$ quoting
|
|
203
|
+
|
|
204
|
+
async function flushBatch() {
|
|
205
|
+
if (inBatch) {
|
|
206
|
+
await db.exec('COMMIT')
|
|
207
|
+
inBatch = false
|
|
208
|
+
batchesSinceCheckpoint++
|
|
209
|
+
if (batchesSinceCheckpoint >= CHECKPOINT_INTERVAL) {
|
|
210
|
+
await db.exec('CHECKPOINT')
|
|
211
|
+
batchesSinceCheckpoint = 0
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
batchCount = 0
|
|
215
|
+
}
|
|
150
216
|
|
|
151
217
|
for await (const line of rl) {
|
|
152
|
-
// skip empty lines and sql comments
|
|
153
|
-
if (line === '' || line.startsWith('--')) continue
|
|
218
|
+
// skip empty lines and sql comments (only outside dollar-quoted blocks)
|
|
219
|
+
if (!dollarTag && (line === '' || line.startsWith('--'))) continue
|
|
154
220
|
|
|
155
221
|
buf += (buf ? '\n' : '') + line
|
|
156
222
|
|
|
223
|
+
// track dollar-quoting: $$ or $tag$
|
|
224
|
+
const dollarMatches = line.matchAll(/(\$[a-zA-Z_]*\$)/g)
|
|
225
|
+
for (const m of dollarMatches) {
|
|
226
|
+
if (dollarTag === null) {
|
|
227
|
+
dollarTag = m[1]
|
|
228
|
+
} else if (m[1] === dollarTag) {
|
|
229
|
+
dollarTag = null
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// can't end a statement while inside a dollar-quoted block
|
|
234
|
+
if (dollarTag) continue
|
|
235
|
+
|
|
157
236
|
// statements end with ; at end of line (pg_dump always formats this way)
|
|
158
237
|
if (!line.trimEnd().endsWith(';')) continue
|
|
159
238
|
|
|
@@ -165,11 +244,46 @@ async function execDumpFile(
|
|
|
165
244
|
continue
|
|
166
245
|
}
|
|
167
246
|
|
|
168
|
-
|
|
169
|
-
|
|
247
|
+
// rewrite CREATE SCHEMA → CREATE SCHEMA IF NOT EXISTS
|
|
248
|
+
let rewritten = stmt
|
|
249
|
+
try {
|
|
250
|
+
const parsed = parseSync(stmt)
|
|
251
|
+
if (parsed.stmts.length > 0) {
|
|
252
|
+
const nodeType = Object.keys(parsed.stmts[0].stmt)[0]
|
|
253
|
+
if (
|
|
254
|
+
nodeType === 'CreateSchemaStmt' &&
|
|
255
|
+
!parsed.stmts[0].stmt.CreateSchemaStmt.if_not_exists
|
|
256
|
+
) {
|
|
257
|
+
parsed.stmts[0].stmt.CreateSchemaStmt.if_not_exists = true
|
|
258
|
+
rewritten = deparseSync(parsed)
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
} catch {
|
|
262
|
+
// if parse/deparse fails, use original
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (isDataStatement(rewritten)) {
|
|
266
|
+
// batch data statements into transactions
|
|
267
|
+
if (!inBatch) {
|
|
268
|
+
await db.exec('BEGIN')
|
|
269
|
+
inBatch = true
|
|
270
|
+
}
|
|
271
|
+
await db.exec(rewritten)
|
|
272
|
+
executed++
|
|
273
|
+
batchCount++
|
|
274
|
+
if (batchCount >= BATCH_SIZE) {
|
|
275
|
+
await flushBatch()
|
|
276
|
+
}
|
|
277
|
+
} else {
|
|
278
|
+
// DDL runs outside batches
|
|
279
|
+
await flushBatch()
|
|
280
|
+
await db.exec(rewritten)
|
|
281
|
+
executed++
|
|
282
|
+
}
|
|
170
283
|
}
|
|
171
284
|
|
|
172
|
-
// flush
|
|
285
|
+
// flush remaining batch + buffer
|
|
286
|
+
await flushBatch()
|
|
173
287
|
if (buf.trim()) {
|
|
174
288
|
if (!shouldSkipStatement(buf)) {
|
|
175
289
|
await db.exec(buf)
|
|
@@ -209,6 +323,8 @@ const pgRestoreCommand = defineCommand({
|
|
|
209
323
|
const { vector } = await import('@electric-sql/pglite/vector')
|
|
210
324
|
const { pg_trgm } = await import('@electric-sql/pglite/contrib/pg_trgm')
|
|
211
325
|
|
|
326
|
+
await loadModule() // initialize pgsql-parser WASM
|
|
327
|
+
|
|
212
328
|
const sqlFile = args.file
|
|
213
329
|
if (!existsSync(sqlFile)) {
|
|
214
330
|
console.error(`error: file not found: ${sqlFile}`)
|
|
@@ -222,6 +338,7 @@ const pgRestoreCommand = defineCommand({
|
|
|
222
338
|
db = new PGlite({
|
|
223
339
|
dataDir: dataPath,
|
|
224
340
|
extensions: { vector, pg_trgm },
|
|
341
|
+
relaxedDurability: true,
|
|
225
342
|
})
|
|
226
343
|
await db.waitReady
|
|
227
344
|
|
package/src/config.ts
CHANGED
|
@@ -27,7 +27,7 @@ export function getConfig(overrides: Partial<ZeroLiteConfig> = {}): ZeroLiteConf
|
|
|
27
27
|
migrationsDir: overrides.migrationsDir || '',
|
|
28
28
|
seedFile: overrides.seedFile || 'src/database/seed.sql',
|
|
29
29
|
skipZeroCache: overrides.skipZeroCache || false,
|
|
30
|
-
disableWasmSqlite: overrides.disableWasmSqlite ??
|
|
30
|
+
disableWasmSqlite: overrides.disableWasmSqlite ?? false,
|
|
31
31
|
logLevel: overrides.logLevel || 'warn',
|
|
32
32
|
pgliteOptions: overrides.pgliteOptions || {},
|
|
33
33
|
onDbReady: overrides.onDbReady || '',
|