Class PostgreSqlParser
- All Implemented Interfaces:
SqlParser
This parser handles PostgreSQL-specific SQL syntax including:
- PL/pgSQL blocks (functions, procedures, triggers)
- Dollar quoting ($$...$$)
- PostgreSQL-specific DML/DDL
- Special operators and functions
- Special token handling (%ROWTYPE, %TYPE, etc.)
Design Notes:
- Extends
AbstractSqlParser - Can directly instantiate:
TLexerPostgresql,TParserPostgresqlSql - Uses single parser (no secondary parser like Oracle's PL/SQL)
- Delimiter character: ';' for SQL statements
Usage Example:
// Get PostgreSQL parser from factory
SqlParser parser = SqlParserFactory.get(EDbVendor.dbvpostgresql);
// Build context
ParserContext context = new ParserContext.Builder(EDbVendor.dbvpostgresql)
.sqlText("SELECT * FROM employees WHERE dept_id = 10")
.build();
// Parse
SqlParseResult result = parser.parse(context);
// Access statements
TStatementList statements = result.getSqlStatements();
- Since:
- 3.2.0.0
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class gudusoft.gsqlparser.parser.AbstractSqlParser
AbstractSqlParser.PreparedSqlReader -
Field Summary
FieldsModifier and TypeFieldDescriptionThe PostgreSQL lexer used for tokenization (public for TGSqlParser.getFlexer())Fields inherited from class gudusoft.gsqlparser.parser.AbstractSqlParser
defaultDelimiterStr, delimiterChar, frameStack, globalContext, globalFrame, lexer, parserContext, sourcetokenlist, sqlcmds, sqlEnv, sqlstatements, syntaxErrors, vendor -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidCall PostgreSQL-specific raw statement extraction logic.protected TCustomLexergetLexer(ParserContext context) Return the PostgreSQL lexer instance.protected TCustomParsergetParser(ParserContext context, TSourceTokenList tokens) Return the PostgreSQL SQL parser instance with updated token list.protected voidonRawStatementComplete(ParserContext context, TCustomSqlStatement statement, TCustomParser mainParser, TCustomParser secondaryParser, TStatementList statementList, boolean isLastStatement, SqlParseResult.Builder builder) Override onRawStatementComplete to add PostgreSQL-specific processing.protected TStatementListperformParsing(ParserContext context, TCustomParser parser, TCustomParser secondaryParser, TSourceTokenList tokens, TStatementList rawStatements) Perform full parsing of statements with syntax checking.protected voidSetup PostgreSQL parser for raw statement extraction.protected voidCall PostgreSQL-specific tokenization logic.toString()Methods inherited from class gudusoft.gsqlparser.parser.AbstractSqlParser
afterStatementParsed, attemptErrorRecovery, copyErrorsFromStatement, doAfterTokenize, doExtractRawStatements, extractRawStatements, getanewsourcetoken, getDefaultDelimiterStr, getDelimiterChar, getErrorCount, getrawsqlstatements, getSecondaryParser, getSyntaxErrors, getVendor, handleStatementParsingException, initializeGlobalContext, isDollarFunctionDelimiter, onRawStatementCompleteVendorSpecific, parse, performInterpreter, performSemanticAnalysis, performTokenization, prepareSqlReader, processTokensBeforeParse, processTokensInTokenTable, setTokenHandle, tokenize, towinlinebreak
-
Field Details
-
flexer
The PostgreSQL lexer used for tokenization (public for TGSqlParser.getFlexer())
-
-
Constructor Details
-
PostgreSqlParser
public PostgreSqlParser()Construct PostgreSQL SQL parser.Configures the parser for PostgreSQL database with default delimiter: semicolon (;)
Following the original TGSqlParser pattern, the lexer and parser are created once in the constructor and reused for all parsing operations.
-
-
Method Details
-
getLexer
Return the PostgreSQL lexer instance.The lexer is created once in the constructor and reused for all parsing operations. This method simply returns the existing instance, matching the original TGSqlParser pattern where the lexer is created once and reset before each use.
- Specified by:
getLexerin classAbstractSqlParser- Parameters:
context- parser context (not used, lexer already created)- Returns:
- the PostgreSQL lexer instance created in constructor
-
getParser
Return the PostgreSQL SQL parser instance with updated token list.The parser is created once in the constructor and reused for all parsing operations. This method updates the token list and returns the existing instance, matching the original TGSqlParser pattern.
- Specified by:
getParserin classAbstractSqlParser- Parameters:
context- parser context (not used, parser already created)tokens- source token list to parse- Returns:
- the PostgreSQL SQL parser instance created in constructor
-
tokenizeVendorSql
Call PostgreSQL-specific tokenization logic.Delegates to dopostgresqltexttotokenlist which handles PostgreSQL's specific keyword recognition, dollar quotes, and token generation.
- Specified by:
tokenizeVendorSqlin classAbstractSqlParser
-
setupVendorParsersForExtraction
Setup PostgreSQL parser for raw statement extraction.PostgreSQL uses a single parser, so we inject sqlcmds and update the token list for the main parser only.
- Specified by:
setupVendorParsersForExtractionin classAbstractSqlParser
-
extractVendorRawStatements
Call PostgreSQL-specific raw statement extraction logic.Delegates to dopostgresqlgetrawsqlstatements which handles PostgreSQL's statement delimiters (semicolon for SQL, $$ for PL/pgSQL functions).
- Specified by:
extractVendorRawStatementsin classAbstractSqlParser- Parameters:
builder- the result builder to populate with raw statements
-
performParsing
protected TStatementList performParsing(ParserContext context, TCustomParser parser, TCustomParser secondaryParser, TSourceTokenList tokens, TStatementList rawStatements) Perform full parsing of statements with syntax checking.This method orchestrates the parsing of all statements.
Important: This method does NOT extract raw statements - they are passed in as a parameter already extracted by
AbstractSqlParser.extractRawStatements(gudusoft.gsqlparser.parser.ParserContext, gudusoft.gsqlparser.TSourceTokenList, gudusoft.gsqlparser.TCustomLexer, long).- Specified by:
performParsingin classAbstractSqlParser- Parameters:
context- parser contextparser- main SQL parser (TParserPostgresql)secondaryParser- not used for PostgreSQLtokens- source token listrawStatements- raw statements already extracted (never null)- Returns:
- list of fully parsed statements with AST built
-
onRawStatementComplete
protected void onRawStatementComplete(ParserContext context, TCustomSqlStatement statement, TCustomParser mainParser, TCustomParser secondaryParser, TStatementList statementList, boolean isLastStatement, SqlParseResult.Builder builder) Override onRawStatementComplete to add PostgreSQL-specific processing.This method handles special processing for stored procedures/functions whose body is written in non-SQL languages (e.g., PL/Python, PL/Perl, PL/R).
For such routines, the tokens between dollar-quote delimiters ($$, $function$, etc.) are marked as non-SQL content to prevent parsing errors.
- Overrides:
onRawStatementCompletein classAbstractSqlParser- Parameters:
context- parser contextstatement- the completed statementmainParser- main SQL parsersecondaryParser- secondary parser (not used for PostgreSQL)statementList- list to add the statement toisLastStatement- whether this is the last statementbuilder- result builder for populating parse results
-
toString
- Overrides:
toStringin classAbstractSqlParser
-