Class SparkSqlParser
- All Implemented Interfaces:
SqlParser
This parser handles SparkSQL-specific SQL syntax including:
- SparkSQL DML/DDL operations
- Special token handling for DATE, TIME, TIMESTAMP, INTERVAL
- MySQL-style SOURCE commands
- Stored procedures, functions, and triggers
Implementation Status: MIGRATED
- Completed: Full migration from TGSqlParser to AbstractSqlParser
- Tokenization: dosparksqltexttotokenlist()
- Raw Extraction: dosparksqlgetrawsqlstatements()
- Parsing: Fully self-contained using TParserSparksql
- Since:
- 3.2.0.0
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class gudusoft.gsqlparser.parser.AbstractSqlParser
AbstractSqlParser.PreparedSqlReader -
Field Summary
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 voidHook for vendor-specific post-processing after statement is parsed.protected voidHook method for vendor-specific raw statement extraction.protected TCustomLexergetLexer(ParserContext context) Get the lexer for this vendor.protected TCustomParsergetParser(ParserContext context, TSourceTokenList tokens) Get the main parser for this vendor.protected TCustomParsergetSecondaryParser(ParserContext context, TSourceTokenList tokens) Get secondary parser (e.g., PL/SQL for Oracle).Get the database vendor this parser handles.protected voidHandle error recovery for CREATE TABLE statements.protected voidperformInterpreter(ParserContext context, TStatementList statements) Perform interpretation/evaluation on parsed statements.protected TStatementListperformParsing(ParserContext context, TCustomParser mainParser, TCustomParser secondaryParser, TSourceTokenList tokens, TStatementList rawStatements) Perform actual parsing with syntax checking.protected voidperformSemanticAnalysis(ParserContext context, TStatementList statements) Perform semantic analysis on parsed statements.protected voidHook method to setup parsers before raw statement extraction.protected voidHook method for vendor-specific tokenization.toString()Methods inherited from class gudusoft.gsqlparser.parser.AbstractSqlParser
attemptErrorRecovery, copyErrorsFromStatement, doAfterTokenize, doExtractRawStatements, extractRawStatements, getanewsourcetoken, getDefaultDelimiterStr, getDelimiterChar, getErrorCount, getrawsqlstatements, getSyntaxErrors, handleStatementParsingException, initializeGlobalContext, isDollarFunctionDelimiter, onRawStatementComplete, onRawStatementCompleteVendorSpecific, parse, performTokenization, prepareSqlReader, processTokensBeforeParse, processTokensInTokenTable, setTokenHandle, tokenize, towinlinebreak
-
Constructor Details
-
SparkSqlParser
public SparkSqlParser()Construct SparkSQL parser.Configures the parser for SparkSQL with default delimiter (;).
Following the original TGSqlParser pattern (lines 1285-1293), the lexer and parser are created once in the constructor and reused for all parsing operations to avoid unnecessary object allocation overhead.
-
-
Method Details
-
getVendor
Description copied from interface:SqlParserGet the database vendor this parser handles.- Specified by:
getVendorin interfaceSqlParser- Overrides:
getVendorin classAbstractSqlParser- Returns:
- the database vendor (e.g., dbvoracle, dbvmysql)
-
getLexer
Description copied from class:AbstractSqlParserGet the lexer for this vendor.Subclass Responsibility: Return vendor-specific lexer instance. The lexer may be created fresh or cached/reused for performance.
Example:
protected TCustomLexer getLexer(ParserContext context) { TLexerOracle lexer = new TLexerOracle(); lexer.delimiterchar = delimiterChar; lexer.defaultDelimiterStr = defaultDelimiterStr; return lexer; }- Specified by:
getLexerin classAbstractSqlParser- Parameters:
context- the parser context- Returns:
- configured lexer instance (never null)
-
getParser
Description copied from class:AbstractSqlParserGet the main parser for this vendor.Subclass Responsibility: Return vendor-specific parser instance. The parser may be created fresh or cached/reused for performance. If reusing, the token list should be updated.
Example:
protected TCustomParser getParser(ParserContext context, TSourceTokenList tokens) { TParserOracleSql parser = new TParserOracleSql(tokens); parser.lexer = getLexer(context); return parser; }- Specified by:
getParserin classAbstractSqlParser- Parameters:
context- the parser contexttokens- the source token list- Returns:
- configured parser instance (never null)
-
getSecondaryParser
Description copied from class:AbstractSqlParserGet secondary parser (e.g., PL/SQL for Oracle).Hook Method: Default implementation returns null. Override if vendor needs a secondary parser. The parser may be created fresh or cached/reused for performance.
Example (Oracle):
protected TCustomParser getSecondaryParser(ParserContext context, TSourceTokenList tokens) { TParserOraclePLSql plsqlParser = new TParserOraclePLSql(tokens); plsqlParser.lexer = getLexer(context); return plsqlParser; }- Overrides:
getSecondaryParserin classAbstractSqlParser- Parameters:
context- the parser contexttokens- the source token list- Returns:
- secondary parser instance, or null if not needed
-
tokenizeVendorSql
Hook method for vendor-specific tokenization.Delegates to dosparksqltexttotokenlist() which implements SparkSQL-specific token processing logic.
- Specified by:
tokenizeVendorSqlin classAbstractSqlParser
-
setupVendorParsersForExtraction
Hook method to setup parsers before raw statement extraction.Injects sqlcmds and sourcetokenlist into the SparkSQL parser.
- Specified by:
setupVendorParsersForExtractionin classAbstractSqlParser
-
extractVendorRawStatements
Hook method for vendor-specific raw statement extraction.Delegates to dosparksqlgetrawsqlstatements() which implements SparkSQL-specific statement boundary detection.
- Specified by:
extractVendorRawStatementsin classAbstractSqlParser- Parameters:
builder- the result builder to populate with raw statements
-
performParsing
protected TStatementList performParsing(ParserContext context, TCustomParser mainParser, TCustomParser secondaryParser, TSourceTokenList tokens, TStatementList rawStatements) Description copied from class:AbstractSqlParserPerform actual parsing with syntax checking.Subclass Responsibility: Parse SQL using vendor-specific parser and optional secondary parser (e.g., PL/SQL for Oracle).
Important: This method receives raw statements that have already been extracted by
AbstractSqlParser.getrawsqlstatements(ParserContext). Subclasses should NOT re-extract statements - just parse each statement to build the AST.Example:
protected TStatementList performParsing(ParserContext context, TCustomParser parser, TCustomParser secondaryParser, TSourceTokenList tokens, TStatementList rawStatements) { // Use the passed-in rawStatements (DO NOT re-extract!) for (int i = 0; i < rawStatements.size(); i++) { TCustomSqlStatement stmt = rawStatements.get(i); stmt.parsestatement(...); // Build AST for each statement } return rawStatements; }- Specified by:
performParsingin classAbstractSqlParser- Parameters:
context- the parser contextmainParser- the main parser instancesecondaryParser- secondary parser (may be null)tokens- the source token listrawStatements- raw statements already extracted (never null)- Returns:
- statement list with parsed AST (never null)
-
afterStatementParsed
Hook for vendor-specific post-processing after statement is parsed.Default implementation is no-op for SparkSQL.
- Overrides:
afterStatementParsedin classAbstractSqlParser- Parameters:
stmt- the statement that was just parsed
-
handleCreateTableErrorRecovery
Handle error recovery for CREATE TABLE statements.Migrated from TGSqlParser.handleCreateTableErrorRecovery() (lines 16916-16971).
SparkSQL allows table properties that may not be fully parsed. This method marks unparseable properties as SQL*Plus commands to skip them.
-
performSemanticAnalysis
Description copied from class:AbstractSqlParserPerform semantic analysis on parsed statements.Hook Method: Default implementation does nothing. Override to provide vendor-specific semantic analysis.
Typical Implementation:
- Column-to-table resolution (TSQLResolver)
- Dataflow analysis
- Reference resolution
- Scope resolution
- Overrides:
performSemanticAnalysisin classAbstractSqlParser- Parameters:
context- the parser contextstatements- the parsed statements (mutable)
-
performInterpreter
Description copied from class:AbstractSqlParserPerform interpretation/evaluation on parsed statements.Hook Method: Default implementation does nothing. Override to provide AST interpretation/evaluation.
Typical Implementation:
- Execute simple SQL statements
- Evaluate expressions
- Constant folding
- Static analysis
- Overrides:
performInterpreterin classAbstractSqlParser- Parameters:
context- the parser contextstatements- the parsed statements (mutable)
-
toString
- Overrides:
toStringin classAbstractSqlParser
-