Added pgSQL support

This commit is contained in:
Salvatore Ravidà
2022-12-15 11:19:46 +01:00
committed by Ziv
parent dea53d45ad
commit a15da8e275
20 changed files with 161798 additions and 1364 deletions

View File

@ -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
View 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);
}
}