Class DaxSqlParser
- All Implemented Interfaces:
SqlParser
This parser handles DAX-specific SQL syntax including:
- DAX expressions starting with '=' at beginning of line
- DEFINE...EVALUATE statements
- EVALUATE statements
- DAX function calls and expressions
- Special handling of DAX keywords (PRODUCT, TRUE, FALSE, CALENDAR, SECOND)
Design Notes:
- Extends
AbstractSqlParserusing the template method pattern - Uses
TLexerDaxfor tokenization - Uses
TParserDaxfor parsing - Delimiter character: ';' for DAX statements
Usage Example:
// Get DAX parser from factory
SqlParser parser = SqlParserFactory.get(EDbVendor.dbvdax);
// Build context
ParserContext context = new ParserContext.Builder(EDbVendor.dbvdax)
.sqlText("= CALCULATE(SUM(Sales[Amount]), ALL(Sales))")
.build();
// Parse
SqlParseResult result = parser.parse(context);
// Access statements
TStatementList statements = result.getSqlStatements();
- Since:
- 3.3.1
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class gudusoft.gsqlparser.parser.AbstractSqlParser
AbstractSqlParser.PreparedSqlReader -
Field Summary
FieldsFields 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 DAX-specific raw statement extraction logic.protected TCustomLexergetLexer(ParserContext context) Return the DAX lexer instance.protected TCustomParsergetParser(ParserContext context, TSourceTokenList tokens) Return the DAX SQL parser instance with updated token list.protected TCustomParsergetSecondaryParser(ParserContext context, TSourceTokenList tokens) DAX does not use a secondary parser.protected TStatementListperformParsing(ParserContext context, TCustomParser parser, TCustomParser secondaryParser, TSourceTokenList tokens, TStatementList rawStatements) Parse all raw DAX statements.protected voidSetup DAX parser for raw statement extraction.protected voidCall DAX-specific tokenization logic.Methods inherited from class gudusoft.gsqlparser.parser.AbstractSqlParser
afterStatementParsed, attemptErrorRecovery, copyErrorsFromStatement, doAfterTokenize, doExtractRawStatements, extractRawStatements, getanewsourcetoken, getDefaultDelimiterStr, getDelimiterChar, getErrorCount, getrawsqlstatements, getSyntaxErrors, getVendor, handleStatementParsingException, initializeGlobalContext, isDollarFunctionDelimiter, onRawStatementComplete, onRawStatementCompleteVendorSpecific, parse, performInterpreter, performSemanticAnalysis, performTokenization, prepareSqlReader, processTokensBeforeParse, processTokensInTokenTable, setTokenHandle, tokenize, toString, towinlinebreak
-
Field Details
-
flexer
The DAX lexer used for tokenization
-
-
Constructor Details
-
DaxSqlParser
public DaxSqlParser()Construct DAX SQL parser.Configures the parser for DAX database with default delimiter (;).
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 DAX lexer instance.- Specified by:
getLexerin classAbstractSqlParser- Parameters:
context- the parser context- Returns:
- configured lexer instance (never null)
-
getParser
Return the DAX SQL parser instance with updated token list.- Specified by:
getParserin classAbstractSqlParser- Parameters:
context- the parser contexttokens- the source token list- Returns:
- configured parser instance (never null)
-
getSecondaryParser
DAX does not use a secondary parser.- Overrides:
getSecondaryParserin classAbstractSqlParser- Parameters:
context- the parser contexttokens- the source token list- Returns:
- null (no secondary parser)
-
tokenizeVendorSql
Call DAX-specific tokenization logic.Delegates to dodaxsqltexttotokenlist which handles DAX's simple token iteration.
- Specified by:
tokenizeVendorSqlin classAbstractSqlParser
-
setupVendorParsersForExtraction
Setup DAX parser for raw statement extraction.Injects shared state (sqlcmds, sourcetokenlist) into the DAX parser so it can access tokens and SQL command definitions during parsing.
- Specified by:
setupVendorParsersForExtractionin classAbstractSqlParser
-
extractVendorRawStatements
Call DAX-specific raw statement extraction logic.Delegates to dodaxgetrawsqlstatements which handles DAX's statement boundary detection (based on nested parentheses and special DAX keywords).
- 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) Parse all raw DAX statements.Iterates through all raw statements extracted by dodaxgetrawsqlstatements() and parses each one using the DAX parser.
Follows the pattern from MssqlSqlParser.performParsing()
- Specified by:
performParsingin classAbstractSqlParser- Parameters:
context- the parser contextparser- 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)
-