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,589 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CTEQueryDecomposer = void 0;
|
|
4
|
+
const SimpleSelectQuery_1 = require("../models/SimpleSelectQuery");
|
|
5
|
+
const CTEDependencyAnalyzer_1 = require("./CTEDependencyAnalyzer");
|
|
6
|
+
const CTECollector_1 = require("./CTECollector");
|
|
7
|
+
const SqlFormatter_1 = require("./SqlFormatter");
|
|
8
|
+
const CommentEditor_1 = require("../utils/CommentEditor");
|
|
9
|
+
const SelectQueryParser_1 = require("../parsers/SelectQueryParser");
|
|
10
|
+
const CTEComposer_1 = require("./CTEComposer");
|
|
11
|
+
/**
|
|
12
|
+
* Decomposes complex CTEs into executable standalone queries
|
|
13
|
+
*
|
|
14
|
+
* This class analyzes Common Table Expressions and generates executable standalone queries
|
|
15
|
+
* for each CTE, making complex CTE debugging easier. It supports:
|
|
16
|
+
* - Recursive CTE detection and handling
|
|
17
|
+
* - Dependency analysis (dependencies and dependents for each CTE)
|
|
18
|
+
* - CTE SQL Restoration: Generate executable SQL for a specific CTE with its dependencies
|
|
19
|
+
* - Configurable SQL formatter options (MySQL, PostgreSQL, custom styles)
|
|
20
|
+
* - Optional comment generation showing CTE metadata and relationships
|
|
21
|
+
* - Comprehensive error handling for circular dependencies
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const decomposer = new CTEQueryDecomposer({
|
|
26
|
+
* preset: 'postgres',
|
|
27
|
+
* addComments: true,
|
|
28
|
+
* keywordCase: 'upper'
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* const query = `
|
|
32
|
+
* with users_data as (select * from users),
|
|
33
|
+
* active_users as (select * from users_data where active = true)
|
|
34
|
+
* select * from active_users
|
|
35
|
+
* `;
|
|
36
|
+
*
|
|
37
|
+
* const decomposed = decomposer.decompose(SelectQueryParser.parse(query));
|
|
38
|
+
* // Returns array of DecomposedCTE objects with executable queries
|
|
39
|
+
*
|
|
40
|
+
* // Or restore a specific CTE for debugging:
|
|
41
|
+
* const restored = decomposer.extractCTE(SelectQueryParser.parse(query), 'active_users');
|
|
42
|
+
* console.log(restored.executableSql); // Standalone executable SQL with dependencies
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
class CTEQueryDecomposer {
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new CTEQueryDecomposer instance
|
|
50
|
+
* @param options - Configuration options extending SqlFormatterOptions
|
|
51
|
+
*/
|
|
52
|
+
constructor(options = {}) {
|
|
53
|
+
this.options = options;
|
|
54
|
+
this.dependencyAnalyzer = new CTEDependencyAnalyzer_1.CTEDependencyAnalyzer();
|
|
55
|
+
this.cteCollector = new CTECollector_1.CTECollector();
|
|
56
|
+
this.formatter = new SqlFormatter_1.SqlFormatter(options);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Decomposes CTEs in a query into executable standalone queries
|
|
60
|
+
*
|
|
61
|
+
* This method analyzes the query structure to:
|
|
62
|
+
* 1. Collect all CTEs and analyze their dependencies
|
|
63
|
+
* 2. Detect recursive CTEs and handle them separately
|
|
64
|
+
* 3. Generate executable queries for each CTE including required dependencies
|
|
65
|
+
* 4. Add optional comments with metadata (if addComments option is enabled)
|
|
66
|
+
* 5. Format output according to specified formatter options
|
|
67
|
+
*
|
|
68
|
+
* @param query - The SimpleSelectQuery containing CTEs to decompose
|
|
69
|
+
* @returns Array of decomposed CTEs with executable queries, dependencies, and metadata
|
|
70
|
+
* @throws Error if circular dependencies are detected in non-recursive CTEs
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const query = SelectQueryParser.parse(`
|
|
75
|
+
* with base as (select * from users),
|
|
76
|
+
* filtered as (select * from base where active = true)
|
|
77
|
+
* select * from filtered
|
|
78
|
+
* `);
|
|
79
|
+
*
|
|
80
|
+
* const result = decomposer.decompose(query);
|
|
81
|
+
* // Returns:
|
|
82
|
+
* // [
|
|
83
|
+
* // { name: 'base', query: 'select * from users', dependencies: [], ... },
|
|
84
|
+
* // { name: 'filtered', query: 'with base as (...) select * from base where active = true', dependencies: ['base'], ... }
|
|
85
|
+
* // ]
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
decompose(query) {
|
|
89
|
+
const ctes = this.cteCollector.collect(query);
|
|
90
|
+
if (ctes.length === 0) {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
const recursiveCTEs = this.findRecursiveCTEs(query, ctes);
|
|
94
|
+
const dependencyGraph = this.dependencyAnalyzer.analyzeDependencies(query);
|
|
95
|
+
this.validateCircularDependencies(recursiveCTEs.length > 0);
|
|
96
|
+
return this.processCTENodes(query, dependencyGraph.nodes, recursiveCTEs);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Synchronizes edited CTEs back into a unified query and re-decomposes them
|
|
100
|
+
*
|
|
101
|
+
* This method resolves inconsistencies between edited CTEs by:
|
|
102
|
+
* 1. Composing the edited CTEs into a unified query
|
|
103
|
+
* 2. Parsing the unified query to ensure consistency
|
|
104
|
+
* 3. Re-decomposing the synchronized query
|
|
105
|
+
*
|
|
106
|
+
* This is useful when CTEs have been edited independently and may have
|
|
107
|
+
* inconsistencies that need to be resolved through a unified composition.
|
|
108
|
+
*
|
|
109
|
+
* @param editedCTEs - Array of edited CTEs that may have inconsistencies
|
|
110
|
+
* @param rootQuery - The main query that uses the CTEs
|
|
111
|
+
* @returns Array of re-decomposed CTEs with resolved inconsistencies
|
|
112
|
+
* @throws Error if the composed query cannot be parsed or contains errors
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* // After editing CTEs independently, synchronize them
|
|
117
|
+
* const editedCTEs = [
|
|
118
|
+
* { name: 'users_data', query: 'select * from users where active = true' },
|
|
119
|
+
* { name: 'active_users', query: 'select * from users_data where id >= 1000' }
|
|
120
|
+
* ];
|
|
121
|
+
*
|
|
122
|
+
* const synchronized = decomposer.synchronize(editedCTEs, 'select count(*) from active_users');
|
|
123
|
+
* // Returns re-decomposed CTEs with resolved dependencies
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
synchronize(editedCTEs, rootQuery) {
|
|
127
|
+
if (editedCTEs.length === 0) {
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
// Flatten nested WITH clauses by extracting sub-CTEs from edited CTEs
|
|
131
|
+
const flattenedCTEs = this.flattenNestedWithClauses(editedCTEs);
|
|
132
|
+
// Use CTEComposer to create a unified query, sharing formatter options
|
|
133
|
+
const composerOptions = {
|
|
134
|
+
...this.options,
|
|
135
|
+
// Remove decomposer-specific options
|
|
136
|
+
addComments: undefined
|
|
137
|
+
};
|
|
138
|
+
const composer = new CTEComposer_1.CTEComposer(composerOptions);
|
|
139
|
+
const unifiedQuery = composer.compose(flattenedCTEs, rootQuery);
|
|
140
|
+
// Parse the unified query
|
|
141
|
+
const parsedQuery = SelectQueryParser_1.SelectQueryParser.parse(unifiedQuery);
|
|
142
|
+
// Re-decompose the synchronized query
|
|
143
|
+
return this.decompose(parsedQuery);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Restores executable SQL for a specific CTE by including all its dependencies
|
|
147
|
+
*
|
|
148
|
+
* This method provides a focused API for generating standalone, executable SQL
|
|
149
|
+
* for a specific Common Table Expression. It analyzes dependencies and includes
|
|
150
|
+
* all required CTEs in the correct execution order.
|
|
151
|
+
*
|
|
152
|
+
* Key features:
|
|
153
|
+
* - Automatic dependency resolution and ordering
|
|
154
|
+
* - Recursive CTE detection and handling
|
|
155
|
+
* - Error handling for circular dependencies
|
|
156
|
+
* - Optional dependency comments for debugging
|
|
157
|
+
*
|
|
158
|
+
* @param query - The query containing CTEs
|
|
159
|
+
* @param cteName - The name of the CTE to restore
|
|
160
|
+
* @returns CTERestorationResult with executable SQL and metadata
|
|
161
|
+
* @throws Error if CTE is not found or circular dependencies exist
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* const query = SelectQueryParser.parse(`
|
|
166
|
+
* with users_data as (select * from users),
|
|
167
|
+
* active_users as (select * from users_data where active = true),
|
|
168
|
+
* premium_users as (select * from active_users where premium = true)
|
|
169
|
+
* select * from premium_users
|
|
170
|
+
* `);
|
|
171
|
+
*
|
|
172
|
+
* // Get executable SQL for 'premium_users' CTE
|
|
173
|
+
* const result = decomposer.extractCTE(query, 'premium_users');
|
|
174
|
+
* // result.executableSql will contain:
|
|
175
|
+
* // with users_data as (select * from users),
|
|
176
|
+
* // active_users as (select * from users_data where active = true)
|
|
177
|
+
* // select * from active_users where premium = true
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
extractCTE(query, cteName) {
|
|
181
|
+
const warnings = [];
|
|
182
|
+
// Validate query contains CTEs
|
|
183
|
+
const allCTEs = this.cteCollector.collect(query);
|
|
184
|
+
if (allCTEs.length === 0) {
|
|
185
|
+
throw new Error("Query does not contain any CTEs");
|
|
186
|
+
}
|
|
187
|
+
// Find target CTE
|
|
188
|
+
const targetCTE = allCTEs.find(cte => this.getCTEName(cte) === cteName);
|
|
189
|
+
if (!targetCTE) {
|
|
190
|
+
throw new Error(`CTE not found in query: ${cteName}`);
|
|
191
|
+
}
|
|
192
|
+
// Check if this is a recursive CTE
|
|
193
|
+
const recursiveCTEs = this.findRecursiveCTEs(query, allCTEs);
|
|
194
|
+
const isRecursive = recursiveCTEs.includes(cteName);
|
|
195
|
+
if (isRecursive) {
|
|
196
|
+
warnings.push("Recursive CTE restoration requires the full query context");
|
|
197
|
+
// For recursive CTEs, return the entire query as dependencies are complex
|
|
198
|
+
return {
|
|
199
|
+
name: cteName,
|
|
200
|
+
executableSql: this.formatter.format(query).formattedSql,
|
|
201
|
+
dependencies: this.getAllCTENames(allCTEs).filter(name => name !== cteName),
|
|
202
|
+
warnings
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
// Analyze dependencies
|
|
206
|
+
const dependencyGraph = this.dependencyAnalyzer.analyzeDependencies(query);
|
|
207
|
+
// Check for circular dependencies
|
|
208
|
+
if (this.dependencyAnalyzer.hasCircularDependency()) {
|
|
209
|
+
throw new Error("Circular dependency detected in CTEs");
|
|
210
|
+
}
|
|
211
|
+
// Find target node in dependency graph
|
|
212
|
+
const targetNode = dependencyGraph.nodes.find(node => node.name === cteName);
|
|
213
|
+
if (!targetNode || !targetNode.cte) {
|
|
214
|
+
throw new Error(`CTE not found in dependency graph: ${cteName}`);
|
|
215
|
+
}
|
|
216
|
+
// Build executable query using existing private method
|
|
217
|
+
const executableSql = this.buildExecutableQuery(targetNode, dependencyGraph.nodes);
|
|
218
|
+
// Collect all required dependencies in correct order
|
|
219
|
+
const requiredCTEs = this.collectRequiredCTEs(targetNode, dependencyGraph.nodes);
|
|
220
|
+
const allDependencies = requiredCTEs.map(node => node.name);
|
|
221
|
+
// Add comments if requested
|
|
222
|
+
const finalSql = this.options.addComments
|
|
223
|
+
? this.addRestorationComments(executableSql, targetNode, warnings)
|
|
224
|
+
: executableSql;
|
|
225
|
+
return {
|
|
226
|
+
name: cteName,
|
|
227
|
+
executableSql: finalSql,
|
|
228
|
+
dependencies: allDependencies,
|
|
229
|
+
warnings
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Flattens nested WITH clauses by extracting sub-CTEs from edited CTEs
|
|
234
|
+
* @param editedCTEs Array of edited CTEs that may contain nested WITH clauses
|
|
235
|
+
* @returns Flattened array of CTEs with sub-CTEs extracted to top level
|
|
236
|
+
*/
|
|
237
|
+
flattenNestedWithClauses(editedCTEs) {
|
|
238
|
+
const flattened = [];
|
|
239
|
+
const extractedCTEs = new Map(); // name -> query mapping for extracted CTEs
|
|
240
|
+
for (const editedCTE of editedCTEs) {
|
|
241
|
+
try {
|
|
242
|
+
// Check if this CTE's query contains a WITH clause
|
|
243
|
+
const withPattern = /^\s*with\s+/i;
|
|
244
|
+
if (withPattern.test(editedCTE.query)) {
|
|
245
|
+
// Parse the query to extract nested CTEs
|
|
246
|
+
const parsed = SelectQueryParser_1.SelectQueryParser.parse(editedCTE.query);
|
|
247
|
+
if (parsed.withClause && parsed.withClause.tables) {
|
|
248
|
+
// Extract each nested CTE
|
|
249
|
+
for (const nestedCTE of parsed.withClause.tables) {
|
|
250
|
+
const cteName = this.getCTEName(nestedCTE);
|
|
251
|
+
if (!extractedCTEs.has(cteName)) {
|
|
252
|
+
// Format the nested CTE query
|
|
253
|
+
const cteFormatter = new SqlFormatter_1.SqlFormatter({
|
|
254
|
+
identifierEscape: { start: "", end: "" }
|
|
255
|
+
});
|
|
256
|
+
const nestedQuery = cteFormatter.format(nestedCTE.query).formattedSql;
|
|
257
|
+
extractedCTEs.set(cteName, nestedQuery);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Create the main query without the WITH clause
|
|
261
|
+
const mainQueryWithoutWith = new SimpleSelectQuery_1.SimpleSelectQuery({
|
|
262
|
+
selectClause: parsed.selectClause,
|
|
263
|
+
fromClause: parsed.fromClause,
|
|
264
|
+
whereClause: parsed.whereClause,
|
|
265
|
+
groupByClause: parsed.groupByClause,
|
|
266
|
+
havingClause: parsed.havingClause,
|
|
267
|
+
orderByClause: parsed.orderByClause,
|
|
268
|
+
windowClause: parsed.windowClause,
|
|
269
|
+
limitClause: parsed.limitClause,
|
|
270
|
+
offsetClause: parsed.offsetClause,
|
|
271
|
+
fetchClause: parsed.fetchClause,
|
|
272
|
+
forClause: parsed.forClause,
|
|
273
|
+
withClause: undefined // Remove WITH clause
|
|
274
|
+
});
|
|
275
|
+
const mainFormatter = new SqlFormatter_1.SqlFormatter({
|
|
276
|
+
identifierEscape: { start: "", end: "" }
|
|
277
|
+
});
|
|
278
|
+
const mainQuery = mainFormatter.format(mainQueryWithoutWith).formattedSql;
|
|
279
|
+
flattened.push({
|
|
280
|
+
name: editedCTE.name,
|
|
281
|
+
query: mainQuery
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
// WITH clause exists but no tables found, preserve as-is
|
|
286
|
+
flattened.push(editedCTE);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
// No WITH clause, preserve as-is
|
|
291
|
+
flattened.push(editedCTE);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
// If parsing fails, preserve the original CTE
|
|
296
|
+
flattened.push(editedCTE);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Add extracted CTEs at the beginning (they need to be defined first)
|
|
300
|
+
const result = [];
|
|
301
|
+
for (const [name, query] of extractedCTEs) {
|
|
302
|
+
result.push({ name, query });
|
|
303
|
+
}
|
|
304
|
+
result.push(...flattened);
|
|
305
|
+
return result;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Validates circular dependencies for non-recursive CTEs
|
|
309
|
+
* @param hasRecursiveCTEs Whether the query contains recursive CTEs
|
|
310
|
+
* @throws Error if circular dependencies exist in non-recursive CTEs
|
|
311
|
+
*/
|
|
312
|
+
validateCircularDependencies(hasRecursiveCTEs) {
|
|
313
|
+
if (this.dependencyAnalyzer.hasCircularDependency() && !hasRecursiveCTEs) {
|
|
314
|
+
throw new Error(CTEQueryDecomposer.ERROR_MESSAGES.CIRCULAR_REFERENCE);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Processes CTE nodes and generates decomposed CTEs
|
|
319
|
+
* @param query Original query
|
|
320
|
+
* @param nodes CTE dependency nodes
|
|
321
|
+
* @param recursiveCTEs List of recursive CTE names
|
|
322
|
+
* @returns Array of decomposed CTEs
|
|
323
|
+
*/
|
|
324
|
+
processCTENodes(query, nodes, recursiveCTEs) {
|
|
325
|
+
const result = [];
|
|
326
|
+
for (const node of nodes) {
|
|
327
|
+
// Skip ROOT nodes (main query) as they are not CTEs
|
|
328
|
+
if (node.type === 'ROOT') {
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
const isRecursive = recursiveCTEs.includes(node.name);
|
|
332
|
+
if (isRecursive) {
|
|
333
|
+
result.push(this.createRecursiveCTE(node, query));
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
result.push(this.createStandardCTE(node, nodes));
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return result;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Creates a decomposed CTE for recursive CTEs
|
|
343
|
+
*/
|
|
344
|
+
createRecursiveCTE(node, query) {
|
|
345
|
+
const formattedQuery = this.formatter.format(query).formattedSql;
|
|
346
|
+
// Filter out MAIN_QUERY from dependents for DecomposedCTE result
|
|
347
|
+
const cteDependents = node.dependents.filter(dep => dep !== 'MAIN_QUERY');
|
|
348
|
+
const finalQuery = this.addCommentsToQuery(formattedQuery, node.name, node.dependencies, node.dependents, true);
|
|
349
|
+
return {
|
|
350
|
+
name: node.name,
|
|
351
|
+
query: finalQuery,
|
|
352
|
+
dependencies: [...node.dependencies],
|
|
353
|
+
dependents: cteDependents,
|
|
354
|
+
isRecursive: true
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Creates a decomposed CTE for standard (non-recursive) CTEs
|
|
359
|
+
*/
|
|
360
|
+
createStandardCTE(node, allNodes) {
|
|
361
|
+
const query = this.buildExecutableQuery(node, allNodes);
|
|
362
|
+
const finalQuery = this.addCommentsToQuery(query, node.name, node.dependencies, node.dependents, false);
|
|
363
|
+
// Filter out MAIN_QUERY from dependents for DecomposedCTE result
|
|
364
|
+
const cteDependents = node.dependents.filter(dep => dep !== 'MAIN_QUERY');
|
|
365
|
+
return {
|
|
366
|
+
name: node.name,
|
|
367
|
+
query: finalQuery,
|
|
368
|
+
dependencies: [...node.dependencies],
|
|
369
|
+
dependents: cteDependents,
|
|
370
|
+
isRecursive: false
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Builds an executable query for a CTE by including its dependencies
|
|
375
|
+
*/
|
|
376
|
+
buildExecutableQuery(targetNode, allNodes) {
|
|
377
|
+
// ROOT nodes don't have a cte property
|
|
378
|
+
if (targetNode.type === 'ROOT' || !targetNode.cte) {
|
|
379
|
+
throw new Error(`Cannot build executable query for ROOT node: ${targetNode.name}`);
|
|
380
|
+
}
|
|
381
|
+
const requiredCTEs = this.collectRequiredCTEs(targetNode, allNodes);
|
|
382
|
+
if (requiredCTEs.length === 0) {
|
|
383
|
+
// No dependencies, just return the CTE's query
|
|
384
|
+
return this.formatter.format(targetNode.cte.query).formattedSql;
|
|
385
|
+
}
|
|
386
|
+
// Build WITH clause with required CTEs
|
|
387
|
+
const withClause = this.buildWithClause(requiredCTEs);
|
|
388
|
+
const mainQuery = this.formatter.format(targetNode.cte.query).formattedSql;
|
|
389
|
+
return `${withClause} ${mainQuery}`;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Collects all required CTEs for a target CTE in dependency order
|
|
393
|
+
*/
|
|
394
|
+
collectRequiredCTEs(targetNode, allNodes) {
|
|
395
|
+
const visited = new Set();
|
|
396
|
+
const result = [];
|
|
397
|
+
const nodeMap = new Map();
|
|
398
|
+
// Build node lookup map
|
|
399
|
+
for (const node of allNodes) {
|
|
400
|
+
nodeMap.set(node.name, node);
|
|
401
|
+
}
|
|
402
|
+
const collectDependencies = (nodeName) => {
|
|
403
|
+
if (visited.has(nodeName))
|
|
404
|
+
return;
|
|
405
|
+
visited.add(nodeName);
|
|
406
|
+
const node = nodeMap.get(nodeName);
|
|
407
|
+
if (!node)
|
|
408
|
+
return;
|
|
409
|
+
// First collect all dependencies
|
|
410
|
+
for (const depName of node.dependencies) {
|
|
411
|
+
collectDependencies(depName);
|
|
412
|
+
}
|
|
413
|
+
// Then add this node (ensuring dependencies come first)
|
|
414
|
+
// Skip ROOT nodes and the target node itself
|
|
415
|
+
if (nodeName !== targetNode.name && node.type !== 'ROOT') {
|
|
416
|
+
result.push(node);
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
// Collect dependencies for the target node
|
|
420
|
+
for (const depName of targetNode.dependencies) {
|
|
421
|
+
collectDependencies(depName);
|
|
422
|
+
}
|
|
423
|
+
return result;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Builds WITH clause from required CTEs
|
|
427
|
+
*/
|
|
428
|
+
buildWithClause(requiredCTEs) {
|
|
429
|
+
if (requiredCTEs.length === 0)
|
|
430
|
+
return "";
|
|
431
|
+
const cteDefinitions = requiredCTEs.map(node => {
|
|
432
|
+
// Skip ROOT nodes as they don't have CTE definitions
|
|
433
|
+
if (node.type === 'ROOT' || !node.cte) {
|
|
434
|
+
throw new Error(`Cannot include ROOT node in WITH clause: ${node.name}`);
|
|
435
|
+
}
|
|
436
|
+
const cteName = node.name;
|
|
437
|
+
const cteQuery = this.formatter.format(node.cte.query).formattedSql;
|
|
438
|
+
return `${cteName} as (${cteQuery})`;
|
|
439
|
+
});
|
|
440
|
+
return `with ${cteDefinitions.join(", ")}`;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Finds recursive CTEs in the query
|
|
444
|
+
* @param query The query to analyze
|
|
445
|
+
* @param ctes All CTEs in the query
|
|
446
|
+
* @returns Array of recursive CTE names
|
|
447
|
+
*/
|
|
448
|
+
findRecursiveCTEs(query, ctes) {
|
|
449
|
+
if (!query.withClause || !this.isRecursiveWithClause(query)) {
|
|
450
|
+
return [];
|
|
451
|
+
}
|
|
452
|
+
// For now, assume all CTEs in a RECURSIVE WITH are recursive
|
|
453
|
+
// This is a simplification - in reality, only some CTEs might be recursive
|
|
454
|
+
return ctes.map(cte => this.getCTEName(cte));
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Checks if a WITH clause is recursive
|
|
458
|
+
* @param query The query to check
|
|
459
|
+
* @returns true if the query contains WITH RECURSIVE
|
|
460
|
+
*/
|
|
461
|
+
isRecursiveWithClause(query) {
|
|
462
|
+
const queryText = this.formatter.format(query).formattedSql.toLowerCase();
|
|
463
|
+
return queryText.includes('with recursive');
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Adds comments to the query if addComments option is enabled
|
|
467
|
+
* @param query The query string to add comments to
|
|
468
|
+
* @param cteName The name of the CTE
|
|
469
|
+
* @param dependencies Array of dependency names
|
|
470
|
+
* @param dependents Array of dependent names
|
|
471
|
+
* @param isRecursive Whether this is a recursive CTE
|
|
472
|
+
* @returns Query with comments added if enabled, otherwise original query
|
|
473
|
+
*/
|
|
474
|
+
addCommentsToQuery(query, cteName, dependencies, dependents, isRecursive) {
|
|
475
|
+
if (this.options.addComments !== true) {
|
|
476
|
+
return query;
|
|
477
|
+
}
|
|
478
|
+
try {
|
|
479
|
+
// Parse the query to add comments to its AST
|
|
480
|
+
const parsedQuery = SelectQueryParser_1.SelectQueryParser.parse(query);
|
|
481
|
+
// Generate comment lines
|
|
482
|
+
const comments = this.generateComments(cteName, dependencies, dependents, isRecursive);
|
|
483
|
+
// Add comments to the root query (this should place them at the beginning)
|
|
484
|
+
comments.forEach(comment => {
|
|
485
|
+
CommentEditor_1.CommentEditor.addComment(parsedQuery, comment);
|
|
486
|
+
});
|
|
487
|
+
// Format with comment export enabled
|
|
488
|
+
const formatterWithComments = new SqlFormatter_1.SqlFormatter({
|
|
489
|
+
...this.options,
|
|
490
|
+
exportComment: true
|
|
491
|
+
});
|
|
492
|
+
return formatterWithComments.format(parsedQuery).formattedSql;
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
// If parsing fails, return original query with simple text comments
|
|
496
|
+
console.warn(`${CTEQueryDecomposer.ERROR_MESSAGES.PARSING_FAILED}: ${error}`);
|
|
497
|
+
return this.addTextCommentsToQuery(query, cteName, dependencies, dependents, isRecursive);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Generates comment lines for a CTE
|
|
502
|
+
* @param cteName The name of the CTE
|
|
503
|
+
* @param dependencies Array of dependency names
|
|
504
|
+
* @param dependents Array of dependent names
|
|
505
|
+
* @param isRecursive Whether this is a recursive CTE
|
|
506
|
+
* @returns Array of comment strings
|
|
507
|
+
*/
|
|
508
|
+
generateComments(cteName, dependencies, dependents, isRecursive) {
|
|
509
|
+
const { AUTO_GENERATED, ORIGINAL_CTE, DEPENDENCIES, DEPENDENTS, RECURSIVE_TYPE, NONE } = CTEQueryDecomposer.COMMENT_TEXTS;
|
|
510
|
+
const comments = [];
|
|
511
|
+
comments.push(AUTO_GENERATED);
|
|
512
|
+
comments.push(`${ORIGINAL_CTE} ${cteName}`);
|
|
513
|
+
if (isRecursive) {
|
|
514
|
+
comments.push(RECURSIVE_TYPE);
|
|
515
|
+
}
|
|
516
|
+
const depsText = dependencies.length > 0 ? dependencies.join(", ") : NONE;
|
|
517
|
+
comments.push(`${DEPENDENCIES} ${depsText}`);
|
|
518
|
+
// Filter out MAIN_QUERY from dependents for display purposes
|
|
519
|
+
const cteDependents = dependents.filter(dep => dep !== 'MAIN_QUERY');
|
|
520
|
+
const dependentsText = cteDependents.length > 0 ? cteDependents.join(", ") : NONE;
|
|
521
|
+
comments.push(`${DEPENDENTS} ${dependentsText}`);
|
|
522
|
+
return comments;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Adds text comments as SQL comments when AST parsing fails
|
|
526
|
+
* @param query Original query
|
|
527
|
+
* @param cteName The name of the CTE
|
|
528
|
+
* @param dependencies Array of dependency names
|
|
529
|
+
* @param dependents Array of dependent names
|
|
530
|
+
* @param isRecursive Whether this is a recursive CTE
|
|
531
|
+
* @returns Query with text comments prepended
|
|
532
|
+
*/
|
|
533
|
+
addTextCommentsToQuery(query, cteName, dependencies, dependents, isRecursive) {
|
|
534
|
+
const comments = this.generateComments(cteName, dependencies, dependents, isRecursive);
|
|
535
|
+
const commentLines = comments.map(comment => `-- ${comment}`).join('\n');
|
|
536
|
+
return `${commentLines}\n${query}`;
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Adds restoration comments to the executable SQL if enabled
|
|
540
|
+
* @param sql The executable SQL
|
|
541
|
+
* @param targetNode The target CTE node
|
|
542
|
+
* @param warnings Any warnings to include
|
|
543
|
+
* @returns SQL with comments added
|
|
544
|
+
*/
|
|
545
|
+
addRestorationComments(sql, targetNode, warnings) {
|
|
546
|
+
const comments = [];
|
|
547
|
+
comments.push("-- CTE Restoration: " + targetNode.name);
|
|
548
|
+
if (targetNode.dependencies.length > 0) {
|
|
549
|
+
comments.push("-- Dependencies: " + targetNode.dependencies.join(", "));
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
comments.push("-- Dependencies: none");
|
|
553
|
+
}
|
|
554
|
+
if (warnings.length > 0) {
|
|
555
|
+
comments.push("-- Warnings: " + warnings.join(", "));
|
|
556
|
+
}
|
|
557
|
+
comments.push("-- Generated by CTEQueryDecomposer.extractCTE()");
|
|
558
|
+
comments.push("");
|
|
559
|
+
return comments.join("\n") + sql;
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Gets all CTE names from an array of CTEs
|
|
563
|
+
* @param ctes Array of CommonTable objects
|
|
564
|
+
* @returns Array of CTE names
|
|
565
|
+
*/
|
|
566
|
+
getAllCTENames(ctes) {
|
|
567
|
+
return ctes.map(cte => this.getCTEName(cte));
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Extracts the name from a CommonTable
|
|
571
|
+
*/
|
|
572
|
+
getCTEName(cte) {
|
|
573
|
+
return cte.aliasExpression.table.name;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
exports.CTEQueryDecomposer = CTEQueryDecomposer;
|
|
577
|
+
CTEQueryDecomposer.ERROR_MESSAGES = {
|
|
578
|
+
CIRCULAR_REFERENCE: "Circular reference detected in non-recursive CTEs",
|
|
579
|
+
PARSING_FAILED: "Failed to parse query for comment injection"
|
|
580
|
+
};
|
|
581
|
+
CTEQueryDecomposer.COMMENT_TEXTS = {
|
|
582
|
+
AUTO_GENERATED: "Auto-generated by CTE decomposer",
|
|
583
|
+
ORIGINAL_CTE: "Original CTE:",
|
|
584
|
+
DEPENDENCIES: "Dependencies:",
|
|
585
|
+
DEPENDENTS: "Dependents:",
|
|
586
|
+
RECURSIVE_TYPE: "Type: Recursive CTE",
|
|
587
|
+
NONE: "none"
|
|
588
|
+
};
|
|
589
|
+
//# sourceMappingURL=CTEQueryDecomposer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CTEQueryDecomposer.js","sourceRoot":"","sources":["../../src/transformers/CTEQueryDecomposer.ts"],"names":[],"mappings":"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"}
|