rawsql-ts 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +16 -16
- package/dist/esm/index.min.js.map +3 -3
- package/dist/esm/src/index.d.ts +12 -0
- package/dist/esm/src/index.js +11 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/models/Clause.d.ts +7 -3
- package/dist/esm/src/models/Clause.js +17 -4
- package/dist/esm/src/models/Clause.js.map +1 -1
- package/dist/esm/src/models/DDLStatements.d.ts +14 -2
- package/dist/esm/src/models/DDLStatements.js +12 -0
- package/dist/esm/src/models/DDLStatements.js.map +1 -1
- package/dist/esm/src/models/InsertQuery.d.ts +1 -4
- package/dist/esm/src/models/InsertQuery.js +3 -5
- package/dist/esm/src/models/InsertQuery.js.map +1 -1
- package/dist/esm/src/models/SqlPrintToken.d.ts +1 -0
- package/dist/esm/src/models/SqlPrintToken.js +1 -0
- package/dist/esm/src/models/SqlPrintToken.js.map +1 -1
- package/dist/esm/src/models/TableDefinitionModel.d.ts +39 -0
- package/dist/esm/src/models/TableDefinitionModel.js +77 -0
- package/dist/esm/src/models/TableDefinitionModel.js.map +1 -0
- package/dist/esm/src/models/ValuesQuery.d.ts +2 -0
- package/dist/esm/src/models/ValuesQuery.js +1 -0
- package/dist/esm/src/models/ValuesQuery.js.map +1 -1
- package/dist/esm/src/parsers/AlterTableParser.js +1 -1
- package/dist/esm/src/parsers/AlterTableParser.js.map +1 -1
- package/dist/esm/src/parsers/InsertQueryParser.js +4 -1
- package/dist/esm/src/parsers/InsertQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/ReturningClauseParser.js +33 -47
- package/dist/esm/src/parsers/ReturningClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlParser.d.ts +0 -1
- package/dist/esm/src/parsers/SqlParser.js +44 -58
- package/dist/esm/src/parsers/SqlParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +1 -0
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +23 -5
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js +7 -0
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/DDLDiffGenerator.d.ts +14 -0
- package/dist/esm/src/transformers/DDLDiffGenerator.js +197 -0
- package/dist/esm/src/transformers/DDLDiffGenerator.js.map +1 -0
- package/dist/esm/src/transformers/DDLGeneralizer.d.ts +13 -0
- package/dist/esm/src/transformers/DDLGeneralizer.js +98 -0
- package/dist/esm/src/transformers/DDLGeneralizer.js.map +1 -0
- package/dist/esm/src/transformers/DDLToFixtureConverter.d.ts +19 -0
- package/dist/esm/src/transformers/DDLToFixtureConverter.js +202 -0
- package/dist/esm/src/transformers/DDLToFixtureConverter.js.map +1 -0
- package/dist/esm/src/transformers/DeleteResultSelectConverter.d.ts +53 -0
- package/dist/esm/src/transformers/DeleteResultSelectConverter.js +394 -0
- package/dist/esm/src/transformers/DeleteResultSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/FixtureCteBuilder.d.ts +60 -0
- package/dist/esm/src/transformers/FixtureCteBuilder.js +147 -0
- package/dist/esm/src/transformers/FixtureCteBuilder.js.map +1 -0
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js +5 -2
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js.map +1 -1
- package/dist/esm/src/transformers/InsertResultSelectConverter.d.ts +64 -0
- package/dist/esm/src/transformers/InsertResultSelectConverter.js +495 -0
- package/dist/esm/src/transformers/InsertResultSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/MergeResultSelectConverter.d.ts +38 -0
- package/dist/esm/src/transformers/MergeResultSelectConverter.js +306 -0
- package/dist/esm/src/transformers/MergeResultSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/QueryBuilder.d.ts +11 -0
- package/dist/esm/src/transformers/QueryBuilder.js +19 -3
- package/dist/esm/src/transformers/QueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/SelectResultSelectConverter.d.ts +10 -0
- package/dist/esm/src/transformers/SelectResultSelectConverter.js +32 -0
- package/dist/esm/src/transformers/SelectResultSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/SimulatedSelectConverter.d.ts +23 -0
- package/dist/esm/src/transformers/SimulatedSelectConverter.js +61 -0
- package/dist/esm/src/transformers/SimulatedSelectConverter.js.map +1 -0
- package/dist/esm/src/transformers/UpdateResultSelectConverter.d.ts +51 -0
- package/dist/esm/src/transformers/UpdateResultSelectConverter.js +340 -0
- package/dist/esm/src/transformers/UpdateResultSelectConverter.js.map +1 -0
- package/dist/esm/src/utils/SelectQueryWithClauseHelper.d.ts +12 -0
- package/dist/esm/src/utils/SelectQueryWithClauseHelper.js +43 -0
- package/dist/esm/src/utils/SelectQueryWithClauseHelper.js.map +1 -0
- package/dist/esm/src/utils/ValueComponentRewriter.d.ts +3 -0
- package/dist/esm/src/utils/ValueComponentRewriter.js +180 -0
- package/dist/esm/src/utils/ValueComponentRewriter.js.map +1 -0
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/formatters/OriginalFormatRestorer.js +139 -0
- package/dist/formatters/OriginalFormatRestorer.js.map +1 -0
- package/dist/index.js +144 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +17 -17
- package/dist/index.min.js.map +3 -3
- package/dist/models/BinarySelectQuery.js +198 -0
- package/dist/models/BinarySelectQuery.js.map +1 -0
- package/dist/models/CTEError.js +37 -0
- package/dist/models/CTEError.js.map +1 -0
- package/dist/models/Clause.js +535 -0
- package/dist/models/Clause.js.map +1 -0
- package/dist/models/CreateTableQuery.js +135 -0
- package/dist/models/CreateTableQuery.js.map +1 -0
- package/dist/models/DDLStatements.js +275 -0
- package/dist/models/DDLStatements.js.map +1 -0
- package/dist/models/DeleteQuery.js +20 -0
- package/dist/models/DeleteQuery.js.map +1 -0
- package/dist/models/FormattingLexeme.js +3 -0
- package/dist/models/FormattingLexeme.js.map +1 -0
- package/dist/models/HintClause.js +41 -0
- package/dist/models/HintClause.js.map +1 -0
- package/dist/models/InsertQuery.js +23 -0
- package/dist/models/InsertQuery.js.map +1 -0
- package/dist/models/KeywordTrie.js +54 -0
- package/dist/models/KeywordTrie.js.map +1 -0
- package/dist/models/Lexeme.js +22 -0
- package/dist/models/Lexeme.js.map +1 -0
- package/dist/models/MergeQuery.js +104 -0
- package/dist/models/MergeQuery.js.map +1 -0
- package/dist/models/SelectQuery.js +22 -0
- package/dist/models/SelectQuery.js.map +1 -0
- package/dist/models/SimpleSelectQuery.js +648 -0
- package/dist/models/SimpleSelectQuery.js.map +1 -0
- package/dist/models/SqlComponent.js +73 -0
- package/dist/models/SqlComponent.js.map +1 -0
- package/dist/models/SqlPrintToken.js +143 -0
- package/dist/models/SqlPrintToken.js.map +1 -0
- package/dist/models/TableDefinitionModel.js +86 -0
- package/dist/models/TableDefinitionModel.js.map +1 -0
- package/dist/models/UpdateQuery.js +29 -0
- package/dist/models/UpdateQuery.js.map +1 -0
- package/dist/models/ValueComponent.js +380 -0
- package/dist/models/ValueComponent.js.map +1 -0
- package/dist/models/ValuesQuery.js +62 -0
- package/dist/models/ValuesQuery.js.map +1 -0
- package/dist/parsers/AlterTableParser.js +490 -0
- package/dist/parsers/AlterTableParser.js.map +1 -0
- package/dist/parsers/AnalyzeStatementParser.js +94 -0
- package/dist/parsers/AnalyzeStatementParser.js.map +1 -0
- package/dist/parsers/CommandExpressionParser.js +213 -0
- package/dist/parsers/CommandExpressionParser.js.map +1 -0
- package/dist/parsers/CommonTableParser.js +177 -0
- package/dist/parsers/CommonTableParser.js.map +1 -0
- package/dist/parsers/CreateIndexParser.js +241 -0
- package/dist/parsers/CreateIndexParser.js.map +1 -0
- package/dist/parsers/CreateTableParser.js +738 -0
- package/dist/parsers/CreateTableParser.js.map +1 -0
- package/dist/parsers/DeleteClauseParser.js +37 -0
- package/dist/parsers/DeleteClauseParser.js.map +1 -0
- package/dist/parsers/DeleteQueryParser.js +77 -0
- package/dist/parsers/DeleteQueryParser.js.map +1 -0
- package/dist/parsers/DropConstraintParser.js +51 -0
- package/dist/parsers/DropConstraintParser.js.map +1 -0
- package/dist/parsers/DropIndexParser.js +73 -0
- package/dist/parsers/DropIndexParser.js.map +1 -0
- package/dist/parsers/DropTableParser.js +63 -0
- package/dist/parsers/DropTableParser.js.map +1 -0
- package/dist/parsers/ExplainStatementParser.js +189 -0
- package/dist/parsers/ExplainStatementParser.js.map +1 -0
- package/dist/parsers/FetchClauseParser.js +89 -0
- package/dist/parsers/FetchClauseParser.js.map +1 -0
- package/dist/parsers/ForClauseParser.js +58 -0
- package/dist/parsers/ForClauseParser.js.map +1 -0
- package/dist/parsers/FromClauseParser.js +54 -0
- package/dist/parsers/FromClauseParser.js.map +1 -0
- package/dist/parsers/FullNameParser.js +110 -0
- package/dist/parsers/FullNameParser.js.map +1 -0
- package/dist/parsers/FunctionExpressionParser.js +524 -0
- package/dist/parsers/FunctionExpressionParser.js.map +1 -0
- package/dist/parsers/GroupByParser.js +58 -0
- package/dist/parsers/GroupByParser.js.map +1 -0
- package/dist/parsers/HavingParser.js +36 -0
- package/dist/parsers/HavingParser.js.map +1 -0
- package/dist/parsers/IdentifierDecorator.js +17 -0
- package/dist/parsers/IdentifierDecorator.js.map +1 -0
- package/dist/parsers/IdentifierParser.js +15 -0
- package/dist/parsers/IdentifierParser.js.map +1 -0
- package/dist/parsers/InsertQueryParser.js +162 -0
- package/dist/parsers/InsertQueryParser.js.map +1 -0
- package/dist/parsers/JoinClauseParser.js +117 -0
- package/dist/parsers/JoinClauseParser.js.map +1 -0
- package/dist/parsers/JoinOnClauseParser.js +21 -0
- package/dist/parsers/JoinOnClauseParser.js.map +1 -0
- package/dist/parsers/JoinUsingClauseParser.js +23 -0
- package/dist/parsers/JoinUsingClauseParser.js.map +1 -0
- package/dist/parsers/KeywordParser.js +99 -0
- package/dist/parsers/KeywordParser.js.map +1 -0
- package/dist/parsers/LimitClauseParser.js +38 -0
- package/dist/parsers/LimitClauseParser.js.map +1 -0
- package/dist/parsers/LiteralParser.js +48 -0
- package/dist/parsers/LiteralParser.js.map +1 -0
- package/dist/parsers/MergeQueryParser.js +483 -0
- package/dist/parsers/MergeQueryParser.js.map +1 -0
- package/dist/parsers/OffsetClauseParser.js +42 -0
- package/dist/parsers/OffsetClauseParser.js.map +1 -0
- package/dist/parsers/OrderByClauseParser.js +108 -0
- package/dist/parsers/OrderByClauseParser.js.map +1 -0
- package/dist/parsers/OverExpressionParser.js +44 -0
- package/dist/parsers/OverExpressionParser.js.map +1 -0
- package/dist/parsers/ParameterDecorator.js +40 -0
- package/dist/parsers/ParameterDecorator.js.map +1 -0
- package/dist/parsers/ParameterExpressionParser.js +24 -0
- package/dist/parsers/ParameterExpressionParser.js.map +1 -0
- package/dist/parsers/ParenExpressionParser.js +109 -0
- package/dist/parsers/ParenExpressionParser.js.map +1 -0
- package/dist/parsers/ParseError.js +25 -0
- package/dist/parsers/ParseError.js.map +1 -0
- package/dist/parsers/PartitionByParser.js +53 -0
- package/dist/parsers/PartitionByParser.js.map +1 -0
- package/dist/parsers/ReturningClauseParser.js +64 -0
- package/dist/parsers/ReturningClauseParser.js.map +1 -0
- package/dist/parsers/SelectClauseParser.js +244 -0
- package/dist/parsers/SelectClauseParser.js.map +1 -0
- package/dist/parsers/SelectQueryParser.js +564 -0
- package/dist/parsers/SelectQueryParser.js.map +1 -0
- package/dist/parsers/SequenceParser.js +245 -0
- package/dist/parsers/SequenceParser.js.map +1 -0
- package/dist/parsers/SetClauseParser.js +125 -0
- package/dist/parsers/SetClauseParser.js.map +1 -0
- package/dist/parsers/SourceAliasExpressionParser.js +60 -0
- package/dist/parsers/SourceAliasExpressionParser.js.map +1 -0
- package/dist/parsers/SourceExpressionParser.js +69 -0
- package/dist/parsers/SourceExpressionParser.js.map +1 -0
- package/dist/parsers/SourceParser.js +144 -0
- package/dist/parsers/SourceParser.js.map +1 -0
- package/dist/parsers/SqlParser.js +431 -0
- package/dist/parsers/SqlParser.js.map +1 -0
- package/dist/parsers/SqlPrintTokenParser.js +3289 -0
- package/dist/parsers/SqlPrintTokenParser.js.map +1 -0
- package/dist/parsers/SqlTokenizer.js +553 -0
- package/dist/parsers/SqlTokenizer.js.map +1 -0
- package/dist/parsers/StringSpecifierExpressionParser.js +22 -0
- package/dist/parsers/StringSpecifierExpressionParser.js.map +1 -0
- package/dist/parsers/UnaryExpressionParser.js +39 -0
- package/dist/parsers/UnaryExpressionParser.js.map +1 -0
- package/dist/parsers/UpdateClauseParser.js +21 -0
- package/dist/parsers/UpdateClauseParser.js.map +1 -0
- package/dist/parsers/UpdateQueryParser.js +98 -0
- package/dist/parsers/UpdateQueryParser.js.map +1 -0
- package/dist/parsers/UsingClauseParser.js +33 -0
- package/dist/parsers/UsingClauseParser.js.map +1 -0
- package/dist/parsers/ValueParser.js +562 -0
- package/dist/parsers/ValueParser.js.map +1 -0
- package/dist/parsers/ValuesQueryParser.js +112 -0
- package/dist/parsers/ValuesQueryParser.js.map +1 -0
- package/dist/parsers/WhereClauseParser.js +51 -0
- package/dist/parsers/WhereClauseParser.js.map +1 -0
- package/dist/parsers/WindowClauseParser.js +57 -0
- package/dist/parsers/WindowClauseParser.js.map +1 -0
- package/dist/parsers/WindowExpressionParser.js +163 -0
- package/dist/parsers/WindowExpressionParser.js.map +1 -0
- package/dist/parsers/WithClauseParser.js +165 -0
- package/dist/parsers/WithClauseParser.js.map +1 -0
- package/dist/parsers/utils/LexemeCommentUtils.js +29 -0
- package/dist/parsers/utils/LexemeCommentUtils.js.map +1 -0
- package/dist/reporting/models/DataFlowEdge.js +58 -0
- package/dist/reporting/models/DataFlowEdge.js.map +1 -0
- package/dist/reporting/models/DataFlowGraph.js +138 -0
- package/dist/reporting/models/DataFlowGraph.js.map +1 -0
- package/dist/reporting/models/DataFlowNode.js +148 -0
- package/dist/reporting/models/DataFlowNode.js.map +1 -0
- package/dist/reporting/services/CTEHandler.js +58 -0
- package/dist/reporting/services/CTEHandler.js.map +1 -0
- package/dist/reporting/services/DataSourceHandler.js +95 -0
- package/dist/reporting/services/DataSourceHandler.js.map +1 -0
- package/dist/reporting/services/JoinHandler.js +84 -0
- package/dist/reporting/services/JoinHandler.js.map +1 -0
- package/dist/reporting/services/ProcessHandler.js +26 -0
- package/dist/reporting/services/ProcessHandler.js.map +1 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.js +13 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Clause.d.ts +7 -3
- package/dist/src/models/Clause.js +16 -3
- package/dist/src/models/Clause.js.map +1 -1
- package/dist/src/models/DDLStatements.d.ts +97 -2
- package/dist/src/models/DDLStatements.js +14 -1
- package/dist/src/models/DDLStatements.js.map +1 -1
- package/dist/src/models/InsertQuery.d.ts +1 -4
- package/dist/src/models/InsertQuery.js +3 -5
- package/dist/src/models/InsertQuery.js.map +1 -1
- package/dist/src/models/SqlPrintToken.d.ts +6 -0
- package/dist/src/models/SqlPrintToken.js +1 -0
- package/dist/src/models/SqlPrintToken.js.map +1 -1
- package/dist/src/models/TableDefinitionModel.d.ts +41 -0
- package/dist/src/models/TableDefinitionModel.js +85 -0
- package/dist/src/models/TableDefinitionModel.js.map +1 -0
- package/dist/src/models/ValueComponent.d.ts +2 -1
- package/dist/src/models/ValuesQuery.d.ts +2 -0
- package/dist/src/models/ValuesQuery.js +1 -0
- package/dist/src/models/ValuesQuery.js.map +1 -1
- package/dist/src/parsers/AlterTableParser.d.ts +1 -0
- package/dist/src/parsers/AlterTableParser.js +26 -5
- package/dist/src/parsers/AlterTableParser.js.map +1 -1
- package/dist/src/parsers/FunctionExpressionParser.d.ts +1 -0
- package/dist/src/parsers/InsertQueryParser.js +4 -1
- package/dist/src/parsers/InsertQueryParser.js.map +1 -1
- package/dist/src/parsers/ReturningClauseParser.js +33 -47
- package/dist/src/parsers/ReturningClauseParser.js.map +1 -1
- package/dist/src/parsers/SequenceParser.d.ts +16 -0
- package/dist/src/parsers/SqlParser.d.ts +4 -3
- package/dist/src/parsers/SqlParser.js +44 -63
- package/dist/src/parsers/SqlParser.js.map +1 -1
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +9 -0
- package/dist/src/parsers/SqlPrintTokenParser.js +22 -4
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/SqlTokenizer.d.ts +1 -0
- package/dist/src/tokenReaders/LiteralTokenReader.js +7 -0
- package/dist/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/src/transformers/DDLDiffGenerator.d.ts +18 -0
- package/dist/src/transformers/DDLDiffGenerator.js +313 -0
- package/dist/src/transformers/DDLDiffGenerator.js.map +1 -0
- package/dist/src/transformers/DDLGeneralizer.d.ts +13 -0
- package/dist/src/transformers/DDLGeneralizer.js +119 -0
- package/dist/src/transformers/DDLGeneralizer.js.map +1 -0
- package/dist/src/transformers/DDLToFixtureConverter.d.ts +19 -0
- package/dist/src/transformers/DDLToFixtureConverter.js +206 -0
- package/dist/src/transformers/DDLToFixtureConverter.js.map +1 -0
- package/dist/src/transformers/DeleteResultSelectConverter.d.ts +53 -0
- package/dist/src/transformers/DeleteResultSelectConverter.js +398 -0
- package/dist/src/transformers/DeleteResultSelectConverter.js.map +1 -0
- package/dist/src/transformers/FixtureCteBuilder.d.ts +60 -0
- package/dist/src/transformers/FixtureCteBuilder.js +151 -0
- package/dist/src/transformers/FixtureCteBuilder.js.map +1 -0
- package/dist/src/transformers/InsertQuerySelectValuesConverter.js +5 -2
- package/dist/src/transformers/InsertQuerySelectValuesConverter.js.map +1 -1
- package/dist/src/transformers/InsertResultSelectConverter.d.ts +67 -0
- package/dist/src/transformers/InsertResultSelectConverter.js +499 -0
- package/dist/src/transformers/InsertResultSelectConverter.js.map +1 -0
- package/dist/src/transformers/MergeResultSelectConverter.d.ts +38 -0
- package/dist/src/transformers/MergeResultSelectConverter.js +310 -0
- package/dist/src/transformers/MergeResultSelectConverter.js.map +1 -0
- package/dist/src/transformers/QueryBuilder.d.ts +11 -0
- package/dist/src/transformers/QueryBuilder.js +19 -3
- package/dist/src/transformers/QueryBuilder.js.map +1 -1
- package/dist/src/transformers/SelectResultSelectConverter.d.ts +10 -0
- package/dist/src/transformers/SelectResultSelectConverter.js +36 -0
- package/dist/src/transformers/SelectResultSelectConverter.js.map +1 -0
- package/dist/src/transformers/SimulatedSelectConverter.d.ts +23 -0
- package/dist/src/transformers/SimulatedSelectConverter.js +65 -0
- package/dist/src/transformers/SimulatedSelectConverter.js.map +1 -0
- package/dist/src/transformers/UpdateResultSelectConverter.d.ts +51 -0
- package/dist/src/transformers/UpdateResultSelectConverter.js +344 -0
- package/dist/src/transformers/UpdateResultSelectConverter.js.map +1 -0
- package/dist/src/types/GenericFixture.d.ts +17 -0
- package/dist/src/utils/SelectQueryWithClauseHelper.d.ts +12 -0
- package/dist/src/utils/SelectQueryWithClauseHelper.js +47 -0
- package/dist/src/utils/SelectQueryWithClauseHelper.js.map +1 -0
- package/dist/src/utils/TableNameUtils.d.ts +10 -0
- package/dist/src/utils/ValueComponentRewriter.d.ts +3 -0
- package/dist/src/utils/ValueComponentRewriter.js +183 -0
- package/dist/src/utils/ValueComponentRewriter.js.map +1 -0
- package/dist/tokenReaders/BaseTokenReader.js +86 -0
- package/dist/tokenReaders/BaseTokenReader.js.map +1 -0
- package/dist/tokenReaders/CommandTokenReader.js +221 -0
- package/dist/tokenReaders/CommandTokenReader.js.map +1 -0
- package/dist/tokenReaders/EscapedIdentifierTokenReader.js +99 -0
- package/dist/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -0
- package/dist/tokenReaders/FunctionTokenReader.js +47 -0
- package/dist/tokenReaders/FunctionTokenReader.js.map +1 -0
- package/dist/tokenReaders/IdentifierTokenReader.js +34 -0
- package/dist/tokenReaders/IdentifierTokenReader.js.map +1 -0
- package/dist/tokenReaders/LiteralTokenReader.js +329 -0
- package/dist/tokenReaders/LiteralTokenReader.js.map +1 -0
- package/dist/tokenReaders/OperatorTokenReader.js +152 -0
- package/dist/tokenReaders/OperatorTokenReader.js.map +1 -0
- package/dist/tokenReaders/ParameterTokenReader.js +190 -0
- package/dist/tokenReaders/ParameterTokenReader.js.map +1 -0
- package/dist/tokenReaders/StringSpecifierTokenReader.js +31 -0
- package/dist/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
- package/dist/tokenReaders/SymbolTokenReader.js +35 -0
- package/dist/tokenReaders/SymbolTokenReader.js.map +1 -0
- package/dist/tokenReaders/TokenReaderManager.js +110 -0
- package/dist/tokenReaders/TokenReaderManager.js.map +1 -0
- package/dist/tokenReaders/TypeTokenReader.js +69 -0
- package/dist/tokenReaders/TypeTokenReader.js.map +1 -0
- package/dist/transformers/AliasRenamer.js +600 -0
- package/dist/transformers/AliasRenamer.js.map +1 -0
- package/dist/transformers/CTEBuilder.js +188 -0
- package/dist/transformers/CTEBuilder.js.map +1 -0
- package/dist/transformers/CTECollector.js +409 -0
- package/dist/transformers/CTECollector.js.map +1 -0
- package/dist/transformers/CTEComposer.js +302 -0
- package/dist/transformers/CTEComposer.js.map +1 -0
- package/dist/transformers/CTEDependencyAnalyzer.js +285 -0
- package/dist/transformers/CTEDependencyAnalyzer.js.map +1 -0
- package/dist/transformers/CTEDependencyTracer.js +253 -0
- package/dist/transformers/CTEDependencyTracer.js.map +1 -0
- package/dist/transformers/CTEDisabler.js +355 -0
- package/dist/transformers/CTEDisabler.js.map +1 -0
- package/dist/transformers/CTEInjector.js +83 -0
- package/dist/transformers/CTEInjector.js.map +1 -0
- package/dist/transformers/CTENormalizer.js +46 -0
- package/dist/transformers/CTENormalizer.js.map +1 -0
- package/dist/transformers/CTEQueryDecomposer.js +589 -0
- package/dist/transformers/CTEQueryDecomposer.js.map +1 -0
- package/dist/transformers/CTERenamer.js +486 -0
- package/dist/transformers/CTERenamer.js.map +1 -0
- package/dist/transformers/CTETableReferenceCollector.js +358 -0
- package/dist/transformers/CTETableReferenceCollector.js.map +1 -0
- package/dist/transformers/ColumnReferenceCollector.js +478 -0
- package/dist/transformers/ColumnReferenceCollector.js.map +1 -0
- package/dist/transformers/DDLDiffGenerator.js +313 -0
- package/dist/transformers/DDLDiffGenerator.js.map +1 -0
- package/dist/transformers/DDLGeneralizer.js +119 -0
- package/dist/transformers/DDLGeneralizer.js.map +1 -0
- package/dist/transformers/DDLToFixtureConverter.js +206 -0
- package/dist/transformers/DDLToFixtureConverter.js.map +1 -0
- package/dist/transformers/DeleteResultSelectConverter.js +414 -0
- package/dist/transformers/DeleteResultSelectConverter.js.map +1 -0
- package/dist/transformers/DynamicQueryBuilder.js +164 -0
- package/dist/transformers/DynamicQueryBuilder.js.map +1 -0
- package/dist/transformers/EnhancedJsonMapping.js +223 -0
- package/dist/transformers/EnhancedJsonMapping.js.map +1 -0
- package/dist/transformers/FilterableItemCollector.js +259 -0
- package/dist/transformers/FilterableItemCollector.js.map +1 -0
- package/dist/transformers/FixtureCteBuilder.js +151 -0
- package/dist/transformers/FixtureCteBuilder.js.map +1 -0
- package/dist/transformers/FormatOptionResolver.js +67 -0
- package/dist/transformers/FormatOptionResolver.js.map +1 -0
- package/dist/transformers/Formatter.js +38 -0
- package/dist/transformers/Formatter.js.map +1 -0
- package/dist/transformers/InsertQuerySelectValuesConverter.js +125 -0
- package/dist/transformers/InsertQuerySelectValuesConverter.js.map +1 -0
- package/dist/transformers/InsertResultSelectConverter.js +589 -0
- package/dist/transformers/InsertResultSelectConverter.js.map +1 -0
- package/dist/transformers/JoinAggregationDecomposer.js +497 -0
- package/dist/transformers/JoinAggregationDecomposer.js.map +1 -0
- package/dist/transformers/JsonMappingConverter.js +392 -0
- package/dist/transformers/JsonMappingConverter.js.map +1 -0
- package/dist/transformers/JsonMappingUnifier.js +216 -0
- package/dist/transformers/JsonMappingUnifier.js.map +1 -0
- package/dist/transformers/LinePrinter.js +148 -0
- package/dist/transformers/LinePrinter.js.map +1 -0
- package/dist/transformers/MergeResultSelectConverter.js +310 -0
- package/dist/transformers/MergeResultSelectConverter.js.map +1 -0
- package/dist/transformers/ModelDrivenJsonMapping.js +122 -0
- package/dist/transformers/ModelDrivenJsonMapping.js.map +1 -0
- package/dist/transformers/OnelineFormattingHelper.js +99 -0
- package/dist/transformers/OnelineFormattingHelper.js.map +1 -0
- package/dist/transformers/ParameterCollector.js +37 -0
- package/dist/transformers/ParameterCollector.js.map +1 -0
- package/dist/transformers/PostgresArrayEntityCteBuilder.js +458 -0
- package/dist/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
- package/dist/transformers/PostgresJsonQueryBuilder.js +245 -0
- package/dist/transformers/PostgresJsonQueryBuilder.js.map +1 -0
- package/dist/transformers/PostgresObjectEntityCteBuilder.js +347 -0
- package/dist/transformers/PostgresObjectEntityCteBuilder.js.map +1 -0
- package/dist/transformers/QueryBuilder.js +649 -0
- package/dist/transformers/QueryBuilder.js.map +1 -0
- package/dist/transformers/QueryFlowDiagramGenerator.js +157 -0
- package/dist/transformers/QueryFlowDiagramGenerator.js.map +1 -0
- package/dist/transformers/SchemaCollector.js +523 -0
- package/dist/transformers/SchemaCollector.js.map +1 -0
- package/dist/transformers/SelectResultSelectConverter.js +36 -0
- package/dist/transformers/SelectResultSelectConverter.js.map +1 -0
- package/dist/transformers/SelectValueCollector.js +244 -0
- package/dist/transformers/SelectValueCollector.js.map +1 -0
- package/dist/transformers/SelectableColumnCollector.js +674 -0
- package/dist/transformers/SelectableColumnCollector.js.map +1 -0
- package/dist/transformers/SimulatedSelectConverter.js +65 -0
- package/dist/transformers/SimulatedSelectConverter.js.map +1 -0
- package/dist/transformers/SmartRenamer.js +422 -0
- package/dist/transformers/SmartRenamer.js.map +1 -0
- package/dist/transformers/SqlFormatter.js +77 -0
- package/dist/transformers/SqlFormatter.js.map +1 -0
- package/dist/transformers/SqlIdentifierRenamer.js +504 -0
- package/dist/transformers/SqlIdentifierRenamer.js.map +1 -0
- package/dist/transformers/SqlOutputToken.js +13 -0
- package/dist/transformers/SqlOutputToken.js.map +1 -0
- package/dist/transformers/SqlPaginationInjector.js +108 -0
- package/dist/transformers/SqlPaginationInjector.js.map +1 -0
- package/dist/transformers/SqlParamInjector.js +802 -0
- package/dist/transformers/SqlParamInjector.js.map +1 -0
- package/dist/transformers/SqlParameterBinder.js +70 -0
- package/dist/transformers/SqlParameterBinder.js.map +1 -0
- package/dist/transformers/SqlPrinter.js +1478 -0
- package/dist/transformers/SqlPrinter.js.map +1 -0
- package/dist/transformers/SqlSortInjector.js +153 -0
- package/dist/transformers/SqlSortInjector.js.map +1 -0
- package/dist/transformers/TableColumnResolver.js +3 -0
- package/dist/transformers/TableColumnResolver.js.map +1 -0
- package/dist/transformers/TableSourceCollector.js +439 -0
- package/dist/transformers/TableSourceCollector.js.map +1 -0
- package/dist/transformers/TypeTransformationPostProcessor.js +363 -0
- package/dist/transformers/TypeTransformationPostProcessor.js.map +1 -0
- package/dist/transformers/UpdateResultSelectConverter.js +359 -0
- package/dist/transformers/UpdateResultSelectConverter.js.map +1 -0
- package/dist/transformers/UpstreamSelectQueryFinder.js +184 -0
- package/dist/transformers/UpstreamSelectQueryFinder.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/Formatting.js +3 -0
- package/dist/types/Formatting.js.map +1 -0
- package/dist/types/GenericFixture.js +3 -0
- package/dist/types/GenericFixture.js.map +1 -0
- package/dist/utils/CTERegionDetector.js +464 -0
- package/dist/utils/CTERegionDetector.js.map +1 -0
- package/dist/utils/CommentEditor.js +345 -0
- package/dist/utils/CommentEditor.js.map +1 -0
- package/dist/utils/CommentUtils.js +69 -0
- package/dist/utils/CommentUtils.js.map +1 -0
- package/dist/utils/CursorContextAnalyzer.js +338 -0
- package/dist/utils/CursorContextAnalyzer.js.map +1 -0
- package/dist/utils/IntelliSenseApi.js +292 -0
- package/dist/utils/IntelliSenseApi.js.map +1 -0
- package/dist/utils/JsonSchemaValidator.js +215 -0
- package/dist/utils/JsonSchemaValidator.js.map +1 -0
- package/dist/utils/KeywordCache.js +206 -0
- package/dist/utils/KeywordCache.js.map +1 -0
- package/dist/utils/LexemeCursor.js +314 -0
- package/dist/utils/LexemeCursor.js.map +1 -0
- package/dist/utils/MultiQuerySplitter.js +292 -0
- package/dist/utils/MultiQuerySplitter.js.map +1 -0
- package/dist/utils/OperatorPrecedence.js +107 -0
- package/dist/utils/OperatorPrecedence.js.map +1 -0
- package/dist/utils/ParameterDetector.js +53 -0
- package/dist/utils/ParameterDetector.js.map +1 -0
- package/dist/utils/ParameterHelper.js +31 -0
- package/dist/utils/ParameterHelper.js.map +1 -0
- package/dist/utils/ParameterRemover.js +783 -0
- package/dist/utils/ParameterRemover.js.map +1 -0
- package/dist/utils/ParserStringUtils.js +31 -0
- package/dist/utils/ParserStringUtils.js.map +1 -0
- package/dist/utils/PositionAwareParser.js +363 -0
- package/dist/utils/PositionAwareParser.js.map +1 -0
- package/dist/utils/SchemaManager.js +217 -0
- package/dist/utils/SchemaManager.js.map +1 -0
- package/dist/utils/ScopeResolver.js +272 -0
- package/dist/utils/ScopeResolver.js.map +1 -0
- package/dist/utils/SelectQueryWithClauseHelper.js +47 -0
- package/dist/utils/SelectQueryWithClauseHelper.js.map +1 -0
- package/dist/utils/SqlSchemaValidator.js +55 -0
- package/dist/utils/SqlSchemaValidator.js.map +1 -0
- package/dist/utils/TableNameUtils.js +35 -0
- package/dist/utils/TableNameUtils.js.map +1 -0
- package/dist/utils/TextPositionUtils.js +128 -0
- package/dist/utils/TextPositionUtils.js.map +1 -0
- package/dist/utils/ValueComponentRewriter.js +187 -0
- package/dist/utils/ValueComponentRewriter.js.map +1 -0
- package/dist/utils/charLookupTable.js +73 -0
- package/dist/utils/charLookupTable.js.map +1 -0
- package/dist/utils/stringUtils.js +230 -0
- package/dist/utils/stringUtils.js.map +1 -0
- package/package.json +62 -62
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FunctionExpressionParser = void 0;
|
|
4
|
+
const Lexeme_1 = require("../models/Lexeme");
|
|
5
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
|
6
|
+
const OverExpressionParser_1 = require("./OverExpressionParser");
|
|
7
|
+
const ValueParser_1 = require("./ValueParser");
|
|
8
|
+
const FullNameParser_1 = require("./FullNameParser");
|
|
9
|
+
const SelectQueryParser_1 = require("./SelectQueryParser");
|
|
10
|
+
const OrderByClauseParser_1 = require("./OrderByClauseParser");
|
|
11
|
+
const ParseError_1 = require("./ParseError");
|
|
12
|
+
const LexemeCommentUtils_1 = require("./utils/LexemeCommentUtils");
|
|
13
|
+
class FunctionExpressionParser {
|
|
14
|
+
/**
|
|
15
|
+
* Parse ARRAY expressions - handles both ARRAY[...] (literal) and ARRAY(...) (query) syntax
|
|
16
|
+
* @param lexemes Array of lexemes to parse
|
|
17
|
+
* @param index Current parsing index
|
|
18
|
+
* @returns Parsed array expression and new index
|
|
19
|
+
*/
|
|
20
|
+
static parseArrayExpression(lexemes, index) {
|
|
21
|
+
let idx = index;
|
|
22
|
+
// Check if this is array literal (ARRAY[...]) or function call (ARRAY(...))
|
|
23
|
+
if (idx + 1 < lexemes.length && (lexemes[idx + 1].type & Lexeme_1.TokenType.OpenBracket)) {
|
|
24
|
+
idx++;
|
|
25
|
+
const arg = ValueParser_1.ValueParser.parseArgument(Lexeme_1.TokenType.OpenBracket, Lexeme_1.TokenType.CloseBracket, lexemes, idx);
|
|
26
|
+
idx = arg.newIndex;
|
|
27
|
+
const value = new ValueComponent_1.ArrayExpression(arg.value);
|
|
28
|
+
return { value, newIndex: idx };
|
|
29
|
+
}
|
|
30
|
+
else if (idx + 1 < lexemes.length && (lexemes[idx + 1].type & Lexeme_1.TokenType.OpenParen)) {
|
|
31
|
+
idx++;
|
|
32
|
+
idx++; // Skip the opening parenthesis
|
|
33
|
+
const arg = SelectQueryParser_1.SelectQueryParser.parseFromLexeme(lexemes, idx);
|
|
34
|
+
idx = arg.newIndex;
|
|
35
|
+
idx++; // Skip the closing parenthesis
|
|
36
|
+
const value = new ValueComponent_1.ArrayQueryExpression(arg.value);
|
|
37
|
+
return { value, newIndex: idx };
|
|
38
|
+
}
|
|
39
|
+
throw new Error(`Invalid ARRAY syntax at index ${idx}, expected ARRAY[... or ARRAY(...)`);
|
|
40
|
+
}
|
|
41
|
+
static parseFromLexeme(lexemes, index) {
|
|
42
|
+
let idx = index;
|
|
43
|
+
const current = lexemes[idx];
|
|
44
|
+
if (current.value === "array") {
|
|
45
|
+
return this.parseArrayExpression(lexemes, idx);
|
|
46
|
+
}
|
|
47
|
+
else if (current.value === "substring" || current.value === "overlay") {
|
|
48
|
+
return this.parseKeywordFunction(lexemes, idx, [
|
|
49
|
+
{ key: "from", required: false },
|
|
50
|
+
{ key: "for", required: false }
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
53
|
+
else if (current.value === "cast") {
|
|
54
|
+
return this.parseKeywordFunction(lexemes, idx, [
|
|
55
|
+
{ key: "as", required: true }
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
else if (current.value === "trim") {
|
|
59
|
+
return this.parseKeywordFunction(lexemes, idx, [
|
|
60
|
+
{ key: "from", required: false }
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
63
|
+
return this.parseFunctionCall(lexemes, idx);
|
|
64
|
+
}
|
|
65
|
+
static tryParseBinaryExpression(lexemes, index, left, allowAndOperator = true, allowOrOperator = true) {
|
|
66
|
+
let idx = index;
|
|
67
|
+
// If the next element is an operator, process it as a binary expression
|
|
68
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Operator)) {
|
|
69
|
+
const operator = lexemes[idx].value.toLowerCase();
|
|
70
|
+
if (!allowAndOperator && operator === "and") {
|
|
71
|
+
// Handle special case for "and" operator
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
if (!allowOrOperator && operator === "or") {
|
|
75
|
+
// Handle special case for "or" operator
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
idx++;
|
|
79
|
+
// between
|
|
80
|
+
if (operator === "between") {
|
|
81
|
+
return this.parseBetweenExpression(lexemes, idx, left, false);
|
|
82
|
+
}
|
|
83
|
+
else if (operator === "not between") {
|
|
84
|
+
return this.parseBetweenExpression(lexemes, idx, left, true);
|
|
85
|
+
}
|
|
86
|
+
// ::
|
|
87
|
+
if (operator === "::") {
|
|
88
|
+
const typeValue = this.parseTypeValue(lexemes, idx);
|
|
89
|
+
idx = typeValue.newIndex;
|
|
90
|
+
const exp = new ValueComponent_1.CastExpression(left, typeValue.value);
|
|
91
|
+
return { value: exp, newIndex: idx };
|
|
92
|
+
}
|
|
93
|
+
// Get the right-hand side value
|
|
94
|
+
const rightResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
95
|
+
idx = rightResult.newIndex;
|
|
96
|
+
// Create binary expression
|
|
97
|
+
const value = new ValueComponent_1.BinaryExpression(left, operator, rightResult.value);
|
|
98
|
+
return { value, newIndex: idx };
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
static parseBetweenExpression(lexemes, index, value, negated) {
|
|
103
|
+
let idx = index;
|
|
104
|
+
const lower = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx, false);
|
|
105
|
+
idx = lower.newIndex;
|
|
106
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Operator) && lexemes[idx].value !== "and") {
|
|
107
|
+
throw new Error(`Expected 'and' after 'between' at index ${idx}`);
|
|
108
|
+
}
|
|
109
|
+
idx++;
|
|
110
|
+
// Parse upper bound with restricted scope - stop at logical operators
|
|
111
|
+
const upper = this.parseBetweenUpperBound(lexemes, idx);
|
|
112
|
+
idx = upper.newIndex;
|
|
113
|
+
const result = new ValueComponent_1.BetweenExpression(value, lower.value, upper.value, negated);
|
|
114
|
+
return { value: result, newIndex: idx };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Parse the upper bound of a BETWEEN expression with logical operator precedence
|
|
118
|
+
* This stops parsing when it encounters AND/OR operators at the same level
|
|
119
|
+
*/
|
|
120
|
+
static parseBetweenUpperBound(lexemes, index) {
|
|
121
|
+
// Parse with higher precedence than AND/OR to ensure BETWEEN binds tighter
|
|
122
|
+
// Use precedence 3 (higher than AND=2, OR=1) as minimum to stop at logical operators
|
|
123
|
+
return ValueParser_1.ValueParser.parseFromLexeme(lexemes, index, false, false);
|
|
124
|
+
}
|
|
125
|
+
static parseFunctionCall(lexemes, index) {
|
|
126
|
+
let idx = index;
|
|
127
|
+
// Parse namespaced function name (e.g., myschema.myfunc, dbo.util.myfunc)
|
|
128
|
+
// Use FullNameParser to get namespaces and function name
|
|
129
|
+
const fullNameResult = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx);
|
|
130
|
+
const namespaces = fullNameResult.namespaces;
|
|
131
|
+
const name = fullNameResult.name;
|
|
132
|
+
idx = fullNameResult.newIndex;
|
|
133
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
|
134
|
+
// Check if this is an aggregate function that supports internal ORDER BY
|
|
135
|
+
const functionName = name.name.toLowerCase();
|
|
136
|
+
let arg;
|
|
137
|
+
let closingComments = null;
|
|
138
|
+
let internalOrderBy = null;
|
|
139
|
+
if (this.AGGREGATE_FUNCTIONS_WITH_ORDER_BY.has(functionName)) {
|
|
140
|
+
// Use special aggregate function argument parser with comment capture
|
|
141
|
+
const result = this.parseAggregateArguments(lexemes, idx);
|
|
142
|
+
arg = { value: result.arguments, newIndex: result.newIndex };
|
|
143
|
+
internalOrderBy = result.orderByClause;
|
|
144
|
+
closingComments = result.closingComments;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// General argument parsing with comment capture
|
|
148
|
+
const argWithComments = this.parseArgumentWithComments(lexemes, idx);
|
|
149
|
+
arg = { value: argWithComments.value, newIndex: argWithComments.newIndex };
|
|
150
|
+
closingComments = argWithComments.closingComments;
|
|
151
|
+
}
|
|
152
|
+
idx = arg.newIndex;
|
|
153
|
+
// Check for WITHIN GROUP clause
|
|
154
|
+
let withinGroup = null;
|
|
155
|
+
if (idx < lexemes.length && lexemes[idx].value === "within group") {
|
|
156
|
+
const withinGroupResult = this.parseWithinGroupClause(lexemes, idx);
|
|
157
|
+
withinGroup = withinGroupResult.value;
|
|
158
|
+
idx = withinGroupResult.newIndex;
|
|
159
|
+
}
|
|
160
|
+
// Check for FILTER clause that applies a WHERE predicate to the aggregate
|
|
161
|
+
let filterCondition = null;
|
|
162
|
+
if (idx < lexemes.length && lexemes[idx].value === "filter") {
|
|
163
|
+
const filterResult = this.parseFilterClause(lexemes, idx);
|
|
164
|
+
filterCondition = filterResult.condition;
|
|
165
|
+
idx = filterResult.newIndex;
|
|
166
|
+
}
|
|
167
|
+
// Check for WITH ORDINALITY clause
|
|
168
|
+
let withOrdinality = false;
|
|
169
|
+
if (idx < lexemes.length && lexemes[idx].value === "with ordinality") {
|
|
170
|
+
withOrdinality = true;
|
|
171
|
+
idx++; // Skip single "with ordinality" token
|
|
172
|
+
}
|
|
173
|
+
if (idx < lexemes.length && lexemes[idx].value === "over") {
|
|
174
|
+
const over = OverExpressionParser_1.OverExpressionParser.parseFromLexeme(lexemes, idx);
|
|
175
|
+
idx = over.newIndex;
|
|
176
|
+
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg.value, over.value, withinGroup, withOrdinality, internalOrderBy, filterCondition);
|
|
177
|
+
// Set closing comments if available
|
|
178
|
+
if (closingComments && closingComments.length > 0) {
|
|
179
|
+
value.addPositionedComments("after", closingComments);
|
|
180
|
+
}
|
|
181
|
+
return { value, newIndex: idx };
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg.value, null, withinGroup, withOrdinality, internalOrderBy, filterCondition);
|
|
185
|
+
// Set closing comments if available
|
|
186
|
+
if (closingComments && closingComments.length > 0) {
|
|
187
|
+
value.addPositionedComments("after", closingComments);
|
|
188
|
+
}
|
|
189
|
+
return { value, newIndex: idx };
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected opening parenthesis after function name '${name.name}'.`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
static parseKeywordFunction(lexemes, index, keywords) {
|
|
197
|
+
let idx = index;
|
|
198
|
+
// Parse function name and namespaces at the beginning for consistent usage
|
|
199
|
+
const fullNameResult = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx);
|
|
200
|
+
const namespaces = fullNameResult.namespaces;
|
|
201
|
+
const name = fullNameResult.name;
|
|
202
|
+
idx = fullNameResult.newIndex;
|
|
203
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
|
204
|
+
idx++;
|
|
205
|
+
const input = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
206
|
+
let arg = input.value;
|
|
207
|
+
idx = input.newIndex;
|
|
208
|
+
// Delegate to the standard function parser if parsing by comma
|
|
209
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Comma)) {
|
|
210
|
+
return this.parseFunctionCall(lexemes, index);
|
|
211
|
+
}
|
|
212
|
+
// Check for required/optional keywords in function arguments
|
|
213
|
+
for (const { key, required } of keywords) {
|
|
214
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Command) && lexemes[idx].value === key) {
|
|
215
|
+
idx++;
|
|
216
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Type)) {
|
|
217
|
+
const typeValue = this.parseTypeValue(lexemes, idx);
|
|
218
|
+
arg = new ValueComponent_1.BinaryExpression(arg, key, typeValue.value);
|
|
219
|
+
idx = typeValue.newIndex;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const right = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
223
|
+
arg = new ValueComponent_1.BinaryExpression(arg, key, right.value);
|
|
224
|
+
idx = right.newIndex;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else if (required) {
|
|
228
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Keyword '${key}' is required for ${name.name} function.`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
232
|
+
idx++;
|
|
233
|
+
// Check for WITHIN GROUP clause
|
|
234
|
+
let withinGroup = null;
|
|
235
|
+
if (idx < lexemes.length && lexemes[idx].value === "within group") {
|
|
236
|
+
const withinGroupResult = this.parseWithinGroupClause(lexemes, idx);
|
|
237
|
+
withinGroup = withinGroupResult.value;
|
|
238
|
+
idx = withinGroupResult.newIndex;
|
|
239
|
+
}
|
|
240
|
+
// Check for WITH ORDINALITY clause
|
|
241
|
+
let withOrdinality = false;
|
|
242
|
+
if (idx < lexemes.length && lexemes[idx].value === "with ordinality") {
|
|
243
|
+
withOrdinality = true;
|
|
244
|
+
idx++; // Skip single "with ordinality" token
|
|
245
|
+
}
|
|
246
|
+
// Use the previously parsed namespaces and function name for consistency
|
|
247
|
+
if (idx < lexemes.length && lexemes[idx].value === "over") {
|
|
248
|
+
idx++;
|
|
249
|
+
const over = OverExpressionParser_1.OverExpressionParser.parseFromLexeme(lexemes, idx);
|
|
250
|
+
idx = over.newIndex;
|
|
251
|
+
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg, over.value, withinGroup, withOrdinality, null);
|
|
252
|
+
return { value, newIndex: idx };
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg, null, withinGroup, withOrdinality, null);
|
|
256
|
+
return { value, newIndex: idx };
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Missing closing parenthesis for function '${name.name}'.`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Missing opening parenthesis for function '${name.name}'.`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
static parseTypeValue(lexemes, index) {
|
|
268
|
+
let idx = index;
|
|
269
|
+
const { namespaces, name, newIndex } = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx);
|
|
270
|
+
idx = newIndex;
|
|
271
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
|
272
|
+
const arg = ValueParser_1.ValueParser.parseArgument(Lexeme_1.TokenType.OpenParen, Lexeme_1.TokenType.CloseParen, lexemes, idx);
|
|
273
|
+
idx = arg.newIndex;
|
|
274
|
+
const value = new ValueComponent_1.TypeValue(namespaces, new ValueComponent_1.RawString(name.name), arg.value);
|
|
275
|
+
// Transfer positioned comments from the argument to the function
|
|
276
|
+
if (arg.value.positionedComments) {
|
|
277
|
+
value.positionedComments = arg.value.positionedComments;
|
|
278
|
+
}
|
|
279
|
+
if (arg.value.comments) {
|
|
280
|
+
value;
|
|
281
|
+
}
|
|
282
|
+
return { value, newIndex: idx };
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
const value = new ValueComponent_1.TypeValue(namespaces, new ValueComponent_1.RawString(name.name));
|
|
286
|
+
return { value, newIndex: idx };
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Parse WITHIN GROUP (ORDER BY ...) clause
|
|
291
|
+
* @param lexemes Array of lexemes to parse
|
|
292
|
+
* @param index Current parsing index (should point to "WITHIN GROUP")
|
|
293
|
+
* @returns Parsed OrderByClause and new index
|
|
294
|
+
*/
|
|
295
|
+
static parseWithinGroupClause(lexemes, index) {
|
|
296
|
+
let idx = index;
|
|
297
|
+
// Expect "WITHIN GROUP" (now a single token)
|
|
298
|
+
if (idx >= lexemes.length || lexemes[idx].value !== "within group") {
|
|
299
|
+
throw new Error(`Expected 'WITHIN GROUP' at index ${idx}`);
|
|
300
|
+
}
|
|
301
|
+
idx++;
|
|
302
|
+
// Expect "("
|
|
303
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
|
304
|
+
throw new Error(`Expected '(' after 'WITHIN GROUP' at index ${idx}`);
|
|
305
|
+
}
|
|
306
|
+
idx++;
|
|
307
|
+
// Parse ORDER BY clause
|
|
308
|
+
const orderByResult = OrderByClauseParser_1.OrderByClauseParser.parseFromLexeme(lexemes, idx);
|
|
309
|
+
idx = orderByResult.newIndex;
|
|
310
|
+
// Expect ")"
|
|
311
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
312
|
+
throw new Error(`Expected ')' after WITHIN GROUP ORDER BY clause at index ${idx}`);
|
|
313
|
+
}
|
|
314
|
+
idx++;
|
|
315
|
+
return { value: orderByResult.value, newIndex: idx };
|
|
316
|
+
}
|
|
317
|
+
static parseFilterClause(lexemes, index) {
|
|
318
|
+
let idx = index;
|
|
319
|
+
// Confirm the FILTER keyword is present before processing the clause.
|
|
320
|
+
if (idx >= lexemes.length || lexemes[idx].value !== "filter") {
|
|
321
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected 'FILTER' keyword.`);
|
|
322
|
+
}
|
|
323
|
+
idx++;
|
|
324
|
+
// Expect parentheses surrounding the WHERE predicate.
|
|
325
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
|
326
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected '(' after FILTER.`);
|
|
327
|
+
}
|
|
328
|
+
idx++;
|
|
329
|
+
// Require the WHERE keyword inside the FILTER clause.
|
|
330
|
+
if (idx >= lexemes.length || lexemes[idx].value !== "where") {
|
|
331
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected 'WHERE' inside FILTER clause.`);
|
|
332
|
+
}
|
|
333
|
+
idx++;
|
|
334
|
+
// Parse the predicate inside the FILTER clause and stop at the closing parenthesis.
|
|
335
|
+
const conditionResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
336
|
+
idx = conditionResult.newIndex;
|
|
337
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
338
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected ')' after FILTER predicate.`);
|
|
339
|
+
}
|
|
340
|
+
idx++;
|
|
341
|
+
return { condition: conditionResult.value, newIndex: idx };
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Parse arguments for aggregate functions that support internal ORDER BY
|
|
345
|
+
* Handles patterns like: string_agg(expr, separator ORDER BY sort_expr)
|
|
346
|
+
* @param lexemes Array of lexemes to parse
|
|
347
|
+
* @param index Current parsing index (should point to opening parenthesis)
|
|
348
|
+
* @returns Parsed arguments, ORDER BY clause, closing parenthesis comments, and new index
|
|
349
|
+
*/
|
|
350
|
+
static parseAggregateArguments(lexemes, index) {
|
|
351
|
+
let idx = index;
|
|
352
|
+
const args = [];
|
|
353
|
+
let orderByClause = null;
|
|
354
|
+
// Check for opening parenthesis
|
|
355
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
|
356
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected opening parenthesis.`);
|
|
357
|
+
}
|
|
358
|
+
idx++;
|
|
359
|
+
// Handle empty arguments
|
|
360
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
361
|
+
const closingComments = this.getClosingComments(lexemes[idx]);
|
|
362
|
+
idx++;
|
|
363
|
+
return { arguments: new ValueComponent_1.ValueList([]), orderByClause: null, closingComments, newIndex: idx };
|
|
364
|
+
}
|
|
365
|
+
// Handle wildcard case
|
|
366
|
+
if (idx < lexemes.length && lexemes[idx].value === "*") {
|
|
367
|
+
const wildcard = new ValueComponent_1.ColumnReference(null, "*");
|
|
368
|
+
idx++;
|
|
369
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
370
|
+
const closingComments = this.getClosingComments(lexemes[idx]);
|
|
371
|
+
idx++;
|
|
372
|
+
return { arguments: wildcard, orderByClause: null, closingComments, newIndex: idx };
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected closing parenthesis after wildcard '*'.`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Parse first argument
|
|
379
|
+
const firstArg = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
380
|
+
idx = firstArg.newIndex;
|
|
381
|
+
args.push(firstArg.value);
|
|
382
|
+
// Parse additional arguments separated by comma, or ORDER BY
|
|
383
|
+
while (idx < lexemes.length &&
|
|
384
|
+
((lexemes[idx].type & Lexeme_1.TokenType.Comma) || lexemes[idx].value === "order by")) {
|
|
385
|
+
// Check if current token is ORDER BY (without comma)
|
|
386
|
+
if (lexemes[idx].value === "order by") {
|
|
387
|
+
// Parse ORDER BY clause
|
|
388
|
+
const orderByResult = OrderByClauseParser_1.OrderByClauseParser.parseFromLexeme(lexemes, idx);
|
|
389
|
+
idx = orderByResult.newIndex;
|
|
390
|
+
orderByClause = orderByResult.value;
|
|
391
|
+
break; // ORDER BY should be the last element in aggregate functions
|
|
392
|
+
}
|
|
393
|
+
if (lexemes[idx].type & Lexeme_1.TokenType.Comma) {
|
|
394
|
+
idx++; // Skip comma
|
|
395
|
+
// Check if next token after comma is ORDER BY
|
|
396
|
+
if (idx < lexemes.length && lexemes[idx].value === "order by") {
|
|
397
|
+
// Parse ORDER BY clause
|
|
398
|
+
const orderByResult = OrderByClauseParser_1.OrderByClauseParser.parseFromLexeme(lexemes, idx);
|
|
399
|
+
idx = orderByResult.newIndex;
|
|
400
|
+
orderByClause = orderByResult.value;
|
|
401
|
+
break; // ORDER BY should be the last element in aggregate functions
|
|
402
|
+
}
|
|
403
|
+
// Parse regular argument after comma
|
|
404
|
+
const argResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
405
|
+
idx = argResult.newIndex;
|
|
406
|
+
args.push(argResult.value);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
// Check for closing parenthesis and capture comments
|
|
410
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
411
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected closing parenthesis.`);
|
|
412
|
+
}
|
|
413
|
+
const closingComments = this.getClosingComments(lexemes[idx]);
|
|
414
|
+
idx++;
|
|
415
|
+
// Return single argument if only one, otherwise return ValueList
|
|
416
|
+
const argumentsValue = args.length === 1 ? args[0] : new ValueComponent_1.ValueList(args);
|
|
417
|
+
return { arguments: argumentsValue, orderByClause, closingComments, newIndex: idx };
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Parse function arguments and capture closing parenthesis comments
|
|
421
|
+
* @param lexemes Array of lexemes to parse
|
|
422
|
+
* @param index Current parsing index (should point to opening parenthesis)
|
|
423
|
+
* @returns Parsed arguments, closing parenthesis comments, and new index
|
|
424
|
+
*/
|
|
425
|
+
static parseArgumentWithComments(lexemes, index) {
|
|
426
|
+
let idx = index;
|
|
427
|
+
// Check for opening parenthesis and capture its comments
|
|
428
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
|
429
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected opening parenthesis.`);
|
|
430
|
+
}
|
|
431
|
+
const openParenToken = lexemes[idx];
|
|
432
|
+
idx++; // Skip opening parenthesis
|
|
433
|
+
const args = [];
|
|
434
|
+
// Check for empty parentheses
|
|
435
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
436
|
+
const closingComments = this.getClosingComments(lexemes[idx]);
|
|
437
|
+
idx++; // Skip closing parenthesis
|
|
438
|
+
return { value: new ValueComponent_1.ValueList([]), closingComments, newIndex: idx };
|
|
439
|
+
}
|
|
440
|
+
// Handle wildcard case: count(*)
|
|
441
|
+
if (idx < lexemes.length && lexemes[idx].value === "*") {
|
|
442
|
+
const wildcard = new ValueComponent_1.ColumnReference(null, "*");
|
|
443
|
+
idx++;
|
|
444
|
+
// Check for closing parenthesis
|
|
445
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
446
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected closing parenthesis after wildcard '*'.`);
|
|
447
|
+
}
|
|
448
|
+
const closingComments = this.getClosingComments(lexemes[idx]);
|
|
449
|
+
idx++;
|
|
450
|
+
return { value: wildcard, closingComments, newIndex: idx };
|
|
451
|
+
}
|
|
452
|
+
// Parse regular arguments
|
|
453
|
+
const result = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
454
|
+
idx = result.newIndex;
|
|
455
|
+
// Transfer opening paren comments to the first argument
|
|
456
|
+
if (openParenToken.positionedComments && openParenToken.positionedComments.length > 0) {
|
|
457
|
+
// Convert "after" positioned comments from opening paren to "before" comments for the argument
|
|
458
|
+
const afterComments = openParenToken.positionedComments.filter(pc => pc.position === 'after');
|
|
459
|
+
if (afterComments.length > 0) {
|
|
460
|
+
const beforeComments = afterComments.map(pc => ({
|
|
461
|
+
position: 'before',
|
|
462
|
+
comments: pc.comments
|
|
463
|
+
}));
|
|
464
|
+
// Merge positioned comments (don't convert legacy comments since they're already positioned)
|
|
465
|
+
result.value.positionedComments = [
|
|
466
|
+
...beforeComments,
|
|
467
|
+
...(result.value.positionedComments || [])
|
|
468
|
+
];
|
|
469
|
+
// Clear legacy comments to prevent duplication
|
|
470
|
+
result.value;
|
|
471
|
+
// Also clear positioned comments from nested components to prevent duplication
|
|
472
|
+
// This is needed because both the outer component and inner components might have the same comments
|
|
473
|
+
if ('qualifiedName' in result.value && result.value.qualifiedName) {
|
|
474
|
+
if ('name' in result.value.qualifiedName && result.value.qualifiedName.name) {
|
|
475
|
+
result.value.qualifiedName.name.positionedComments = null;
|
|
476
|
+
result.value.qualifiedName.name;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
args.push(result.value);
|
|
482
|
+
// Continue reading if the next element is a comma
|
|
483
|
+
while (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Comma)) {
|
|
484
|
+
idx++;
|
|
485
|
+
const argResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
486
|
+
idx = argResult.newIndex;
|
|
487
|
+
args.push(argResult.value);
|
|
488
|
+
}
|
|
489
|
+
// Check for closing parenthesis
|
|
490
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
|
491
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected closing parenthesis.`);
|
|
492
|
+
}
|
|
493
|
+
const closingComments = this.getClosingComments(lexemes[idx]);
|
|
494
|
+
idx++;
|
|
495
|
+
// Return single argument if only one, otherwise return ValueList
|
|
496
|
+
const argumentsValue = args.length === 1 ? args[0] : new ValueComponent_1.ValueList(args);
|
|
497
|
+
return { value: argumentsValue, closingComments, newIndex: idx };
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Normalize closing parenthesis comments to preserve positioned and legacy comment metadata.
|
|
501
|
+
*/
|
|
502
|
+
static getClosingComments(lexeme) {
|
|
503
|
+
if (!lexeme) {
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
const commentInfo = (0, LexemeCommentUtils_1.extractLexemeComments)(lexeme);
|
|
507
|
+
if (commentInfo.after.length > 0) {
|
|
508
|
+
return commentInfo.after;
|
|
509
|
+
}
|
|
510
|
+
if (commentInfo.before.length > 0) {
|
|
511
|
+
return commentInfo.before;
|
|
512
|
+
}
|
|
513
|
+
return null;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
exports.FunctionExpressionParser = FunctionExpressionParser;
|
|
517
|
+
/**
|
|
518
|
+
* Aggregate functions that support internal ORDER BY clause
|
|
519
|
+
*/
|
|
520
|
+
FunctionExpressionParser.AGGREGATE_FUNCTIONS_WITH_ORDER_BY = new Set([
|
|
521
|
+
'string_agg', 'array_agg', 'json_agg', 'jsonb_agg',
|
|
522
|
+
'json_object_agg', 'jsonb_object_agg', 'xmlagg'
|
|
523
|
+
]);
|
|
524
|
+
//# sourceMappingURL=FunctionExpressionParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FunctionExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/FunctionExpressionParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GroupByClauseParser = void 0;
|
|
4
|
+
const Clause_1 = require("../models/Clause");
|
|
5
|
+
const Lexeme_1 = require("../models/Lexeme");
|
|
6
|
+
const SqlTokenizer_1 = require("./SqlTokenizer");
|
|
7
|
+
const ValueParser_1 = require("./ValueParser");
|
|
8
|
+
class GroupByClauseParser {
|
|
9
|
+
// Parse SQL string to AST (was: parse)
|
|
10
|
+
static parse(query) {
|
|
11
|
+
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query); // Initialize tokenizer
|
|
12
|
+
const lexemes = tokenizer.readLexmes(); // Get tokens
|
|
13
|
+
// Parse
|
|
14
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
|
15
|
+
// Error if there are remaining tokens
|
|
16
|
+
if (result.newIndex < lexemes.length) {
|
|
17
|
+
throw new Error(`Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The GROUP BY clause is complete but there are additional tokens.`);
|
|
18
|
+
}
|
|
19
|
+
return result.value;
|
|
20
|
+
}
|
|
21
|
+
// Parse from lexeme array (was: parse)
|
|
22
|
+
static parseFromLexeme(lexemes, index) {
|
|
23
|
+
let idx = index;
|
|
24
|
+
if (lexemes[idx].value !== 'group by') {
|
|
25
|
+
throw new Error(`Syntax error at position ${idx}: Expected 'GROUP BY' keyword but found "${lexemes[idx].value}". GROUP BY clauses must start with the GROUP BY keywords.`);
|
|
26
|
+
}
|
|
27
|
+
idx++;
|
|
28
|
+
if (idx >= lexemes.length) {
|
|
29
|
+
throw new Error(`Syntax error: Unexpected end of input after 'GROUP BY' keyword. The GROUP BY clause requires at least one expression to group by.`);
|
|
30
|
+
}
|
|
31
|
+
const items = [];
|
|
32
|
+
const item = this.parseItem(lexemes, idx);
|
|
33
|
+
items.push(item.value);
|
|
34
|
+
idx = item.newIndex;
|
|
35
|
+
while (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Comma)) {
|
|
36
|
+
idx++;
|
|
37
|
+
const item = this.parseItem(lexemes, idx);
|
|
38
|
+
items.push(item.value);
|
|
39
|
+
idx = item.newIndex;
|
|
40
|
+
}
|
|
41
|
+
if (items.length === 0) {
|
|
42
|
+
throw new Error(`Syntax error at position ${index}: No grouping expressions found. The GROUP BY clause requires at least one expression to group by.`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const clause = new Clause_1.GroupByClause(items);
|
|
46
|
+
return { value: clause, newIndex: idx };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
static parseItem(lexemes, index) {
|
|
50
|
+
let idx = index;
|
|
51
|
+
const parsedValue = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
52
|
+
const value = parsedValue.value;
|
|
53
|
+
idx = parsedValue.newIndex;
|
|
54
|
+
return { value, newIndex: idx };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.GroupByClauseParser = GroupByClauseParser;
|
|
58
|
+
//# sourceMappingURL=GroupByParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupByParser.js","sourceRoot":"","sources":["../../src/parsers/GroupByParser.ts"],"names":[],"mappings":";;;AAAA,6CAAiD;AACjD,6CAAqD;AAErD,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,mBAAmB;IAC5B,uCAAuC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,2BAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa;QAErD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,oEAAoE,CAAC,CAAC;QAC3L,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,4CAA4C,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,4DAA4D,CAAC,CAAC;QAC/K,CAAC;QACD,GAAG,EAAE,CAAC;QAEN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mIAAmI,CAAC,CAAC;QACzJ,CAAC;QAED,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEpB,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,kBAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,GAAG,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,oGAAoG,CAAC,CAAC;QAC3J,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,sBAAa,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,OAAiB,EAAE,KAAa;QACrD,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,WAAW,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAChC,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACpC,CAAC;CACJ;AAzDD,kDAyDC"}
|