Open jlmgtech opened 1 year ago
this already exists...when a parsing error is thrown, the error object contains it's exact location, e.g.:
{
"message": "Expected \"!=\", \"#-\", \"#>\", \"#>>\", \"%\", \"&&\", \"'\", \"(\", \"*\", \"+\", \",\", \"-\", \"--\", \"->\", \"->>\", \".\", \"/\", \"/*\", \"//\", \"::\", \";\", \"<\", \"<=\", \"<>\", \"<@\", \"=\", \">\", \">=\", \"?\", \"?&\", \"?|\", \"@>\", \"AND\", \"AS\", \"BETWEEN\", \"FROM\", \"GROUP\", \"HAVING\", \"ILIKE\", \"IN\", \"INTO\", \"IS\", \"LIKE\", \"LIMIT\", \"NOT\", \"OFFSET\", \"OR\", \"ORDER\", \"REGEXP\", \"SIMILAR\", \"UNION\", \"WHERE\", \"WINDOW\", \"[\", \"\\\"\", \"`\", \"||\", [ \\t\\n\\r], [A-Za-z0-9_\\-$一-龥], [A-Za-z0-9_一-龥], [A-Za-z_一-龥], or end of input but \":\" found.",
"found": ":",
"location": {
"start": {
"offset": 10,
"line": 1,
"column": 11
},
"end": {
"offset": 11,
"line": 1,
"column": 12
}
},
"name": "SyntaxError",
"isEvalError": true,
}
To add on to @aok-solutions , you will need to implement a specific parameter in your options: includeLocations
.
In the README.md, it specifies:
const { Parser } = require('node-sql-parser');
const parser = new Parser();
const ast = parser.astify('SELECT * FROM t', { parseOptions: { includeLocations: true } });
console.log(ast);
Not a bug, more of a feature. I wasn't sure where to ask. I'm writing an interpreter for SQL and I'd like to tell the user exactly where they made a semantic error. I was going to use
sqlify()
to render the branch of the tree the problem occurred on, but sqlify only accepts top-level ast nodes (for instance, I can't sqlify a column_ref). Is there something I can use to visually show the user where their error was made (perhaps line numbers somewhere or an offset, or maybe another sqlify function?).Thank you.