-
-
Notifications
You must be signed in to change notification settings - Fork 63
Open
Description
Summary
When pg-minify fails, Graphile Migrate outputs pg-minify's error, but doesn't relate it to the file that actually caused the problem. This is particularly problematic if you have a large (e.g. initial) migration and you're using the current/ folder - you don't know which file the error occurred in.
Steps to reproduce
current/12000-insert_iso3166_countries.sql:
COPY countries (name, alpha_2, code) FROM stdin DELIMITER '|';
Kyrgyzstan|KG|417
Lao People's Democratic Republic|LA|418
Latvia|LV|428
\.Expected results
Error on line 3 of 12000-insert_iso3166_countries.sql (we don't support COPY syntax).
Actual results
🛑 Error occurred whilst processing migration
SQLParsingError: Error parsing SQL at {line:24153,col:11}: Unclosed text block.
Additional context
graphile-migrate 1.0.1; linux; current/ folder.
Possible Solution
The following mod to dist/commands/watch.js gives more information:
let currentBodyMinified;
try {
currentBodyMinified = pgMinify(currentBodyFromDryRun);
} catch (e) {
const matches = e.message.match(/Error parsing SQL at \{line:(\d+),col:(\d+)\}/);
if (matches) {
const [_, ln, col] = matches;
const lines = currentBodyFromDryRun.split("\n");
const leadingLines = lines.slice(0, +ln);
const lastSplit = [...leadingLines].reverse().find(l => l.match(/^--! split/));
let filename = null;
let offset = 0;
if (lastSplit) {
filename = lastSplit.split(':')[1].trim();
const index = leadingLines.indexOf(lastSplit);
offset = index + 1;
}
const previousLine = lines[+ln - 2];
const line = lines[+ln - 1];
const nextLine = lines[+ln];
const details = filename ? `current/${filename} line ${+ln - offset}-ish` : `current.sql line ${ln}-ish`
console.error(`Error happened around here ${details}:`);
console.error();
console.error(previousLine || "");
console.error(line || "");
console.error("-".repeat(+col - 1) + "^");
console.error(nextLine || "");
}
throw e;
}produces:
Error happened around here current/12000-insert_iso3166_countries.sql line 3-ish:
Kyrgyzstan|KG|417
Lao People's Democratic Republic|LA|418
----------^
Latvia|LV|428
🛑 Error occurred whilst processing migration
SQLParsingError: Error parsing SQL at {line:24153,col:11}: Unclosed text block.
Metadata
Metadata
Assignees
Labels
No labels