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,359 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpdateResultSelectConverter = void 0;
|
|
4
|
+
const Clause_1 = require("../models/Clause");
|
|
5
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
|
6
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
|
7
|
+
const TableSourceCollector_1 = require("./TableSourceCollector");
|
|
8
|
+
const FixtureCteBuilder_1 = require("./FixtureCteBuilder");
|
|
9
|
+
const SelectQueryWithClauseHelper_1 = require("../utils/SelectQueryWithClauseHelper");
|
|
10
|
+
const ValueComponentRewriter_1 = require("../utils/ValueComponentRewriter");
|
|
11
|
+
const TableNameUtils_1 = require("../utils/TableNameUtils");
|
|
12
|
+
class UpdateResultSelectConverter {
|
|
13
|
+
/**
|
|
14
|
+
* Converts an UPDATE with RETURNING (or a bare UPDATE) into a SELECT that mirrors its output rows.
|
|
15
|
+
*/
|
|
16
|
+
static toSelectQuery(updateQuery, options) {
|
|
17
|
+
var _a, _b, _c, _d;
|
|
18
|
+
const targetTableName = this.extractTargetTableName(updateQuery.updateClause);
|
|
19
|
+
const tableDefinition = this.resolveTableDefinition(targetTableName, options);
|
|
20
|
+
const targetAlias = updateQuery.updateClause.getSourceAliasName();
|
|
21
|
+
const fromClause = this.buildFromClause(updateQuery.updateClause.source, updateQuery.fromClause);
|
|
22
|
+
const whereClause = (_a = updateQuery.whereClause) !== null && _a !== void 0 ? _a : null;
|
|
23
|
+
// Decide whether RETURNING or a row count should drive the SELECT clause.
|
|
24
|
+
const selectClause = updateQuery.returningClause
|
|
25
|
+
? this.buildReturningSelectClause(updateQuery.returningClause, updateQuery.setClause, targetAlias, tableDefinition)
|
|
26
|
+
: this.buildCountSelectClause();
|
|
27
|
+
// Assemble the skeleton SELECT that mirrors the UPDATE's source and predicates.
|
|
28
|
+
const selectQuery = new SelectQuery_1.SimpleSelectQuery({
|
|
29
|
+
withClause: (_b = updateQuery.withClause) !== null && _b !== void 0 ? _b : undefined,
|
|
30
|
+
selectClause,
|
|
31
|
+
fromClause,
|
|
32
|
+
whereClause
|
|
33
|
+
});
|
|
34
|
+
// Prepare fixture descriptors for the tables that will be touched by the SELECT.
|
|
35
|
+
const fixtureTables = (_c = options === null || options === void 0 ? void 0 : options.fixtureTables) !== null && _c !== void 0 ? _c : [];
|
|
36
|
+
const fixtureMap = this.buildFixtureTableMap(fixtureTables);
|
|
37
|
+
const missingStrategy = (_d = options === null || options === void 0 ? void 0 : options.missingFixtureStrategy) !== null && _d !== void 0 ? _d : this.DEFAULT_MISSING_FIXTURE_STRATEGY;
|
|
38
|
+
const originalWithClause = SelectQueryWithClauseHelper_1.SelectQueryWithClauseHelper.detachWithClause(selectQuery);
|
|
39
|
+
const referencedTables = this.collectPhysicalTableReferences(selectQuery, originalWithClause);
|
|
40
|
+
const cteNames = this.collectCteNamesFromWithClause(originalWithClause);
|
|
41
|
+
const targetVariants = (0, TableNameUtils_1.tableNameVariants)(targetTableName);
|
|
42
|
+
for (const variant of targetVariants) {
|
|
43
|
+
if (!cteNames.has(variant)) {
|
|
44
|
+
referencedTables.add(variant);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Ensure each referenced table is covered by a fixture (or allowed to skip it).
|
|
48
|
+
this.ensureFixtureCoverage(referencedTables, fixtureMap, missingStrategy);
|
|
49
|
+
const filteredFixtures = this.filterFixtureTablesForReferences(fixtureTables, referencedTables);
|
|
50
|
+
// Turn the fixture definitions into CommonTable entries before reinjecting the WITH clause.
|
|
51
|
+
const fixtureCtes = this.buildFixtureCtes(filteredFixtures);
|
|
52
|
+
const recombinedWithClause = this.mergeWithClause(originalWithClause, fixtureCtes);
|
|
53
|
+
// Reattach the combined WITH clause so fixture CTEs precede any existing definitions.
|
|
54
|
+
SelectQueryWithClauseHelper_1.SelectQueryWithClauseHelper.setWithClause(selectQuery, recombinedWithClause);
|
|
55
|
+
return selectQuery;
|
|
56
|
+
}
|
|
57
|
+
static buildReturningSelectClause(returning, setClause, targetAlias, tableDefinition) {
|
|
58
|
+
const setExpressionMap = this.mapSetExpressions(setClause);
|
|
59
|
+
const selectItems = this.buildReturningSelectItems(returning, setExpressionMap, targetAlias, tableDefinition);
|
|
60
|
+
return new Clause_1.SelectClause(selectItems);
|
|
61
|
+
}
|
|
62
|
+
static buildReturningSelectItems(returning, setExpressions, targetAlias, tableDefinition) {
|
|
63
|
+
// Convert each RETURNING item into a select entry, expanding wildcards up front.
|
|
64
|
+
const selectItems = [];
|
|
65
|
+
for (const item of returning.items) {
|
|
66
|
+
if (this.isWildcardReturningItem(item)) {
|
|
67
|
+
selectItems.push(...this.expandReturningWildcard(tableDefinition, setExpressions, targetAlias));
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
selectItems.push(this.buildUpdateReturningSelectItem(item, setExpressions, targetAlias, tableDefinition));
|
|
71
|
+
}
|
|
72
|
+
return selectItems;
|
|
73
|
+
}
|
|
74
|
+
static isWildcardReturningItem(item) {
|
|
75
|
+
return (item.value instanceof ValueComponent_1.ColumnReference &&
|
|
76
|
+
item.value.column.name === '*');
|
|
77
|
+
}
|
|
78
|
+
static expandReturningWildcard(tableDefinition, setExpressions, targetAlias) {
|
|
79
|
+
// Use metadata to expand RETURNING * so each column can honor SET overrides.
|
|
80
|
+
if (!tableDefinition) {
|
|
81
|
+
throw new Error('Cannot expand RETURNING * without table definition.');
|
|
82
|
+
}
|
|
83
|
+
return tableDefinition.columns.map((column) => {
|
|
84
|
+
const expression = this.buildUpdateColumnExpression(column.name, setExpressions, targetAlias, tableDefinition);
|
|
85
|
+
return new Clause_1.SelectItem(expression, column.name);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
static buildUpdateReturningSelectItem(item, setExpressions, targetAlias, tableDefinition) {
|
|
89
|
+
// Rewrite the item expression so column references honor SET overrides.
|
|
90
|
+
const expression = (0, ValueComponentRewriter_1.rewriteValueComponentWithColumnResolver)(item.value, (column) => this.buildUpdateColumnExpression(column, setExpressions, targetAlias, tableDefinition));
|
|
91
|
+
const alias = this.getReturningAlias(item);
|
|
92
|
+
return new Clause_1.SelectItem(expression, alias);
|
|
93
|
+
}
|
|
94
|
+
static buildUpdateColumnExpression(columnOrName, setExpressions, targetAlias, tableDefinition) {
|
|
95
|
+
const columnName = typeof columnOrName === 'string'
|
|
96
|
+
? columnOrName
|
|
97
|
+
: this.getColumnReferenceName(columnOrName);
|
|
98
|
+
const normalized = this.normalizeIdentifier(columnName);
|
|
99
|
+
const overrideExpression = setExpressions.get(normalized);
|
|
100
|
+
// Prefer the SET expression when the column is updated, otherwise preserve the target reference.
|
|
101
|
+
if (overrideExpression) {
|
|
102
|
+
return overrideExpression;
|
|
103
|
+
}
|
|
104
|
+
this.ensureColumnExists(columnName, tableDefinition);
|
|
105
|
+
return new ValueComponent_1.ColumnReference(targetAlias, columnName);
|
|
106
|
+
}
|
|
107
|
+
static getColumnReferenceName(column) {
|
|
108
|
+
const nameComponent = column.qualifiedName.name;
|
|
109
|
+
if (nameComponent instanceof ValueComponent_1.IdentifierString) {
|
|
110
|
+
return nameComponent.name;
|
|
111
|
+
}
|
|
112
|
+
return nameComponent.value;
|
|
113
|
+
}
|
|
114
|
+
static getReturningAlias(item) {
|
|
115
|
+
var _a;
|
|
116
|
+
if ((_a = item.identifier) === null || _a === void 0 ? void 0 : _a.name) {
|
|
117
|
+
return item.identifier.name;
|
|
118
|
+
}
|
|
119
|
+
if (item.value instanceof ValueComponent_1.ColumnReference) {
|
|
120
|
+
return item.value.toString();
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
static buildCountSelectClause() {
|
|
125
|
+
// Count rows when the UPDATE does not expose RETURNING output.
|
|
126
|
+
const countFunction = new ValueComponent_1.FunctionCall(null, 'count', new ValueComponent_1.RawString('*'), null);
|
|
127
|
+
const selectItem = new Clause_1.SelectItem(countFunction, 'count');
|
|
128
|
+
return new Clause_1.SelectClause([selectItem]);
|
|
129
|
+
}
|
|
130
|
+
static buildFromClause(targetSource, fromClause) {
|
|
131
|
+
if (!fromClause) {
|
|
132
|
+
return new Clause_1.FromClause(targetSource, null);
|
|
133
|
+
}
|
|
134
|
+
const joins = [];
|
|
135
|
+
// Cross join any explicit FROM sources so their columns remain accessible.
|
|
136
|
+
joins.push(new Clause_1.JoinClause('cross join', fromClause.source, null, false));
|
|
137
|
+
if (fromClause.joins) {
|
|
138
|
+
joins.push(...fromClause.joins);
|
|
139
|
+
}
|
|
140
|
+
return new Clause_1.FromClause(targetSource, joins);
|
|
141
|
+
}
|
|
142
|
+
static mapSetExpressions(setClause) {
|
|
143
|
+
// Normalize each column name so lookups are case-insensitive.
|
|
144
|
+
const expressionMap = new Map();
|
|
145
|
+
for (const item of setClause.items) {
|
|
146
|
+
const columnName = this.extractColumnName(item);
|
|
147
|
+
expressionMap.set(this.normalizeIdentifier(columnName), item.value);
|
|
148
|
+
}
|
|
149
|
+
return expressionMap;
|
|
150
|
+
}
|
|
151
|
+
static ensureColumnExists(columnName, tableDefinition) {
|
|
152
|
+
// Guard against referencing columns that do not exist when metadata is available.
|
|
153
|
+
if (!tableDefinition) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const normalized = this.normalizeIdentifier(columnName);
|
|
157
|
+
const exists = tableDefinition.columns.some((column) => this.normalizeIdentifier(column.name) === normalized);
|
|
158
|
+
if (!exists) {
|
|
159
|
+
throw new Error(`Column '${columnName}' cannot be resolved for RETURNING output.`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
static resolveTableDefinition(tableName, options) {
|
|
163
|
+
// Prefer resolver callback results before falling back to the static registry.
|
|
164
|
+
if (options === null || options === void 0 ? void 0 : options.tableDefinitionResolver) {
|
|
165
|
+
const resolved = options.tableDefinitionResolver(tableName);
|
|
166
|
+
if (resolved !== undefined) {
|
|
167
|
+
return resolved;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const normalizedVariants = new Set((0, TableNameUtils_1.tableNameVariants)(tableName));
|
|
171
|
+
if (options === null || options === void 0 ? void 0 : options.tableDefinitions) {
|
|
172
|
+
const map = this.buildTableDefinitionMap(options.tableDefinitions);
|
|
173
|
+
for (const variant of normalizedVariants) {
|
|
174
|
+
const definition = map.get(variant);
|
|
175
|
+
if (definition) {
|
|
176
|
+
return definition;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (options === null || options === void 0 ? void 0 : options.fixtureTables) {
|
|
181
|
+
const fixture = options.fixtureTables.find((f) => (0, TableNameUtils_1.tableNameVariants)(f.tableName).some((variant) => normalizedVariants.has(variant)));
|
|
182
|
+
if (fixture) {
|
|
183
|
+
return this.convertFixtureToTableDefinition(fixture);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
static convertFixtureToTableDefinition(fixture) {
|
|
189
|
+
return {
|
|
190
|
+
name: fixture.tableName,
|
|
191
|
+
columns: fixture.columns.map(col => {
|
|
192
|
+
var _a;
|
|
193
|
+
return ({
|
|
194
|
+
name: col.name,
|
|
195
|
+
typeName: col.typeName,
|
|
196
|
+
required: false,
|
|
197
|
+
defaultValue: (_a = col.defaultValue) !== null && _a !== void 0 ? _a : null
|
|
198
|
+
});
|
|
199
|
+
})
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
static buildTableDefinitionMap(registry) {
|
|
203
|
+
// Normalize registry keys so lookups ignore casing.
|
|
204
|
+
const map = new Map();
|
|
205
|
+
for (const definition of Object.values(registry)) {
|
|
206
|
+
for (const variant of (0, TableNameUtils_1.tableNameVariants)(definition.name)) {
|
|
207
|
+
map.set(variant, definition);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return map;
|
|
211
|
+
}
|
|
212
|
+
static extractTargetTableName(updateClause) {
|
|
213
|
+
const datasource = updateClause.source.datasource;
|
|
214
|
+
if (datasource instanceof Clause_1.TableSource) {
|
|
215
|
+
return datasource.getSourceName();
|
|
216
|
+
}
|
|
217
|
+
throw new Error('Update target must be a table source for conversion.');
|
|
218
|
+
}
|
|
219
|
+
static extractColumnName(item) {
|
|
220
|
+
const columnComponent = item.qualifiedName.name;
|
|
221
|
+
if (columnComponent instanceof ValueComponent_1.RawString) {
|
|
222
|
+
return columnComponent.value;
|
|
223
|
+
}
|
|
224
|
+
return columnComponent.name;
|
|
225
|
+
}
|
|
226
|
+
static buildFixtureCtes(fixtures) {
|
|
227
|
+
if (!fixtures || fixtures.length === 0) {
|
|
228
|
+
return [];
|
|
229
|
+
}
|
|
230
|
+
return FixtureCteBuilder_1.FixtureCteBuilder.buildFixtures(fixtures);
|
|
231
|
+
}
|
|
232
|
+
static collectPhysicalTableReferences(selectQuery, withClause) {
|
|
233
|
+
const referencedTables = this.collectReferencedTables(selectQuery);
|
|
234
|
+
const ignoredTables = this.collectCteNamesFromWithClause(withClause);
|
|
235
|
+
const tablesToShadow = new Set();
|
|
236
|
+
// Record only concrete tables that are not already defined via CTE aliases.
|
|
237
|
+
for (const table of referencedTables) {
|
|
238
|
+
if (ignoredTables.has(table)) {
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
tablesToShadow.add(table);
|
|
242
|
+
}
|
|
243
|
+
const cteReferencedTables = this.collectReferencedTablesFromWithClause(withClause);
|
|
244
|
+
for (const table of cteReferencedTables) {
|
|
245
|
+
if (ignoredTables.has(table)) {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
tablesToShadow.add(table);
|
|
249
|
+
}
|
|
250
|
+
return tablesToShadow;
|
|
251
|
+
}
|
|
252
|
+
static filterFixtureTablesForReferences(fixtures, referencedTables) {
|
|
253
|
+
if (!fixtures.length || referencedTables.size === 0) {
|
|
254
|
+
return [];
|
|
255
|
+
}
|
|
256
|
+
const filtered = [];
|
|
257
|
+
for (const fixture of fixtures) {
|
|
258
|
+
const fixtureVariants = (0, TableNameUtils_1.tableNameVariants)(fixture.tableName);
|
|
259
|
+
if (fixtureVariants.some((variant) => referencedTables.has(variant))) {
|
|
260
|
+
filtered.push(fixture);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return filtered;
|
|
264
|
+
}
|
|
265
|
+
static collectReferencedTablesFromWithClause(withClause) {
|
|
266
|
+
const tables = new Set();
|
|
267
|
+
if (!(withClause === null || withClause === void 0 ? void 0 : withClause.tables)) {
|
|
268
|
+
return tables;
|
|
269
|
+
}
|
|
270
|
+
for (const cte of withClause.tables) {
|
|
271
|
+
for (const table of this.collectReferencedTables(cte.query)) {
|
|
272
|
+
tables.add(table);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return tables;
|
|
276
|
+
}
|
|
277
|
+
static buildFixtureTableMap(fixtures) {
|
|
278
|
+
// Normalize fixture table names to keep comparisons consistent.
|
|
279
|
+
const map = new Map();
|
|
280
|
+
for (const fixture of fixtures) {
|
|
281
|
+
for (const variant of (0, TableNameUtils_1.tableNameVariants)(fixture.tableName)) {
|
|
282
|
+
map.set(variant, fixture);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return map;
|
|
286
|
+
}
|
|
287
|
+
static ensureFixtureCoverage(referencedTables, fixtureMap, strategy) {
|
|
288
|
+
if (referencedTables.size === 0) {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
const missingTables = this.getMissingFixtureTables(referencedTables, fixtureMap);
|
|
292
|
+
if (missingTables.length === 0) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (strategy === 'error') {
|
|
296
|
+
throw new Error(`Update SELECT refers to tables without fixture coverage: ${missingTables.join(', ')}.`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
static collectReferencedTables(query) {
|
|
300
|
+
// Use the collector to track every TableSource referenced by the SELECT.
|
|
301
|
+
const collector = new TableSourceCollector_1.TableSourceCollector(false);
|
|
302
|
+
const sources = collector.collect(query);
|
|
303
|
+
const normalized = new Set();
|
|
304
|
+
for (const source of sources) {
|
|
305
|
+
for (const variant of (0, TableNameUtils_1.tableNameVariants)(source.getSourceName())) {
|
|
306
|
+
normalized.add(variant);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return normalized;
|
|
310
|
+
}
|
|
311
|
+
static collectCteNamesFromWithClause(withClause) {
|
|
312
|
+
// Determine which table names come from CTE aliases so they can be ignored.
|
|
313
|
+
const names = new Set();
|
|
314
|
+
if (!(withClause === null || withClause === void 0 ? void 0 : withClause.tables)) {
|
|
315
|
+
return names;
|
|
316
|
+
}
|
|
317
|
+
for (const table of withClause.tables) {
|
|
318
|
+
for (const variant of (0, TableNameUtils_1.tableNameVariants)(table.getSourceAliasName())) {
|
|
319
|
+
names.add(variant);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return names;
|
|
323
|
+
}
|
|
324
|
+
static getMissingFixtureTables(referencedTables, fixtureMap) {
|
|
325
|
+
// Return every referenced table that lacks an overriding fixture definition.
|
|
326
|
+
const missing = [];
|
|
327
|
+
for (const table of referencedTables) {
|
|
328
|
+
const covered = (0, TableNameUtils_1.tableNameVariants)(table).some((variant) => fixtureMap.has(variant));
|
|
329
|
+
if (!covered) {
|
|
330
|
+
missing.push(table);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return missing;
|
|
334
|
+
}
|
|
335
|
+
static mergeWithClause(original, fixtureCtes) {
|
|
336
|
+
var _a;
|
|
337
|
+
// Combine fixture CTEs ahead of any original definitions so they shadow physical tables.
|
|
338
|
+
if (!fixtureCtes.length && !original) {
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
const combinedTables = [...fixtureCtes];
|
|
342
|
+
if (original === null || original === void 0 ? void 0 : original.tables) {
|
|
343
|
+
combinedTables.push(...original.tables);
|
|
344
|
+
}
|
|
345
|
+
if (!combinedTables.length) {
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
const merged = new Clause_1.WithClause((_a = original === null || original === void 0 ? void 0 : original.recursive) !== null && _a !== void 0 ? _a : false, combinedTables);
|
|
349
|
+
merged.globalComments = (original === null || original === void 0 ? void 0 : original.globalComments) ? [...original.globalComments] : null;
|
|
350
|
+
merged.trailingComments = (original === null || original === void 0 ? void 0 : original.trailingComments) ? [...original.trailingComments] : null;
|
|
351
|
+
return merged;
|
|
352
|
+
}
|
|
353
|
+
static normalizeIdentifier(value) {
|
|
354
|
+
return value.trim().toLowerCase();
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
exports.UpdateResultSelectConverter = UpdateResultSelectConverter;
|
|
358
|
+
UpdateResultSelectConverter.DEFAULT_MISSING_FIXTURE_STRATEGY = 'error';
|
|
359
|
+
//# sourceMappingURL=UpdateResultSelectConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdateResultSelectConverter.js","sourceRoot":"","sources":["../../src/transformers/UpdateResultSelectConverter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpstreamSelectQueryFinder = void 0;
|
|
4
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
|
5
|
+
const Clause_1 = require("../models/Clause");
|
|
6
|
+
const SelectableColumnCollector_1 = require("./SelectableColumnCollector");
|
|
7
|
+
const CTECollector_1 = require("./CTECollector");
|
|
8
|
+
/**
|
|
9
|
+
* UpstreamSelectQueryFinder searches upstream queries for the specified columns.
|
|
10
|
+
* If a query (including its upstream CTEs or subqueries) contains all columns,
|
|
11
|
+
* it returns the highest such SelectQuery. Otherwise, it searches downstream.
|
|
12
|
+
*
|
|
13
|
+
* For BinarySelectQuery (UNION/INTERSECT/EXCEPT), this finder processes each branch
|
|
14
|
+
* independently, as SelectableColumnCollector is designed for SimpleSelectQuery only.
|
|
15
|
+
* This approach ensures accurate column detection within individual SELECT branches
|
|
16
|
+
* while maintaining compatibility with compound query structures.
|
|
17
|
+
*/
|
|
18
|
+
class UpstreamSelectQueryFinder {
|
|
19
|
+
constructor(tableColumnResolver, options) {
|
|
20
|
+
this.options = options || {};
|
|
21
|
+
this.tableColumnResolver = tableColumnResolver;
|
|
22
|
+
// Pass the tableColumnResolver instead of options to fix type mismatch.
|
|
23
|
+
this.columnCollector = new SelectableColumnCollector_1.SelectableColumnCollector(this.tableColumnResolver, false, // includeWildCard
|
|
24
|
+
SelectableColumnCollector_1.DuplicateDetectionMode.FullName, // Use FullName to preserve JOIN table columns
|
|
25
|
+
{ upstream: true } // Enable upstream collection for qualified name resolution
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Finds the highest SelectQuery containing all specified columns.
|
|
30
|
+
* @param query The root SelectQuery to search.
|
|
31
|
+
* @param columnNames A column name or array of column names to check for.
|
|
32
|
+
* @returns An array of SelectQuery objects, or an empty array if not found.
|
|
33
|
+
*/
|
|
34
|
+
find(query, columnNames) {
|
|
35
|
+
// Normalize columnNames to array
|
|
36
|
+
const namesArray = typeof columnNames === 'string' ? [columnNames] : columnNames;
|
|
37
|
+
// Use CTECollector to collect CTEs from the root query only once and reuse
|
|
38
|
+
const cteCollector = new CTECollector_1.CTECollector();
|
|
39
|
+
const ctes = cteCollector.collect(query);
|
|
40
|
+
const cteMap = new Map();
|
|
41
|
+
for (const cte of ctes) {
|
|
42
|
+
cteMap.set(cte.getSourceAliasName(), cte);
|
|
43
|
+
}
|
|
44
|
+
return this.findUpstream(query, namesArray, cteMap);
|
|
45
|
+
}
|
|
46
|
+
handleTableSource(src, columnNames, cteMap) {
|
|
47
|
+
// Handles the logic for TableSource in findUpstream
|
|
48
|
+
const cte = cteMap.get(src.table.name);
|
|
49
|
+
if (cte) {
|
|
50
|
+
// Remove the current CTE name from the map to prevent infinite recursion
|
|
51
|
+
const nextCteMap = new Map(cteMap);
|
|
52
|
+
nextCteMap.delete(src.table.name);
|
|
53
|
+
const result = this.findUpstream(cte.query, columnNames, nextCteMap);
|
|
54
|
+
if (result.length === 0) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
handleSubQuerySource(src, columnNames, cteMap) {
|
|
62
|
+
// Handles the logic for SubQuerySource in findUpstream
|
|
63
|
+
const result = this.findUpstream(src.query, columnNames, cteMap);
|
|
64
|
+
if (result.length === 0) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Processes all source branches in a FROM clause and checks if all upstream queries contain the specified columns.
|
|
71
|
+
* Returns a flat array of SelectQuery if all branches are valid, otherwise null.
|
|
72
|
+
*/
|
|
73
|
+
processFromClauseBranches(fromClause, columnNames, cteMap) {
|
|
74
|
+
const sources = fromClause.getSources();
|
|
75
|
+
if (sources.length === 0)
|
|
76
|
+
return null;
|
|
77
|
+
let allBranchResults = [];
|
|
78
|
+
let allBranchesOk = true;
|
|
79
|
+
let validBranchCount = 0; // Count only filterable branches
|
|
80
|
+
for (const sourceExpr of sources) {
|
|
81
|
+
const src = sourceExpr.datasource;
|
|
82
|
+
let branchResult = null;
|
|
83
|
+
if (src instanceof Clause_1.TableSource) {
|
|
84
|
+
branchResult = this.handleTableSource(src, columnNames, cteMap);
|
|
85
|
+
validBranchCount++;
|
|
86
|
+
}
|
|
87
|
+
else if (src instanceof Clause_1.SubQuerySource) {
|
|
88
|
+
branchResult = this.handleSubQuerySource(src, columnNames, cteMap);
|
|
89
|
+
validBranchCount++;
|
|
90
|
+
}
|
|
91
|
+
else if (src instanceof SelectQuery_1.ValuesQuery) {
|
|
92
|
+
// Skip ValuesQuery: not filterable, do not count as a valid branch
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
allBranchesOk = false;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
// If the branch result is null,
|
|
100
|
+
// it means it didn't find the required columns in this branch
|
|
101
|
+
if (branchResult === null) {
|
|
102
|
+
allBranchesOk = false;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
allBranchResults.push(branchResult);
|
|
106
|
+
}
|
|
107
|
+
// Check if all valid (filterable) branches are valid and contain the required columns
|
|
108
|
+
if (allBranchesOk && allBranchResults.length === validBranchCount) {
|
|
109
|
+
return allBranchResults.flat();
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
findUpstream(query, columnNames, cteMap) {
|
|
114
|
+
if (query instanceof SelectQuery_1.SimpleSelectQuery) {
|
|
115
|
+
// First, try to find upstream queries from FROM clause
|
|
116
|
+
const fromClause = query.fromClause;
|
|
117
|
+
if (fromClause) {
|
|
118
|
+
const branchResult = this.processFromClauseBranches(fromClause, columnNames, cteMap);
|
|
119
|
+
if (branchResult && branchResult.length > 0) {
|
|
120
|
+
return branchResult;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// If no upstream queries found, check if current query contains all columns
|
|
124
|
+
const columns = this.columnCollector.collect(query).map(col => col.name);
|
|
125
|
+
// Collect columns defined in CTEs as well
|
|
126
|
+
const cteColumns = this.collectCTEColumns(query, cteMap);
|
|
127
|
+
const allColumns = [...columns, ...cteColumns];
|
|
128
|
+
const normalize = (s) => this.options.ignoreCaseAndUnderscore ? s.toLowerCase().replace(/_/g, '') : s;
|
|
129
|
+
// Normalize both the columns and the required names for comparison.
|
|
130
|
+
const hasAll = columnNames.every(name => allColumns.some(col => normalize(col) === normalize(name)));
|
|
131
|
+
if (hasAll) {
|
|
132
|
+
return [query];
|
|
133
|
+
}
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
else if (query instanceof SelectQuery_1.BinarySelectQuery) {
|
|
137
|
+
// Process BinarySelectQuery by decomposing into individual branches.
|
|
138
|
+
// SelectableColumnCollector is designed for SimpleSelectQuery only,
|
|
139
|
+
// so we handle UNION/INTERSECT/EXCEPT by processing left and right branches separately.
|
|
140
|
+
const left = this.findUpstream(query.left, columnNames, cteMap);
|
|
141
|
+
const right = this.findUpstream(query.right, columnNames, cteMap);
|
|
142
|
+
return [...left, ...right];
|
|
143
|
+
}
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Collects columns defined in CTEs
|
|
148
|
+
*/
|
|
149
|
+
collectCTEColumns(query, cteMap) {
|
|
150
|
+
const cteColumns = [];
|
|
151
|
+
// If WITH clause exists, collect columns defined in CTEs
|
|
152
|
+
if (query.withClause) {
|
|
153
|
+
for (const cte of query.withClause.tables) {
|
|
154
|
+
// Collect columns from CTE query
|
|
155
|
+
const columns = this.collectColumnsFromSelectQuery(cte.query);
|
|
156
|
+
cteColumns.push(...columns);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return cteColumns;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Recursively collects columns from SelectQuery
|
|
163
|
+
*/
|
|
164
|
+
collectColumnsFromSelectQuery(query) {
|
|
165
|
+
if (query instanceof SelectQuery_1.SimpleSelectQuery) {
|
|
166
|
+
try {
|
|
167
|
+
return this.columnCollector.collect(query).map(col => col.name);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
// Return empty array if SelectableColumnCollector fails
|
|
171
|
+
console.warn('Failed to collect columns from SimpleSelectQuery:', error);
|
|
172
|
+
return [];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else if (query instanceof SelectQuery_1.BinarySelectQuery) {
|
|
176
|
+
// For BinarySelectQuery (UNION etc.), get column names from the left query
|
|
177
|
+
// In UNION statements, left and right must have matching column count/types, so left side is sufficient
|
|
178
|
+
return this.collectColumnsFromSelectQuery(query.left);
|
|
179
|
+
}
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.UpstreamSelectQueryFinder = UpstreamSelectQueryFinder;
|
|
184
|
+
//# sourceMappingURL=UpstreamSelectQueryFinder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpstreamSelectQueryFinder.js","sourceRoot":"","sources":["../../src/transformers/UpstreamSelectQueryFinder.ts"],"names":[],"mappings":"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"}
|