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,564 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectQueryParser = void 0;
|
|
4
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
|
5
|
+
const SelectClauseParser_1 = require("./SelectClauseParser");
|
|
6
|
+
const FromClauseParser_1 = require("./FromClauseParser");
|
|
7
|
+
const WhereClauseParser_1 = require("./WhereClauseParser");
|
|
8
|
+
const GroupByParser_1 = require("./GroupByParser");
|
|
9
|
+
const HavingParser_1 = require("./HavingParser");
|
|
10
|
+
const OrderByClauseParser_1 = require("./OrderByClauseParser");
|
|
11
|
+
const WindowClauseParser_1 = require("./WindowClauseParser");
|
|
12
|
+
const LimitClauseParser_1 = require("./LimitClauseParser");
|
|
13
|
+
const ForClauseParser_1 = require("./ForClauseParser");
|
|
14
|
+
const SqlTokenizer_1 = require("./SqlTokenizer");
|
|
15
|
+
const WithClauseParser_1 = require("./WithClauseParser");
|
|
16
|
+
const ValuesQueryParser_1 = require("./ValuesQueryParser");
|
|
17
|
+
const FetchClauseParser_1 = require("./FetchClauseParser");
|
|
18
|
+
const OffsetClauseParser_1 = require("./OffsetClauseParser");
|
|
19
|
+
const CTERegionDetector_1 = require("../utils/CTERegionDetector");
|
|
20
|
+
/**
|
|
21
|
+
* Legacy SELECT-only parser.
|
|
22
|
+
* Prefer using SqlParser as the canonical entry point for multi-statement or mixed-statement workflows.
|
|
23
|
+
*/
|
|
24
|
+
class SelectQueryParser {
|
|
25
|
+
// Parse SQL string to AST (was: parse)
|
|
26
|
+
static parse(query) {
|
|
27
|
+
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query);
|
|
28
|
+
const lexemes = tokenizer.readLexmes();
|
|
29
|
+
// Parse
|
|
30
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
|
31
|
+
// Error if there are remaining tokens
|
|
32
|
+
if (result.newIndex < lexemes.length) {
|
|
33
|
+
throw new Error(`[SelectQueryParser] Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The SELECT query is complete but there are additional tokens.`);
|
|
34
|
+
}
|
|
35
|
+
return result.value;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Analyzes SQL string for parsing without throwing errors.
|
|
39
|
+
* Returns a result object containing the parsed query on success,
|
|
40
|
+
* or error information if parsing fails.
|
|
41
|
+
*
|
|
42
|
+
* @param query SQL string to analyze
|
|
43
|
+
* @returns Analysis result containing query, error information, and success status
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* Calculate character position from token index by finding token in original query
|
|
47
|
+
*/
|
|
48
|
+
static calculateCharacterPosition(query, lexemes, tokenIndex) {
|
|
49
|
+
var _a;
|
|
50
|
+
if (tokenIndex >= lexemes.length) {
|
|
51
|
+
return query.length;
|
|
52
|
+
}
|
|
53
|
+
// If lexeme has position information, use it
|
|
54
|
+
const lexeme = lexemes[tokenIndex];
|
|
55
|
+
if (((_a = lexeme.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== undefined) {
|
|
56
|
+
return lexeme.position.startPosition;
|
|
57
|
+
}
|
|
58
|
+
// Fallback: search for token in original query
|
|
59
|
+
// Build search pattern from tokens up to the target
|
|
60
|
+
let searchStart = 0;
|
|
61
|
+
for (let i = 0; i < tokenIndex; i++) {
|
|
62
|
+
const tokenValue = lexemes[i].value;
|
|
63
|
+
const tokenPos = query.indexOf(tokenValue, searchStart);
|
|
64
|
+
if (tokenPos !== -1) {
|
|
65
|
+
searchStart = tokenPos + tokenValue.length;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const targetToken = lexemes[tokenIndex].value;
|
|
69
|
+
const tokenPos = query.indexOf(targetToken, searchStart);
|
|
70
|
+
return tokenPos !== -1 ? tokenPos : searchStart;
|
|
71
|
+
}
|
|
72
|
+
static analyze(query) {
|
|
73
|
+
let lexemes = [];
|
|
74
|
+
try {
|
|
75
|
+
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query);
|
|
76
|
+
lexemes = tokenizer.readLexmes();
|
|
77
|
+
// Parse
|
|
78
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
|
79
|
+
// Check for remaining tokens
|
|
80
|
+
if (result.newIndex < lexemes.length) {
|
|
81
|
+
const remainingTokens = lexemes.slice(result.newIndex).map(lex => lex.value);
|
|
82
|
+
const errorLexeme = lexemes[result.newIndex];
|
|
83
|
+
const errorPosition = this.calculateCharacterPosition(query, lexemes, result.newIndex);
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
query: result.value,
|
|
87
|
+
error: `Syntax error: Unexpected token "${errorLexeme.value}" at character position ${errorPosition}. The SELECT query is complete but there are additional tokens.`,
|
|
88
|
+
errorPosition: errorPosition,
|
|
89
|
+
remainingTokens: remainingTokens
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
query: result.value
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// Extract position information from error message if available
|
|
99
|
+
let errorPosition;
|
|
100
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
101
|
+
// Try to extract token index from error message and convert to character position
|
|
102
|
+
const positionMatch = errorMessage.match(/position (\d+)/);
|
|
103
|
+
if (positionMatch) {
|
|
104
|
+
const tokenIndex = parseInt(positionMatch[1], 10);
|
|
105
|
+
errorPosition = this.calculateCharacterPosition(query, lexemes, tokenIndex);
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
error: errorMessage,
|
|
110
|
+
errorPosition: errorPosition
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Asynchronously parse SQL string to AST.
|
|
116
|
+
* This method wraps the synchronous parse logic in a Promise for future extensibility.
|
|
117
|
+
* @param query SQL string to parse
|
|
118
|
+
* @returns Promise<SelectQuery>
|
|
119
|
+
*/
|
|
120
|
+
static async parseAsync(query) {
|
|
121
|
+
// For now, just wrap the sync parse in a resolved Promise
|
|
122
|
+
return Promise.resolve(this.parse(query));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Transfer headerComments from source query to target query and clear from source
|
|
126
|
+
* @param source Source query to transfer headerComments from
|
|
127
|
+
* @param target Target query to receive headerComments
|
|
128
|
+
*/
|
|
129
|
+
static transferHeaderComments(source, target) {
|
|
130
|
+
if (source.headerComments) {
|
|
131
|
+
target.headerComments = source.headerComments;
|
|
132
|
+
// Clear headerComments from the source query to avoid duplication
|
|
133
|
+
source.headerComments = null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
static extractUnionTokenComments(unionLexeme) {
|
|
137
|
+
const comments = [];
|
|
138
|
+
if (unionLexeme.positionedComments && unionLexeme.positionedComments.length > 0) {
|
|
139
|
+
for (const posComment of unionLexeme.positionedComments) {
|
|
140
|
+
if (posComment.comments && posComment.comments.length > 0) {
|
|
141
|
+
comments.push(...posComment.comments);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
unionLexeme.positionedComments = undefined;
|
|
145
|
+
}
|
|
146
|
+
if (unionLexeme.comments && unionLexeme.comments.length > 0) {
|
|
147
|
+
comments.push(...unionLexeme.comments);
|
|
148
|
+
unionLexeme.comments = null;
|
|
149
|
+
}
|
|
150
|
+
return comments.length > 0 ? comments : null;
|
|
151
|
+
}
|
|
152
|
+
// Parse from lexeme array (was: parse)
|
|
153
|
+
static parseFromLexeme(lexemes, index) {
|
|
154
|
+
let idx = index;
|
|
155
|
+
if (idx >= lexemes.length) {
|
|
156
|
+
throw new Error(`Syntax error: Unexpected end of input at position ${index}.`);
|
|
157
|
+
}
|
|
158
|
+
// Check if the first token is a SELECT keyword or VALUES
|
|
159
|
+
const firstToken = lexemes[idx].value;
|
|
160
|
+
if (!this.selectCommandSet.has(firstToken) && firstToken !== 'values') {
|
|
161
|
+
throw new Error(`Syntax error at position ${idx}: Expected 'SELECT' or 'VALUES' keyword but found "${lexemes[idx].value}".`);
|
|
162
|
+
}
|
|
163
|
+
let firstResult = this.selectCommandSet.has(firstToken)
|
|
164
|
+
? this.parseSimpleSelectQuery(lexemes, idx)
|
|
165
|
+
: this.parseValuesQuery(lexemes, idx);
|
|
166
|
+
let query = firstResult.value;
|
|
167
|
+
idx = firstResult.newIndex;
|
|
168
|
+
// check 'union'
|
|
169
|
+
while (idx < lexemes.length && this.unionCommandSet.has(lexemes[idx].value.toLowerCase())) {
|
|
170
|
+
const operatorLexeme = lexemes[idx];
|
|
171
|
+
const operator = operatorLexeme.value.toLowerCase();
|
|
172
|
+
const unionComments = this.extractUnionTokenComments(operatorLexeme);
|
|
173
|
+
idx++;
|
|
174
|
+
if (idx >= lexemes.length) {
|
|
175
|
+
throw new Error(`Syntax error at position ${idx}: Expected a query after '${operator.toUpperCase()}' but found end of input.`);
|
|
176
|
+
}
|
|
177
|
+
const nextToken = lexemes[idx].value.toLowerCase();
|
|
178
|
+
if (this.selectCommandSet.has(nextToken)) {
|
|
179
|
+
const result = this.parseSimpleSelectQuery(lexemes, idx);
|
|
180
|
+
const binaryQuery = new SelectQuery_1.BinarySelectQuery(query, operator, result.value);
|
|
181
|
+
// Transfer headerComments from the first query to the BinarySelectQuery
|
|
182
|
+
this.transferHeaderComments(query, binaryQuery);
|
|
183
|
+
// Assign UNION comments to right query as headerComments (semantic positioning)
|
|
184
|
+
if (unionComments && unionComments.length > 0) {
|
|
185
|
+
if (result.value.headerComments) {
|
|
186
|
+
// Prepend UNION comments to existing headerComments
|
|
187
|
+
result.value.headerComments = [...unionComments, ...result.value.headerComments];
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
result.value.headerComments = unionComments;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
query = binaryQuery;
|
|
194
|
+
idx = result.newIndex;
|
|
195
|
+
}
|
|
196
|
+
else if (nextToken === 'values') {
|
|
197
|
+
const result = this.parseValuesQuery(lexemes, idx);
|
|
198
|
+
const binaryQuery = new SelectQuery_1.BinarySelectQuery(query, operator, result.value);
|
|
199
|
+
// Transfer headerComments from the first query to the BinarySelectQuery
|
|
200
|
+
this.transferHeaderComments(query, binaryQuery);
|
|
201
|
+
// Assign UNION comments to the right side query as headerComments (semantic positioning)
|
|
202
|
+
if (unionComments && unionComments.length > 0) {
|
|
203
|
+
if (result.value.headerComments) {
|
|
204
|
+
result.value.headerComments = [...unionComments, ...result.value.headerComments];
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
result.value.headerComments = unionComments;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
query = binaryQuery;
|
|
211
|
+
idx = result.newIndex;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
throw new Error(`Syntax error at position ${idx}: Expected 'SELECT' or 'VALUES' after '${operator.toUpperCase()}' but found "${lexemes[idx].value}".`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return { value: query, newIndex: idx };
|
|
218
|
+
}
|
|
219
|
+
static parseSimpleSelectQuery(lexemes, index) {
|
|
220
|
+
var _a, _b;
|
|
221
|
+
let idx = index;
|
|
222
|
+
// 1. Parse optional WITH clause and collect header comments
|
|
223
|
+
const { withClauseResult, newIndex: withEndIndex, selectQuery: queryTemplate } = this.parseWithClauseAndComments(lexemes, idx);
|
|
224
|
+
idx = withEndIndex;
|
|
225
|
+
// 2. Parse all SQL clauses sequentially
|
|
226
|
+
const { clauses, newIndex: clausesEndIndex, selectTokenComments } = this.parseAllClauses(lexemes, idx, withClauseResult);
|
|
227
|
+
idx = clausesEndIndex;
|
|
228
|
+
// Merge SELECT token comments based on presence of WITH clause
|
|
229
|
+
if (selectTokenComments && selectTokenComments.length > 0) {
|
|
230
|
+
if (withClauseResult) {
|
|
231
|
+
const existingBetween = (_a = queryTemplate.betweenClauseComments) !== null && _a !== void 0 ? _a : [];
|
|
232
|
+
const merged = [...existingBetween];
|
|
233
|
+
for (const comment of selectTokenComments) {
|
|
234
|
+
if (!merged.includes(comment)) {
|
|
235
|
+
merged.push(comment);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
queryTemplate.betweenClauseComments = merged;
|
|
239
|
+
queryTemplate.mainSelectPrefixComments = undefined;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
const existingHeader = (_b = queryTemplate.headerComments) !== null && _b !== void 0 ? _b : [];
|
|
243
|
+
queryTemplate.headerComments = [
|
|
244
|
+
...existingHeader,
|
|
245
|
+
...selectTokenComments
|
|
246
|
+
];
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// 3. Create final query with parsed clauses
|
|
250
|
+
const selectQuery = new SelectQuery_1.SimpleSelectQuery({
|
|
251
|
+
withClause: withClauseResult ? withClauseResult.value : null,
|
|
252
|
+
...clauses
|
|
253
|
+
});
|
|
254
|
+
// 4. Apply collected comments directly to the query
|
|
255
|
+
this.applyCommentsToQuery(selectQuery, queryTemplate, withClauseResult);
|
|
256
|
+
return { value: selectQuery, newIndex: idx };
|
|
257
|
+
}
|
|
258
|
+
// Parse WITH clause and collect header comments
|
|
259
|
+
static parseWithClauseAndComments(lexemes, index) {
|
|
260
|
+
let idx = index;
|
|
261
|
+
let withClauseResult = null;
|
|
262
|
+
const queryTemplate = {};
|
|
263
|
+
// Collect header comments before WITH or SELECT
|
|
264
|
+
queryTemplate.headerComments = this.collectHeaderComments(lexemes, idx);
|
|
265
|
+
// Skip to WITH or SELECT token
|
|
266
|
+
while (idx < lexemes.length &&
|
|
267
|
+
lexemes[idx].value.toLowerCase() !== 'with' &&
|
|
268
|
+
lexemes[idx].value.toLowerCase() !== 'select') {
|
|
269
|
+
idx++;
|
|
270
|
+
}
|
|
271
|
+
// Collect 'before' comments from WITH token
|
|
272
|
+
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'with') {
|
|
273
|
+
this.collectWithTokenHeaderComments(lexemes[idx], queryTemplate);
|
|
274
|
+
}
|
|
275
|
+
// Parse WITH clause if present
|
|
276
|
+
if (idx < lexemes.length && lexemes[idx].value === 'with') {
|
|
277
|
+
withClauseResult = WithClauseParser_1.WithClauseParser.parseFromLexeme(lexemes, idx);
|
|
278
|
+
idx = withClauseResult.newIndex;
|
|
279
|
+
// Collect comments between WITH clause and SELECT
|
|
280
|
+
queryTemplate.mainSelectPrefixComments = this.collectMainSelectPrefixComments(lexemes, withClauseResult, idx);
|
|
281
|
+
queryTemplate.betweenClauseComments = this.collectBetweenClauseComments(lexemes, withClauseResult, idx);
|
|
282
|
+
}
|
|
283
|
+
return { withClauseResult, newIndex: idx, selectQuery: queryTemplate };
|
|
284
|
+
}
|
|
285
|
+
// Parse all SQL clauses (SELECT, FROM, WHERE, etc.)
|
|
286
|
+
static parseAllClauses(lexemes, index, withClauseResult) {
|
|
287
|
+
let idx = index;
|
|
288
|
+
// Find and parse SELECT clause
|
|
289
|
+
idx = this.findMainSelectToken(lexemes, idx, withClauseResult);
|
|
290
|
+
const selectTokenComments = this.collectSelectTokenComments(lexemes, idx);
|
|
291
|
+
const selectClauseResult = SelectClauseParser_1.SelectClauseParser.parseFromLexeme(lexemes, idx);
|
|
292
|
+
idx = selectClauseResult.newIndex;
|
|
293
|
+
// Parse optional clauses
|
|
294
|
+
const fromClauseResult = this.parseOptionalClause(lexemes, idx, 'from', FromClauseParser_1.FromClauseParser);
|
|
295
|
+
idx = fromClauseResult.newIndex;
|
|
296
|
+
const whereClauseResult = this.parseOptionalClause(lexemes, fromClauseResult.newIndex, 'where', WhereClauseParser_1.WhereClauseParser);
|
|
297
|
+
idx = whereClauseResult.newIndex;
|
|
298
|
+
const groupByClauseResult = this.parseOptionalClause(lexemes, whereClauseResult.newIndex, 'group by', GroupByParser_1.GroupByClauseParser);
|
|
299
|
+
idx = groupByClauseResult.newIndex;
|
|
300
|
+
const havingClauseResult = this.parseOptionalClause(lexemes, groupByClauseResult.newIndex, 'having', HavingParser_1.HavingClauseParser);
|
|
301
|
+
idx = havingClauseResult.newIndex;
|
|
302
|
+
const windowClauseResult = this.parseOptionalClause(lexemes, havingClauseResult.newIndex, 'window', WindowClauseParser_1.WindowClauseParser);
|
|
303
|
+
idx = windowClauseResult.newIndex;
|
|
304
|
+
const orderByClauseResult = this.parseOptionalClause(lexemes, windowClauseResult.newIndex, 'order by', OrderByClauseParser_1.OrderByClauseParser);
|
|
305
|
+
idx = orderByClauseResult.newIndex;
|
|
306
|
+
const limitClauseResult = this.parseOptionalClause(lexemes, orderByClauseResult.newIndex, 'limit', LimitClauseParser_1.LimitClauseParser);
|
|
307
|
+
idx = limitClauseResult.newIndex;
|
|
308
|
+
const offsetClauseResult = this.parseOptionalClause(lexemes, limitClauseResult.newIndex, 'offset', OffsetClauseParser_1.OffsetClauseParser);
|
|
309
|
+
idx = offsetClauseResult.newIndex;
|
|
310
|
+
const fetchClauseResult = this.parseOptionalClause(lexemes, offsetClauseResult.newIndex, 'fetch', FetchClauseParser_1.FetchClauseParser);
|
|
311
|
+
idx = fetchClauseResult.newIndex;
|
|
312
|
+
const forClauseResult = this.parseOptionalClause(lexemes, fetchClauseResult.newIndex, 'for', ForClauseParser_1.ForClauseParser);
|
|
313
|
+
idx = forClauseResult.newIndex;
|
|
314
|
+
const clauses = {
|
|
315
|
+
selectClause: selectClauseResult.value,
|
|
316
|
+
fromClause: fromClauseResult.value,
|
|
317
|
+
whereClause: whereClauseResult.value,
|
|
318
|
+
groupByClause: groupByClauseResult.value,
|
|
319
|
+
havingClause: havingClauseResult.value,
|
|
320
|
+
orderByClause: orderByClauseResult.value,
|
|
321
|
+
windowClause: windowClauseResult.value,
|
|
322
|
+
limitClause: limitClauseResult.value,
|
|
323
|
+
offsetClause: offsetClauseResult.value,
|
|
324
|
+
fetchClause: fetchClauseResult.value,
|
|
325
|
+
forClause: forClauseResult.value
|
|
326
|
+
};
|
|
327
|
+
return { clauses, newIndex: idx, selectTokenComments };
|
|
328
|
+
}
|
|
329
|
+
// Helper to parse optional clauses
|
|
330
|
+
static parseOptionalClause(lexemes, index, keyword, parser) {
|
|
331
|
+
if (index < lexemes.length && lexemes[index].value.toLowerCase() === keyword) {
|
|
332
|
+
return parser.parseFromLexeme(lexemes, index);
|
|
333
|
+
}
|
|
334
|
+
return { value: null, newIndex: index };
|
|
335
|
+
}
|
|
336
|
+
// Collect header comments before meaningful tokens
|
|
337
|
+
static collectHeaderComments(lexemes, startIndex) {
|
|
338
|
+
const headerComments = [];
|
|
339
|
+
let idx = startIndex;
|
|
340
|
+
while (idx < lexemes.length &&
|
|
341
|
+
lexemes[idx].value.toLowerCase() !== 'with' &&
|
|
342
|
+
lexemes[idx].value.toLowerCase() !== 'select') {
|
|
343
|
+
const token = lexemes[idx];
|
|
344
|
+
if (token.positionedComments) {
|
|
345
|
+
for (const posComment of token.positionedComments) {
|
|
346
|
+
if (posComment.comments) {
|
|
347
|
+
headerComments.push(...posComment.comments);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (token.comments && token.comments.length > 0) {
|
|
352
|
+
headerComments.push(...token.comments);
|
|
353
|
+
}
|
|
354
|
+
idx++;
|
|
355
|
+
}
|
|
356
|
+
return headerComments;
|
|
357
|
+
}
|
|
358
|
+
// Collect 'before' positioned comments from WITH token
|
|
359
|
+
static collectWithTokenHeaderComments(withToken, queryTemplate) {
|
|
360
|
+
if (!withToken.positionedComments)
|
|
361
|
+
return;
|
|
362
|
+
if (!queryTemplate.headerComments)
|
|
363
|
+
queryTemplate.headerComments = [];
|
|
364
|
+
const remainingPositioned = [];
|
|
365
|
+
for (const posComment of withToken.positionedComments) {
|
|
366
|
+
if (posComment.position === 'before' && posComment.comments) {
|
|
367
|
+
queryTemplate.headerComments.push(...posComment.comments);
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
remainingPositioned.push(posComment);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
withToken.positionedComments = remainingPositioned.length > 0 ? remainingPositioned : undefined;
|
|
374
|
+
}
|
|
375
|
+
// Collect comments between WITH clause and main SELECT
|
|
376
|
+
static collectMainSelectPrefixComments(lexemes, withClauseResult, currentIndex) {
|
|
377
|
+
const mainSelectPrefixComments = [];
|
|
378
|
+
// Get trailing comments from WITH clause
|
|
379
|
+
if (withClauseResult === null || withClauseResult === void 0 ? void 0 : withClauseResult.value.trailingComments) {
|
|
380
|
+
mainSelectPrefixComments.push(...withClauseResult.value.trailingComments);
|
|
381
|
+
}
|
|
382
|
+
// Find main SELECT token
|
|
383
|
+
const mainSelectIdx = this.findMainSelectIndex(lexemes, withClauseResult, currentIndex);
|
|
384
|
+
// Scan tokens between WITH end and main SELECT
|
|
385
|
+
if (withClauseResult && mainSelectIdx > withClauseResult.newIndex) {
|
|
386
|
+
for (let tempIdx = withClauseResult.newIndex; tempIdx < mainSelectIdx; tempIdx++) {
|
|
387
|
+
const token = lexemes[tempIdx];
|
|
388
|
+
if (token.positionedComments) {
|
|
389
|
+
for (const posComment of token.positionedComments) {
|
|
390
|
+
if (posComment.comments) {
|
|
391
|
+
mainSelectPrefixComments.push(...posComment.comments);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
if (token.comments && token.comments.length > 0) {
|
|
396
|
+
mainSelectPrefixComments.push(...token.comments);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return mainSelectPrefixComments;
|
|
401
|
+
}
|
|
402
|
+
// Collect comments between clauses
|
|
403
|
+
static collectBetweenClauseComments(lexemes, withClauseResult, currentIndex) {
|
|
404
|
+
if (!withClauseResult)
|
|
405
|
+
return [];
|
|
406
|
+
const betweenClauseComments = [];
|
|
407
|
+
const withEndIndex = withClauseResult.newIndex;
|
|
408
|
+
const scanStartIndex = Math.max(0, withEndIndex - 1);
|
|
409
|
+
for (let i = scanStartIndex; i < currentIndex; i++) {
|
|
410
|
+
const token = lexemes[i];
|
|
411
|
+
if (token.positionedComments && token.positionedComments.length > 0) {
|
|
412
|
+
for (const posComment of token.positionedComments) {
|
|
413
|
+
if (posComment.comments) {
|
|
414
|
+
betweenClauseComments.push(...posComment.comments);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
token.positionedComments = undefined;
|
|
418
|
+
}
|
|
419
|
+
if (token.comments && token.comments.length > 0) {
|
|
420
|
+
betweenClauseComments.push(...token.comments);
|
|
421
|
+
token.comments = null;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
return betweenClauseComments;
|
|
425
|
+
}
|
|
426
|
+
// Find main SELECT token index
|
|
427
|
+
static findMainSelectIndex(lexemes, withClauseResult, fallbackIndex) {
|
|
428
|
+
if (withClauseResult) {
|
|
429
|
+
for (let i = withClauseResult.newIndex; i < lexemes.length; i++) {
|
|
430
|
+
if (lexemes[i].value.toLowerCase() === 'select') {
|
|
431
|
+
return i;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return fallbackIndex;
|
|
436
|
+
}
|
|
437
|
+
// Find and validate main SELECT token
|
|
438
|
+
static findMainSelectToken(lexemes, index, withClauseResult) {
|
|
439
|
+
const mainSelectIdx = this.findMainSelectIndex(lexemes, withClauseResult, index);
|
|
440
|
+
if (mainSelectIdx >= lexemes.length || lexemes[mainSelectIdx].value !== 'select') {
|
|
441
|
+
throw new Error(`Syntax error at position ${mainSelectIdx}: Expected 'SELECT' keyword but found "${mainSelectIdx < lexemes.length ? lexemes[mainSelectIdx].value : 'end of input'}". SELECT queries must start with the SELECT keyword.`);
|
|
442
|
+
}
|
|
443
|
+
return mainSelectIdx;
|
|
444
|
+
}
|
|
445
|
+
// Collect and clear comments from SELECT token
|
|
446
|
+
static collectSelectTokenComments(lexemes, selectIndex) {
|
|
447
|
+
const selectToken = lexemes[selectIndex];
|
|
448
|
+
const selectComments = [];
|
|
449
|
+
if (selectToken.comments && selectToken.comments.length > 0) {
|
|
450
|
+
selectComments.push(...selectToken.comments);
|
|
451
|
+
selectToken.comments = null;
|
|
452
|
+
}
|
|
453
|
+
if (selectToken.positionedComments && selectToken.positionedComments.length > 0) {
|
|
454
|
+
for (const posComment of selectToken.positionedComments) {
|
|
455
|
+
if (posComment.position === 'before' && posComment.comments) {
|
|
456
|
+
selectComments.push(...posComment.comments);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
selectToken.positionedComments = undefined;
|
|
460
|
+
}
|
|
461
|
+
return selectComments;
|
|
462
|
+
}
|
|
463
|
+
// Apply all collected comments directly to the query
|
|
464
|
+
static applyCommentsToQuery(selectQuery, queryTemplate, withClauseResult) {
|
|
465
|
+
var _a;
|
|
466
|
+
// Apply header comments directly
|
|
467
|
+
if (((_a = queryTemplate.headerComments) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
468
|
+
selectQuery.headerComments = queryTemplate.headerComments;
|
|
469
|
+
}
|
|
470
|
+
// Merge helper to avoid duplicate between-clause comments
|
|
471
|
+
const mergeBetweenComments = (source) => {
|
|
472
|
+
var _a;
|
|
473
|
+
if (!source || source.length === 0) {
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
const existing = (_a = selectQuery.comments) !== null && _a !== void 0 ? _a : [];
|
|
477
|
+
const merged = [];
|
|
478
|
+
for (const comment of source) {
|
|
479
|
+
if (!merged.includes(comment)) {
|
|
480
|
+
merged.push(comment);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
for (const comment of existing) {
|
|
484
|
+
if (!merged.includes(comment)) {
|
|
485
|
+
merged.push(comment);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
selectQuery.comments = merged;
|
|
489
|
+
};
|
|
490
|
+
mergeBetweenComments(queryTemplate.mainSelectPrefixComments);
|
|
491
|
+
mergeBetweenComments(queryTemplate.betweenClauseComments);
|
|
492
|
+
}
|
|
493
|
+
static parseValuesQuery(lexemes, index) {
|
|
494
|
+
// Use ValuesQueryParser to parse VALUES clause
|
|
495
|
+
const result = ValuesQueryParser_1.ValuesQueryParser.parseFromLexeme(lexemes, index);
|
|
496
|
+
// Return the result from ValuesQueryParser directly
|
|
497
|
+
return { value: result.value, newIndex: result.newIndex };
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Get the CTE name at the specified cursor position.
|
|
501
|
+
*
|
|
502
|
+
* This method provides a simple interface for retrieving the CTE name
|
|
503
|
+
* based on a 1D cursor position in the SQL text.
|
|
504
|
+
*
|
|
505
|
+
* @deprecated Use CTERegionDetector.getCursorCte() instead for better API consistency
|
|
506
|
+
* @param sql - The SQL string to analyze
|
|
507
|
+
* @param cursorPosition - The cursor position (0-based character offset)
|
|
508
|
+
* @returns The CTE name if cursor is in a CTE, null otherwise
|
|
509
|
+
*
|
|
510
|
+
* @example
|
|
511
|
+
* ```typescript
|
|
512
|
+
* const sql = `WITH users AS (SELECT * FROM table) SELECT * FROM users`;
|
|
513
|
+
* const cteName = SelectQueryParser.getCursorCte(sql, 25);
|
|
514
|
+
* console.log(cteName); // "users"
|
|
515
|
+
* ```
|
|
516
|
+
*/
|
|
517
|
+
static getCursorCte(sql, cursorPosition) {
|
|
518
|
+
return CTERegionDetector_1.CTERegionDetector.getCursorCte(sql, cursorPosition);
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Get the CTE name at the specified 2D coordinates (line, column).
|
|
522
|
+
*
|
|
523
|
+
* This method provides a convenient interface for editor integrations
|
|
524
|
+
* that work with line/column coordinates instead of character positions.
|
|
525
|
+
*
|
|
526
|
+
* @deprecated Use CTERegionDetector.getCursorCteAt() instead for better API consistency
|
|
527
|
+
* @param sql - The SQL string to analyze
|
|
528
|
+
* @param line - The line number (1-based)
|
|
529
|
+
* @param column - The column number (1-based)
|
|
530
|
+
* @returns The CTE name if cursor is in a CTE, null otherwise
|
|
531
|
+
*
|
|
532
|
+
* @example
|
|
533
|
+
* ```typescript
|
|
534
|
+
* const sql = `WITH users AS (\n SELECT * FROM table\n) SELECT * FROM users`;
|
|
535
|
+
* const cteName = SelectQueryParser.getCursorCteAt(sql, 2, 5);
|
|
536
|
+
* console.log(cteName); // "users"
|
|
537
|
+
* ```
|
|
538
|
+
*/
|
|
539
|
+
static getCursorCteAt(sql, line, column) {
|
|
540
|
+
return CTERegionDetector_1.CTERegionDetector.getCursorCteAt(sql, line, column);
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Convert character position to line/column coordinates.
|
|
544
|
+
*
|
|
545
|
+
* @deprecated Use CTERegionDetector.positionToLineColumn() instead for better API consistency
|
|
546
|
+
* @param text - The text to analyze
|
|
547
|
+
* @param position - The character position (0-based)
|
|
548
|
+
* @returns Object with line and column (1-based), or null if invalid position
|
|
549
|
+
*/
|
|
550
|
+
static positionToLineColumn(text, position) {
|
|
551
|
+
return CTERegionDetector_1.CTERegionDetector.positionToLineColumn(text, position);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
exports.SelectQueryParser = SelectQueryParser;
|
|
555
|
+
SelectQueryParser.unionCommandSet = new Set([
|
|
556
|
+
"union",
|
|
557
|
+
"union all",
|
|
558
|
+
"intersect",
|
|
559
|
+
"intersect all",
|
|
560
|
+
"except",
|
|
561
|
+
"except all",
|
|
562
|
+
]);
|
|
563
|
+
SelectQueryParser.selectCommandSet = new Set(["with", "select"]);
|
|
564
|
+
//# sourceMappingURL=SelectQueryParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectQueryParser.js","sourceRoot":"","sources":["../../src/parsers/SelectQueryParser.ts"],"names":[],"mappings":"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"}
|