Added pgSQL support
This commit is contained in:
@ -23,7 +23,8 @@ export default abstract class BasicParser<C = any> {
|
||||
parser.removeErrorListeners();
|
||||
parser.addErrorListener(new ParserErrorListener(errorListener));
|
||||
|
||||
const parserTree = parser.program();
|
||||
// Note : needed by pgsql
|
||||
const parserTree = parser.program? parser.program() : parser.root();
|
||||
|
||||
return parserTree;
|
||||
}
|
||||
@ -37,7 +38,12 @@ export default abstract class BasicParser<C = any> {
|
||||
parser.removeErrorListeners();
|
||||
parser.addErrorListener(new ParserErrorCollector(syntaxErrors));
|
||||
|
||||
parser.program();
|
||||
// Note : needed by pgsql
|
||||
if (parser.program) {
|
||||
parser.program();
|
||||
} else {
|
||||
parser.root();
|
||||
}
|
||||
|
||||
return lexerError.concat(syntaxErrors);
|
||||
}
|
||||
@ -89,7 +95,8 @@ export default abstract class BasicParser<C = any> {
|
||||
const parser = this.createParser(input);
|
||||
this._parser = parser;
|
||||
|
||||
const tree = parser.program();
|
||||
// Note : needed by pgsql
|
||||
const tree = parser.program? parser.program() : parser.root();
|
||||
return tree.toStringTree(parser.ruleNames);
|
||||
}
|
||||
|
||||
|
17
src/parser/pgsql.ts
Normal file
17
src/parser/pgsql.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { InputStream, CommonTokenStream, Lexer } from 'antlr4';
|
||||
import { PostgreSQLLexer } from '../lib/pgsql/PostgreSQLLexer';
|
||||
import { PostgreSQLParser } from '../lib/pgsql/PostgreSQLParser';
|
||||
|
||||
import BasicParser from './common/basicParser';
|
||||
|
||||
export default class PLSQLParser extends BasicParser {
|
||||
public createLexer(input: string): Lexer {
|
||||
const chars = new InputStream(input.toUpperCase());
|
||||
const lexer = <unknown> new PostgreSQLLexer(chars) as Lexer;
|
||||
return lexer;
|
||||
}
|
||||
public createParserFromLexer(lexer: Lexer): any {
|
||||
const tokenStream = new CommonTokenStream(lexer);
|
||||
return new PostgreSQLParser(tokenStream);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user