Interface SqlParser
- All Known Implementing Classes:
AbstractSqlParser,AnsiSqlParser,AthenaSqlParser,BigQuerySqlParser,ClickHouseSqlParser,CouchbaseSqlParser,DatabricksSqlParser,DaxSqlParser,Db2SqlParser,GaussDbSqlParser,GreenplumSqlParser,HanaSqlParser,HiveSqlParser,ImpalaSqlParser,InformixSqlParser,MdxSqlParser,MssqlSqlParser,MySqlParser,MySqlSqlParser,NetezzaSqlParser,OdbcSqlParser,OpenEdgeSqlParser,OracleSqlParser,PostgreSqlParser,PrestoSqlParser,RedshiftSqlParser,SnowflakeSqlParser,SoqlSqlParser,SparkSqlParser,SparksqlSqlParser,SybaseSqlParser,TeradataSqlParser,TrinoSqlParser,VerticaSqlParser
This interface defines the contract for all database vendor-specific parsers. Each vendor (Oracle, MySQL, PostgreSQL, etc.) provides its own implementation that handles the vendor-specific tokenization, parsing, and semantic analysis.
Design Pattern: Strategy Pattern
- The strategy (SqlParser) is selected at runtime based on database vendor
- All inputs come from
ParserContext(immutable) - All outputs go to
SqlParseResult(immutable)
Usage Example:
// Get parser for specific vendor
SqlParser parser = SqlParserFactory.get(EDbVendor.dbvoracle);
// Build context with inputs
ParserContext context = new ParserContext.Builder(EDbVendor.dbvoracle)
.sqlText("SELECT * FROM employees")
.build();
// Parse and get result
SqlParseResult result = parser.parse(context);
// Access outputs
TStatementList statements = result.getSqlStatements();
- Since:
- 3.2.0.0
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptiondefault TStatementListdoExtractRawStatements(ParserContext context, TSourceTokenList tokens) Deprecated.default SqlParseResultgetrawsqlstatements(ParserContext context) Extract raw SQL statements without full parsing.Get the database vendor this parser handles.parse(ParserContext context) Parse SQL from the given context.tokenize(ParserContext context) Tokenize SQL without parsing or statement extraction.
-
Method Details
-
getVendor
Get the database vendor this parser handles.- Returns:
- the database vendor (e.g., dbvoracle, dbvmysql)
-
parse
Parse SQL from the given context.This method performs full parsing including:
- Tokenization (lexical analysis)
- Syntax analysis (building parse tree)
- Semantic analysis (resolving references)
All inputs come from the context parameter, all outputs go to the result. This ensures clean separation of concerns and thread-safety.
- Parameters:
context- immutable context containing all parser inputs (SQL text, options, callbacks, etc.)- Returns:
- immutable result containing all parser outputs (statements, tokens, errors, etc.)
-
tokenize
Tokenize SQL without parsing or statement extraction.This method performs only tokenization (lexical analysis):
- Tokenization (lexical analysis)
The result contains tokens but NO statements. Use this when you only need the token stream (e.g., for syntax highlighting, token analysis).
For statement boundaries without full parsing, use
getrawsqlstatements(ParserContext).- Parameters:
context- immutable context containing all parser inputs- Returns:
- immutable result containing tokens only (no statements)
-
getrawsqlstatements
Extract raw SQL statements without full parsing.This method performs:
- Tokenization (lexical analysis)
- Raw statement extraction (statement boundary detection)
This is faster than
parse(ParserContext)because it skips detailed syntax checking and semantic analysis. The statements returned have their tokens grouped correctly but no AST (parse tree) is built.Use cases:
- Split a script into individual statements
- Determine statement types without full parsing
- Quick validation of statement boundaries
- Pre-processing before selective parsing
Equivalent to legacy API:
TGSqlParser.getrawsqlstatements()Default implementation: For parsers still in delegation phase, this default implementation falls back to
tokenize(ParserContext). Parsers extending AbstractSqlParser override this with proper implementation.- Parameters:
context- immutable context containing all parser inputs- Returns:
- immutable result containing tokens and raw statements (no AST)
-
doExtractRawStatements
@Deprecated default TStatementList doExtractRawStatements(ParserContext context, TSourceTokenList tokens) Deprecated.As of 3.2.0.0, replaced bygetrawsqlstatements(ParserContext)which returns a richerSqlParseResultobject containing statements, tokens, errors, timing information, and more. This method only returnsTStatementListwithout error information.Migration: Use
vendorParser.getrawsqlstatements(context)instead, which performs both tokenization and extraction in a single call and returns complete result information viaSqlParseResult.This method will be removed in a future major version.
Extract raw statements from already-tokenized source without re-tokenization.This method is used when tokens are already available from a previous tokenization step (e.g., via
dosqltexttotokenlist()). It performs only raw statement extraction without repeating tokenization.Default implementation: Falls back to tokenize() method for vendors that haven't implemented this optimization yet.
- Parameters:
context- immutable context containing all parser inputstokens- already-tokenized source token list- Returns:
- statement list containing extracted raw statements
- Since:
- 3.2.0.0
-
getrawsqlstatements(ParserContext)which returns a richerSqlParseResultobject containing statements, tokens, errors, timing information, and more.