public class StarrocksSqlParser extends AbstractSqlParser
StarRocks is a fork of Apache Doris (from 2020) and maintains MySQL protocol compatibility. This parser is based on the Doris parser with extensions for StarRocks-specific features including:
Design Notes:
AbstractSqlParserTLexerStarrocks and TParserStarrocksSqlSqlParser,
AbstractSqlParser,
TLexerStarrocks,
TParserStarrocksSqlAbstractSqlParser.PreparedSqlReader| Modifier and Type | Field and Description |
|---|---|
TLexerStarrocks |
flexer
The StarRocks lexer used for tokenization (public for TGSqlParser.getFlexer())
|
defaultDelimiterStr, delimiterChar, frameStack, globalContext, globalFrame, lexer, parserContext, sourcetokenlist, sqlcmds, sqlEnv, sqlstatements, syntaxErrors, vendor| Constructor and Description |
|---|
StarrocksSqlParser()
Construct StarRocks SQL parser.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
extractVendorRawStatements(SqlParseResult.Builder builder)
Call vendor-specific raw statement extraction logic.
|
protected TCustomLexer |
getLexer(ParserContext context)
Get the lexer for this vendor.
|
protected TCustomParser |
getParser(ParserContext context,
TSourceTokenList tokens)
Get the main parser for this vendor.
|
protected TStatementList |
performParsing(ParserContext context,
TCustomParser parser,
TCustomParser secondaryParser,
TSourceTokenList tokens,
TStatementList rawStatements)
Perform actual parsing with syntax checking.
|
protected void |
setupVendorParsersForExtraction()
Setup vendor-specific parsers for raw statement extraction.
|
protected void |
tokenizeVendorSql()
Call vendor-specific tokenization logic.
|
String |
toString() |
afterStatementParsed, attemptErrorRecovery, copyErrorsFromStatement, doAfterTokenize, doExtractRawStatements, extractRawStatements, getanewsourcetoken, getDefaultDelimiterStr, getDelimiterChar, getErrorCount, getrawsqlstatements, getSecondaryParser, getSyntaxErrors, getVendor, handleStatementParsingException, initializeGlobalContext, isDollarFunctionDelimiter, onRawStatementComplete, onRawStatementCompleteVendorSpecific, parse, performInterpreter, performSemanticAnalysis, performTokenization, prepareSqlReader, processTokensBeforeParse, processTokensInTokenTable, setTokenHandle, tokenize, towinlinebreakpublic TLexerStarrocks flexer
public StarrocksSqlParser()
Configures the parser for StarRocks database with default delimiter: semicolon (;)
protected TCustomLexer getLexer(ParserContext context)
AbstractSqlParserSubclass 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;
}
getLexer in class AbstractSqlParsercontext - the parser contextprotected TCustomParser getParser(ParserContext context, TSourceTokenList tokens)
AbstractSqlParserSubclass 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;
}
getParser in class AbstractSqlParsercontext - the parser contexttokens - the source token listprotected void tokenizeVendorSql()
AbstractSqlParserHook Method: Called by AbstractSqlParser.performTokenization(gudusoft.gsqlparser.parser.ParserContext, gudusoft.gsqlparser.TCustomLexer) to execute
vendor-specific SQL-to-token conversion logic.
Subclass Responsibility: Call the vendor-specific tokenization method (e.g., dooraclesqltexttotokenlist, domssqlsqltexttotokenlist) which reads from lexer and populates sourcetokenlist.
Example (Oracle):
protected void tokenizeVendorSql() {
dooraclesqltexttotokenlist();
}
Example (MSSQL):
protected void tokenizeVendorSql() {
domssqlsqltexttotokenlist();
}
Example (PostgreSQL):
protected void tokenizeVendorSql() {
dopostgresqltexttotokenlist();
}
tokenizeVendorSql in class AbstractSqlParserprotected void setupVendorParsersForExtraction()
AbstractSqlParserHook Method: Called by AbstractSqlParser.extractRawStatements(gudusoft.gsqlparser.parser.ParserContext, gudusoft.gsqlparser.TSourceTokenList, gudusoft.gsqlparser.TCustomLexer, long) after initializing
sqlcmds but before calling the vendor-specific extraction logic.
Subclass Responsibility: Inject sqlcmds into vendor parser(s) and update their token lists. Examples:
Example (MSSQL):
protected void setupVendorParsersForExtraction() {
this.fparser.sqlcmds = this.sqlcmds;
this.fparser.sourcetokenlist = this.sourcetokenlist;
}
Example (Oracle with dual parsers):
protected void setupVendorParsersForExtraction() {
this.fparser.sqlcmds = this.sqlcmds;
this.fplsqlparser.sqlcmds = this.sqlcmds;
this.fparser.sourcetokenlist = this.sourcetokenlist;
this.fplsqlparser.sourcetokenlist = this.sourcetokenlist;
}
setupVendorParsersForExtraction in class AbstractSqlParserprotected void extractVendorRawStatements(SqlParseResult.Builder builder)
AbstractSqlParserHook Method: Called by AbstractSqlParser.extractRawStatements(gudusoft.gsqlparser.parser.ParserContext, gudusoft.gsqlparser.TSourceTokenList, gudusoft.gsqlparser.TCustomLexer, long) to execute
the vendor-specific logic for identifying statement boundaries.
Subclass Responsibility: Call the vendor-specific extraction method (e.g., dooraclegetrawsqlstatements, domssqlgetrawsqlstatements) passing the builder. The extraction method will populate the builder with raw statements.
Example (Oracle):
protected void extractVendorRawStatements(SqlParseResult.Builder builder) {
dooraclegetrawsqlstatements(builder);
}
Example (MSSQL):
protected void extractVendorRawStatements(SqlParseResult.Builder builder) {
domssqlgetrawsqlstatements(builder);
}
extractVendorRawStatements in class AbstractSqlParserbuilder - the result builder to populate with raw statementsprotected TStatementList performParsing(ParserContext context, TCustomParser parser, TCustomParser secondaryParser, TSourceTokenList tokens, TStatementList rawStatements)
AbstractSqlParserSubclass 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;
}
performParsing in class AbstractSqlParsercontext - the parser contextparser - the main parser instancesecondaryParser - secondary parser (may be null)tokens - the source token listrawStatements - raw statements already extracted (never null)public String toString()
toString in class AbstractSqlParser