forked from hackolade/sql-select-statement-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
34 lines (27 loc) · 1.11 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const antlr4 = require('antlr4');
const SQLSelectLexer = require('./parser/SQLSelectLexer');
const SQLSelectParser = require('./parser/SQLSelectParser');
const selectStatementListener = require('./selectStatementListener.js');
const parseSelectStatement = (sql, logger) => {
const chars = new antlr4.InputStream(sql);
const lexer = new SQLSelectLexer(chars);
const tokens = new antlr4.CommonTokenStream(lexer);
const parser = new SQLSelectParser(tokens);
parser.removeErrorListeners();
class ExprErrorListener extends antlr4.error.ErrorListener {
syntaxError(recognizer, offendingSymbol, line, column, msg) {
const error = `line ${line}:${column} ${msg}`;
if (!logger) {
console.log(new Error(error));
} else {
logger(error);
}
}
}
parser.addErrorListener(new ExprErrorListener());
const tree = parser.query();
const listener = new selectStatementListener();
antlr4.tree.ParseTreeWalker.DEFAULT.walk(listener, tree);
return listener.getResult();
};
module.exports = parseSelectStatement;