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,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DDLToFixtureConverter = void 0;
|
|
4
|
+
const MultiQuerySplitter_1 = require("../utils/MultiQuerySplitter");
|
|
5
|
+
const SqlParser_1 = require("../parsers/SqlParser");
|
|
6
|
+
const CreateTableQuery_1 = require("../models/CreateTableQuery");
|
|
7
|
+
const InsertQuery_1 = require("../models/InsertQuery");
|
|
8
|
+
const ValuesQuery_1 = require("../models/ValuesQuery");
|
|
9
|
+
const TableDefinitionModel_1 = require("../models/TableDefinitionModel");
|
|
10
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
|
11
|
+
const SqlFormatter_1 = require("./SqlFormatter");
|
|
12
|
+
class DDLToFixtureConverter {
|
|
13
|
+
/**
|
|
14
|
+
* Converts DDL statements (CREATE TABLE) in the provided SQL text to a Fixture JSON object.
|
|
15
|
+
* Ignores non-DDL statements and parse errors.
|
|
16
|
+
*
|
|
17
|
+
* @param ddlSql The SQL text containing CREATE TABLE statements.
|
|
18
|
+
* @returns A Record representing the Fixture JSON.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Converts DDL statements (CREATE TABLE) in the provided SQL text to a Fixture JSON object.
|
|
22
|
+
* Ignores non-DDL statements and parse errors.
|
|
23
|
+
*
|
|
24
|
+
* @param ddlSql The SQL text containing CREATE TABLE statements.
|
|
25
|
+
* @returns A Record representing the Fixture JSON.
|
|
26
|
+
*/
|
|
27
|
+
static convert(ddlSql) {
|
|
28
|
+
const splitResult = MultiQuerySplitter_1.MultiQuerySplitter.split(ddlSql);
|
|
29
|
+
const createTableQueries = [];
|
|
30
|
+
const insertQueries = [];
|
|
31
|
+
for (const query of splitResult.queries) {
|
|
32
|
+
if (query.isEmpty)
|
|
33
|
+
continue;
|
|
34
|
+
try {
|
|
35
|
+
const ast = SqlParser_1.SqlParser.parse(query.sql);
|
|
36
|
+
if (ast instanceof CreateTableQuery_1.CreateTableQuery) {
|
|
37
|
+
createTableQueries.push(ast);
|
|
38
|
+
}
|
|
39
|
+
else if (ast instanceof InsertQuery_1.InsertQuery) {
|
|
40
|
+
insertQueries.push(ast);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
// Ignore parse errors for non-DDL or invalid SQL
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const registry = (0, TableDefinitionModel_1.createTableDefinitionRegistryFromCreateTableQueries)(createTableQueries);
|
|
48
|
+
const fixtureJson = {};
|
|
49
|
+
// Initialize fixtureJson with empty rows
|
|
50
|
+
for (const [tableName, def] of Object.entries(registry)) {
|
|
51
|
+
fixtureJson[tableName] = {
|
|
52
|
+
columns: def.columns.map(col => ({
|
|
53
|
+
name: col.name,
|
|
54
|
+
type: col.typeName,
|
|
55
|
+
default: this.formatDefaultValue(col.defaultValue)
|
|
56
|
+
})),
|
|
57
|
+
rows: []
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Sequence counters for nextval defaults: table -> column -> counter
|
|
61
|
+
const sequences = {};
|
|
62
|
+
// Process INSERT statements
|
|
63
|
+
for (const insert of insertQueries) {
|
|
64
|
+
// Only support INSERT ... VALUES
|
|
65
|
+
if (!(insert.selectQuery instanceof ValuesQuery_1.ValuesQuery)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const tableName = insert.insertClause.source.getAliasName();
|
|
69
|
+
if (!tableName || !fixtureJson[tableName]) {
|
|
70
|
+
// Ignore INSERTs for unknown tables
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const tableDef = registry[tableName];
|
|
74
|
+
const targetColumns = insert.insertClause.columns;
|
|
75
|
+
const valuesQuery = insert.selectQuery;
|
|
76
|
+
// If columns are not specified, use all columns in order
|
|
77
|
+
const columnNames = targetColumns
|
|
78
|
+
? targetColumns.map(c => c.name)
|
|
79
|
+
: tableDef.columns.map(c => c.name);
|
|
80
|
+
for (const tuple of valuesQuery.tuples) {
|
|
81
|
+
const row = {};
|
|
82
|
+
// Map provided values
|
|
83
|
+
for (let i = 0; i < columnNames.length; i++) {
|
|
84
|
+
const colName = columnNames[i];
|
|
85
|
+
if (i < tuple.values.length) {
|
|
86
|
+
const val = tuple.values[i];
|
|
87
|
+
row[colName] = this.extractValue(val);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Fill missing columns with defaults
|
|
91
|
+
for (const colDef of tableDef.columns) {
|
|
92
|
+
if (row[colDef.name] !== undefined) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
// Check for NOT NULL constraint without default
|
|
96
|
+
// TableColumnDefinitionModel.required is true if NOT NULL and no default/identity
|
|
97
|
+
if (colDef.required) {
|
|
98
|
+
throw new Error(`Column '${colDef.name}' in table '${tableName}' cannot be null and has no default value.`);
|
|
99
|
+
}
|
|
100
|
+
const hasDefault = colDef.defaultValue !== null && colDef.defaultValue !== undefined;
|
|
101
|
+
if (hasDefault) {
|
|
102
|
+
const defaultValStr = this.formatDefaultValue(colDef.defaultValue);
|
|
103
|
+
if (defaultValStr) {
|
|
104
|
+
const trimmedDefault = defaultValStr.trim();
|
|
105
|
+
const lowerTrimmed = trimmedDefault.toLowerCase();
|
|
106
|
+
const stringLiteralValue = trimmedDefault.startsWith("'") && trimmedDefault.endsWith("'")
|
|
107
|
+
? trimmedDefault.slice(1, -1).replace(/''/g, "'")
|
|
108
|
+
: trimmedDefault;
|
|
109
|
+
// Normalize literal NULLs (even when quoted) into JS null
|
|
110
|
+
if (stringLiteralValue.toLowerCase() === 'null') {
|
|
111
|
+
row[colDef.name] = null;
|
|
112
|
+
}
|
|
113
|
+
else if (lowerTrimmed.includes('nextval')) {
|
|
114
|
+
// Handle nextval sequence
|
|
115
|
+
if (!sequences[tableName])
|
|
116
|
+
sequences[tableName] = {};
|
|
117
|
+
if (!sequences[tableName][colDef.name])
|
|
118
|
+
sequences[tableName][colDef.name] = 0;
|
|
119
|
+
sequences[tableName][colDef.name]++;
|
|
120
|
+
row[colDef.name] = sequences[tableName][colDef.name];
|
|
121
|
+
}
|
|
122
|
+
else if (lowerTrimmed.includes('now') || lowerTrimmed.includes('current_timestamp')) {
|
|
123
|
+
// Handle timestamp defaults - use a fixed date for consistency or current date
|
|
124
|
+
// Using a fixed date makes tests deterministic
|
|
125
|
+
row[colDef.name] = "2023-01-01 00:00:00";
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Use the literal default value
|
|
129
|
+
// Try to unquote if it's a string literal
|
|
130
|
+
if (trimmedDefault.startsWith("'") && trimmedDefault.endsWith("'")) {
|
|
131
|
+
row[colDef.name] = stringLiteralValue;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Try to parse number/boolean/null
|
|
135
|
+
const num = Number(trimmedDefault);
|
|
136
|
+
if (!isNaN(num)) {
|
|
137
|
+
row[colDef.name] = num;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
const lower = trimmedDefault.toLowerCase();
|
|
141
|
+
if (lower === 'true') {
|
|
142
|
+
row[colDef.name] = true;
|
|
143
|
+
}
|
|
144
|
+
else if (lower === 'false') {
|
|
145
|
+
row[colDef.name] = false;
|
|
146
|
+
}
|
|
147
|
+
else if (lower === 'null') {
|
|
148
|
+
row[colDef.name] = null;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
row[colDef.name] = trimmedDefault;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Default to null
|
|
160
|
+
row[colDef.name] = null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
fixtureJson[tableName].rows.push(row);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return fixtureJson;
|
|
167
|
+
}
|
|
168
|
+
static extractValue(value) {
|
|
169
|
+
if (value instanceof ValueComponent_1.LiteralValue) {
|
|
170
|
+
return value.value;
|
|
171
|
+
}
|
|
172
|
+
// For other types, try to format to string
|
|
173
|
+
try {
|
|
174
|
+
const formatter = new SqlFormatter_1.SqlFormatter({ keywordCase: 'none' });
|
|
175
|
+
const { formattedSql } = formatter.format(value);
|
|
176
|
+
// Remove quotes if it looks like a string literal
|
|
177
|
+
if (formattedSql.startsWith("'") && formattedSql.endsWith("'")) {
|
|
178
|
+
return formattedSql.slice(1, -1).replace(/''/g, "'");
|
|
179
|
+
}
|
|
180
|
+
return formattedSql;
|
|
181
|
+
}
|
|
182
|
+
catch (e) {
|
|
183
|
+
return String(value);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
static formatDefaultValue(value) {
|
|
187
|
+
if (value === null || value === undefined) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
if (typeof value === 'string') {
|
|
191
|
+
return value;
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
// Use SqlFormatter to print the AST node
|
|
195
|
+
const formatter = new SqlFormatter_1.SqlFormatter({ keywordCase: 'none' });
|
|
196
|
+
const { formattedSql } = formatter.format(value);
|
|
197
|
+
return formattedSql;
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
// Fallback if formatter fails
|
|
201
|
+
return String(value);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.DDLToFixtureConverter = DDLToFixtureConverter;
|
|
206
|
+
//# sourceMappingURL=DDLToFixtureConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DDLToFixtureConverter.js","sourceRoot":"","sources":["../../../src/transformers/DDLToFixtureConverter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { DeleteQuery } from '../models/DeleteQuery';
|
|
2
|
+
import { SimpleSelectQuery } from '../models/SelectQuery';
|
|
3
|
+
import { TableDefinitionModel, TableDefinitionRegistry } from '../models/TableDefinitionModel';
|
|
4
|
+
import { FixtureTableDefinition } from './FixtureCteBuilder';
|
|
5
|
+
import type { MissingFixtureStrategy } from './InsertResultSelectConverter';
|
|
6
|
+
/** Options that control how DELETE-to-SELECT conversion resolves metadata and fixtures. */
|
|
7
|
+
export interface DeleteResultSelectOptions {
|
|
8
|
+
/** Optional registry keyed by table name (matching the target table name case). */
|
|
9
|
+
tableDefinitions?: TableDefinitionRegistry;
|
|
10
|
+
/** Optional callback that resolves metadata by table name (useful for schemified targets). */
|
|
11
|
+
tableDefinitionResolver?: (tableName: string) => TableDefinitionModel | undefined;
|
|
12
|
+
/** Optional fixtures that should shadow real tables inside the generated SELECT. */
|
|
13
|
+
fixtureTables?: FixtureTableDefinition[];
|
|
14
|
+
/** Strategy for how missing fixtures should be tolerated. */
|
|
15
|
+
missingFixtureStrategy?: MissingFixtureStrategy;
|
|
16
|
+
}
|
|
17
|
+
export declare class DeleteResultSelectConverter {
|
|
18
|
+
private static readonly DEFAULT_MISSING_FIXTURE_STRATEGY;
|
|
19
|
+
/**
|
|
20
|
+
* Converts a DELETE (with optional RETURNING) into a SELECT that mirrors its output rows.
|
|
21
|
+
*/
|
|
22
|
+
static toSelectQuery(deleteQuery: DeleteQuery, options?: DeleteResultSelectOptions): SimpleSelectQuery;
|
|
23
|
+
private static buildReturningSelectClause;
|
|
24
|
+
private static buildReturningSelectItems;
|
|
25
|
+
private static isWildcardReturningItem;
|
|
26
|
+
private static expandReturningWildcard;
|
|
27
|
+
private static buildDeleteReturningSelectItem;
|
|
28
|
+
private static buildDeleteColumnReference;
|
|
29
|
+
private static composeDeleteColumnReference;
|
|
30
|
+
private static getReturningAlias;
|
|
31
|
+
private static buildCountSelectClause;
|
|
32
|
+
private static buildFromClause;
|
|
33
|
+
private static buildReturningContext;
|
|
34
|
+
private static buildTableContexts;
|
|
35
|
+
private static parseReturningColumnName;
|
|
36
|
+
private static findTableContextForNamespaces;
|
|
37
|
+
private static ensureColumnExists;
|
|
38
|
+
private static resolveTableDefinition;
|
|
39
|
+
private static convertFixtureToTableDefinition;
|
|
40
|
+
private static buildTableDefinitionMap;
|
|
41
|
+
private static extractTargetTableName;
|
|
42
|
+
private static buildFixtureCtes;
|
|
43
|
+
private static collectPhysicalTableReferences;
|
|
44
|
+
private static buildFixtureTableMap;
|
|
45
|
+
private static filterFixtureTablesForReferences;
|
|
46
|
+
private static collectReferencedTablesFromWithClause;
|
|
47
|
+
private static ensureFixtureCoverage;
|
|
48
|
+
private static collectReferencedTables;
|
|
49
|
+
private static collectCteNamesFromWithClause;
|
|
50
|
+
private static getMissingFixtureTables;
|
|
51
|
+
private static mergeWithClause;
|
|
52
|
+
private static normalizeIdentifier;
|
|
53
|
+
}
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeleteResultSelectConverter = 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 FullNameParser_1 = require("../parsers/FullNameParser");
|
|
12
|
+
class DeleteResultSelectConverter {
|
|
13
|
+
/**
|
|
14
|
+
* Converts a DELETE (with optional RETURNING) into a SELECT that mirrors its output rows.
|
|
15
|
+
*/
|
|
16
|
+
static toSelectQuery(deleteQuery, options) {
|
|
17
|
+
var _a, _b, _c, _d;
|
|
18
|
+
const targetTableName = this.extractTargetTableName(deleteQuery.deleteClause);
|
|
19
|
+
const tableDefinition = this.resolveTableDefinition(targetTableName, options);
|
|
20
|
+
const targetAlias = deleteQuery.deleteClause.getSourceAliasName();
|
|
21
|
+
// Build the SELECT structure that mirrors the DELETE source/join semantics.
|
|
22
|
+
const returningContext = deleteQuery.returningClause
|
|
23
|
+
? this.buildReturningContext(deleteQuery.deleteClause, deleteQuery.usingClause, targetAlias, tableDefinition, options)
|
|
24
|
+
: null;
|
|
25
|
+
const selectClause = deleteQuery.returningClause
|
|
26
|
+
? this.buildReturningSelectClause(deleteQuery.returningClause, returningContext)
|
|
27
|
+
: this.buildCountSelectClause();
|
|
28
|
+
const fromClause = this.buildFromClause(deleteQuery.deleteClause, deleteQuery.usingClause);
|
|
29
|
+
const whereClause = (_a = deleteQuery.whereClause) !== null && _a !== void 0 ? _a : null;
|
|
30
|
+
const selectQuery = new SelectQuery_1.SimpleSelectQuery({
|
|
31
|
+
withClause: (_b = deleteQuery.withClause) !== null && _b !== void 0 ? _b : undefined,
|
|
32
|
+
selectClause,
|
|
33
|
+
fromClause,
|
|
34
|
+
whereClause
|
|
35
|
+
});
|
|
36
|
+
// Ensure fixture coverage before weaving CTEs back into the SELECT.
|
|
37
|
+
const fixtureTables = (_c = options === null || options === void 0 ? void 0 : options.fixtureTables) !== null && _c !== void 0 ? _c : [];
|
|
38
|
+
const fixtureMap = this.buildFixtureTableMap(fixtureTables);
|
|
39
|
+
const missingStrategy = (_d = options === null || options === void 0 ? void 0 : options.missingFixtureStrategy) !== null && _d !== void 0 ? _d : this.DEFAULT_MISSING_FIXTURE_STRATEGY;
|
|
40
|
+
const originalWithClause = SelectQueryWithClauseHelper_1.SelectQueryWithClauseHelper.detachWithClause(selectQuery);
|
|
41
|
+
const referencedTables = this.collectPhysicalTableReferences(selectQuery, originalWithClause);
|
|
42
|
+
const cteNames = this.collectCteNamesFromWithClause(originalWithClause);
|
|
43
|
+
const normalizedTarget = this.normalizeIdentifier(targetTableName);
|
|
44
|
+
if (!cteNames.has(normalizedTarget)) {
|
|
45
|
+
referencedTables.add(normalizedTarget);
|
|
46
|
+
}
|
|
47
|
+
this.ensureFixtureCoverage(referencedTables, fixtureMap, missingStrategy);
|
|
48
|
+
const filteredFixtures = this.filterFixtureTablesForReferences(fixtureTables, referencedTables);
|
|
49
|
+
const fixtureCtes = this.buildFixtureCtes(filteredFixtures);
|
|
50
|
+
const mergedWithClause = this.mergeWithClause(originalWithClause, fixtureCtes);
|
|
51
|
+
SelectQueryWithClauseHelper_1.SelectQueryWithClauseHelper.setWithClause(selectQuery, mergedWithClause);
|
|
52
|
+
return selectQuery;
|
|
53
|
+
}
|
|
54
|
+
static buildReturningSelectClause(returning, context) {
|
|
55
|
+
const selectItems = this.buildReturningSelectItems(returning, context);
|
|
56
|
+
return new Clause_1.SelectClause(selectItems);
|
|
57
|
+
}
|
|
58
|
+
static buildReturningSelectItems(returning, context) {
|
|
59
|
+
// Build SELECT entries from RETURNING items, expanding wildcards before expression rewriting.
|
|
60
|
+
const selectItems = [];
|
|
61
|
+
for (const item of returning.items) {
|
|
62
|
+
if (this.isWildcardReturningItem(item)) {
|
|
63
|
+
selectItems.push(...this.expandReturningWildcard(context));
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
selectItems.push(this.buildDeleteReturningSelectItem(item, context));
|
|
67
|
+
}
|
|
68
|
+
return selectItems;
|
|
69
|
+
}
|
|
70
|
+
static isWildcardReturningItem(item) {
|
|
71
|
+
return (item.value instanceof ValueComponent_1.ColumnReference &&
|
|
72
|
+
item.value.column.name === '*');
|
|
73
|
+
}
|
|
74
|
+
static expandReturningWildcard(context) {
|
|
75
|
+
if (!context.targetDefinition) {
|
|
76
|
+
throw new Error('Cannot expand RETURNING * without table definition.');
|
|
77
|
+
}
|
|
78
|
+
return context.targetDefinition.columns.map((column) => {
|
|
79
|
+
const expression = this.composeDeleteColumnReference({ namespaces: null, column: column.name }, context);
|
|
80
|
+
return new Clause_1.SelectItem(expression, column.name);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
static buildDeleteReturningSelectItem(item, context) {
|
|
84
|
+
const expression = (0, ValueComponentRewriter_1.rewriteValueComponentWithColumnResolver)(item.value, (column) => this.buildDeleteColumnReference(column, context));
|
|
85
|
+
const alias = this.getReturningAlias(item);
|
|
86
|
+
return new Clause_1.SelectItem(expression, alias);
|
|
87
|
+
}
|
|
88
|
+
static buildDeleteColumnReference(column, context) {
|
|
89
|
+
const parsed = this.parseReturningColumnName(column.toString());
|
|
90
|
+
return this.composeDeleteColumnReference(parsed, context);
|
|
91
|
+
}
|
|
92
|
+
static composeDeleteColumnReference(parsedColumn, context) {
|
|
93
|
+
var _a;
|
|
94
|
+
const tableContext = this.findTableContextForNamespaces(parsedColumn.namespaces, context);
|
|
95
|
+
const definitionToValidate = (_a = tableContext === null || tableContext === void 0 ? void 0 : tableContext.tableDefinition) !== null && _a !== void 0 ? _a : (parsedColumn.namespaces ? undefined : context.targetDefinition);
|
|
96
|
+
if (definitionToValidate) {
|
|
97
|
+
this.ensureColumnExists(parsedColumn.column, definitionToValidate);
|
|
98
|
+
}
|
|
99
|
+
const columnNamespace = parsedColumn.namespaces && parsedColumn.namespaces.length > 0
|
|
100
|
+
? [...parsedColumn.namespaces]
|
|
101
|
+
: context.targetAlias
|
|
102
|
+
? [context.targetAlias]
|
|
103
|
+
: null;
|
|
104
|
+
return new ValueComponent_1.ColumnReference(columnNamespace, parsedColumn.column);
|
|
105
|
+
}
|
|
106
|
+
static getReturningAlias(item) {
|
|
107
|
+
var _a;
|
|
108
|
+
if ((_a = item.identifier) === null || _a === void 0 ? void 0 : _a.name) {
|
|
109
|
+
return item.identifier.name;
|
|
110
|
+
}
|
|
111
|
+
if (item.value instanceof ValueComponent_1.ColumnReference) {
|
|
112
|
+
return item.value.toString();
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
static buildCountSelectClause() {
|
|
117
|
+
// Count rows when no RETURNING clause is present.
|
|
118
|
+
const countFunction = new ValueComponent_1.FunctionCall(null, 'count', new ValueComponent_1.RawString('*'), null);
|
|
119
|
+
const selectItem = new Clause_1.SelectItem(countFunction, 'count');
|
|
120
|
+
return new Clause_1.SelectClause([selectItem]);
|
|
121
|
+
}
|
|
122
|
+
static buildFromClause(deleteClause, usingClause) {
|
|
123
|
+
var _a;
|
|
124
|
+
if (!((_a = usingClause === null || usingClause === void 0 ? void 0 : usingClause.sources) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
125
|
+
return new Clause_1.FromClause(deleteClause.source, null);
|
|
126
|
+
}
|
|
127
|
+
// Cross join each USING source so their columns remain available for predicates.
|
|
128
|
+
const joins = usingClause.sources.map((source) => new Clause_1.JoinClause('cross join', source, null, false));
|
|
129
|
+
return new Clause_1.FromClause(deleteClause.source, joins);
|
|
130
|
+
}
|
|
131
|
+
static buildReturningContext(deleteClause, usingClause, targetAlias, targetDefinition, options) {
|
|
132
|
+
const { aliasMap, tableNameMap } = this.buildTableContexts(deleteClause, usingClause, options);
|
|
133
|
+
return {
|
|
134
|
+
aliasMap,
|
|
135
|
+
tableNameMap,
|
|
136
|
+
targetAlias,
|
|
137
|
+
targetDefinition
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
static buildTableContexts(deleteClause, usingClause, options) {
|
|
141
|
+
const aliasMap = new Map();
|
|
142
|
+
const tableNameMap = new Map();
|
|
143
|
+
// Capture alias and table name contexts to resolve metadata for both identifiers.
|
|
144
|
+
const collectSource = (source) => {
|
|
145
|
+
const alias = source.getAliasName();
|
|
146
|
+
if (!alias || !(source.datasource instanceof Clause_1.TableSource)) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const normalizedAlias = this.normalizeIdentifier(alias);
|
|
150
|
+
if (aliasMap.has(normalizedAlias)) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const tableName = source.datasource.getSourceName();
|
|
154
|
+
const tableDefinition = this.resolveTableDefinition(tableName, options);
|
|
155
|
+
const context = {
|
|
156
|
+
alias,
|
|
157
|
+
tableName,
|
|
158
|
+
tableDefinition
|
|
159
|
+
};
|
|
160
|
+
aliasMap.set(normalizedAlias, context);
|
|
161
|
+
const normalizedTableName = this.normalizeIdentifier(tableName);
|
|
162
|
+
if (!tableNameMap.has(normalizedTableName)) {
|
|
163
|
+
tableNameMap.set(normalizedTableName, context);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
collectSource(deleteClause.source);
|
|
167
|
+
if (usingClause) {
|
|
168
|
+
for (const source of usingClause.sources) {
|
|
169
|
+
collectSource(source);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return { aliasMap, tableNameMap };
|
|
173
|
+
}
|
|
174
|
+
static parseReturningColumnName(columnName) {
|
|
175
|
+
const trimmed = columnName.trim();
|
|
176
|
+
if (!trimmed) {
|
|
177
|
+
throw new Error('Returning column name cannot be empty.');
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const parsed = FullNameParser_1.FullNameParser.parse(trimmed);
|
|
181
|
+
return {
|
|
182
|
+
namespaces: parsed.namespaces,
|
|
183
|
+
column: parsed.name.name
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
const parts = trimmed.split('.').map((segment) => segment.trim()).filter((segment) => segment.length > 0);
|
|
188
|
+
if (parts.length === 0) {
|
|
189
|
+
return { namespaces: null, column: trimmed };
|
|
190
|
+
}
|
|
191
|
+
const column = parts.pop();
|
|
192
|
+
return {
|
|
193
|
+
namespaces: parts.length > 0 ? parts : null,
|
|
194
|
+
column
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
static findTableContextForNamespaces(namespaces, context) {
|
|
199
|
+
if (!(namespaces === null || namespaces === void 0 ? void 0 : namespaces.length)) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
for (let depth = namespaces.length; depth > 0; depth--) {
|
|
203
|
+
const candidateParts = namespaces.slice(namespaces.length - depth);
|
|
204
|
+
const identifier = candidateParts.join('.');
|
|
205
|
+
const normalized = this.normalizeIdentifier(identifier);
|
|
206
|
+
const aliasContext = context.aliasMap.get(normalized);
|
|
207
|
+
if (aliasContext) {
|
|
208
|
+
return aliasContext;
|
|
209
|
+
}
|
|
210
|
+
const tableContext = context.tableNameMap.get(normalized);
|
|
211
|
+
if (tableContext) {
|
|
212
|
+
return tableContext;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
static ensureColumnExists(columnName, tableDefinition) {
|
|
218
|
+
if (!tableDefinition) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const normalized = this.normalizeIdentifier(columnName);
|
|
222
|
+
const exists = tableDefinition.columns.some((column) => this.normalizeIdentifier(column.name) === normalized);
|
|
223
|
+
if (!exists) {
|
|
224
|
+
throw new Error(`Column '${columnName}' cannot be resolved for RETURNING output.`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
static resolveTableDefinition(tableName, options) {
|
|
228
|
+
if (options === null || options === void 0 ? void 0 : options.tableDefinitionResolver) {
|
|
229
|
+
const resolved = options.tableDefinitionResolver(tableName);
|
|
230
|
+
if (resolved !== undefined) {
|
|
231
|
+
return resolved;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const normalized = this.normalizeIdentifier(tableName);
|
|
235
|
+
if (options === null || options === void 0 ? void 0 : options.tableDefinitions) {
|
|
236
|
+
const map = this.buildTableDefinitionMap(options.tableDefinitions);
|
|
237
|
+
const definition = map.get(normalized);
|
|
238
|
+
if (definition) {
|
|
239
|
+
return definition;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (options === null || options === void 0 ? void 0 : options.fixtureTables) {
|
|
243
|
+
const fixture = options.fixtureTables.find(f => this.normalizeIdentifier(f.tableName) === normalized);
|
|
244
|
+
if (fixture) {
|
|
245
|
+
return this.convertFixtureToTableDefinition(fixture);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return undefined;
|
|
249
|
+
}
|
|
250
|
+
static convertFixtureToTableDefinition(fixture) {
|
|
251
|
+
return {
|
|
252
|
+
name: fixture.tableName,
|
|
253
|
+
columns: fixture.columns.map(col => {
|
|
254
|
+
var _a;
|
|
255
|
+
return ({
|
|
256
|
+
name: col.name,
|
|
257
|
+
typeName: col.typeName,
|
|
258
|
+
required: false,
|
|
259
|
+
defaultValue: (_a = col.defaultValue) !== null && _a !== void 0 ? _a : null
|
|
260
|
+
});
|
|
261
|
+
})
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
static buildTableDefinitionMap(registry) {
|
|
265
|
+
const map = new Map();
|
|
266
|
+
for (const definition of Object.values(registry)) {
|
|
267
|
+
map.set(this.normalizeIdentifier(definition.name), definition);
|
|
268
|
+
}
|
|
269
|
+
return map;
|
|
270
|
+
}
|
|
271
|
+
static extractTargetTableName(deleteClause) {
|
|
272
|
+
const datasource = deleteClause.source.datasource;
|
|
273
|
+
if (datasource instanceof Clause_1.TableSource) {
|
|
274
|
+
return datasource.getSourceName();
|
|
275
|
+
}
|
|
276
|
+
throw new Error('Delete target must be a table source for conversion.');
|
|
277
|
+
}
|
|
278
|
+
static buildFixtureCtes(fixtures) {
|
|
279
|
+
if (!fixtures || fixtures.length === 0) {
|
|
280
|
+
return [];
|
|
281
|
+
}
|
|
282
|
+
return FixtureCteBuilder_1.FixtureCteBuilder.buildFixtures(fixtures);
|
|
283
|
+
}
|
|
284
|
+
static collectPhysicalTableReferences(selectQuery, withClause) {
|
|
285
|
+
const referencedTables = this.collectReferencedTables(selectQuery);
|
|
286
|
+
const ignoredTables = this.collectCteNamesFromWithClause(withClause);
|
|
287
|
+
const tablesToShadow = new Set();
|
|
288
|
+
// Keep only concrete tables that are not defined via WITH clause aliases.
|
|
289
|
+
for (const table of referencedTables) {
|
|
290
|
+
if (ignoredTables.has(table)) {
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
tablesToShadow.add(table);
|
|
294
|
+
}
|
|
295
|
+
const cteReferencedTables = this.collectReferencedTablesFromWithClause(withClause);
|
|
296
|
+
for (const table of cteReferencedTables) {
|
|
297
|
+
if (ignoredTables.has(table)) {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
tablesToShadow.add(table);
|
|
301
|
+
}
|
|
302
|
+
return tablesToShadow;
|
|
303
|
+
}
|
|
304
|
+
static buildFixtureTableMap(fixtures) {
|
|
305
|
+
const map = new Map();
|
|
306
|
+
for (const fixture of fixtures) {
|
|
307
|
+
map.set(this.normalizeIdentifier(fixture.tableName), fixture);
|
|
308
|
+
}
|
|
309
|
+
return map;
|
|
310
|
+
}
|
|
311
|
+
static filterFixtureTablesForReferences(fixtures, referencedTables) {
|
|
312
|
+
if (!fixtures.length || referencedTables.size === 0) {
|
|
313
|
+
return [];
|
|
314
|
+
}
|
|
315
|
+
const filtered = [];
|
|
316
|
+
for (const fixture of fixtures) {
|
|
317
|
+
if (referencedTables.has(this.normalizeIdentifier(fixture.tableName))) {
|
|
318
|
+
filtered.push(fixture);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return filtered;
|
|
322
|
+
}
|
|
323
|
+
static collectReferencedTablesFromWithClause(withClause) {
|
|
324
|
+
const tables = new Set();
|
|
325
|
+
if (!(withClause === null || withClause === void 0 ? void 0 : withClause.tables)) {
|
|
326
|
+
return tables;
|
|
327
|
+
}
|
|
328
|
+
for (const cte of withClause.tables) {
|
|
329
|
+
for (const table of this.collectReferencedTables(cte.query)) {
|
|
330
|
+
tables.add(table);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return tables;
|
|
334
|
+
}
|
|
335
|
+
static ensureFixtureCoverage(referencedTables, fixtureMap, strategy) {
|
|
336
|
+
if (referencedTables.size === 0) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const missingTables = this.getMissingFixtureTables(referencedTables, fixtureMap);
|
|
340
|
+
if (missingTables.length === 0) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
if (strategy === 'error') {
|
|
344
|
+
throw new Error(`Delete SELECT refers to tables without fixture coverage: ${missingTables.join(', ')}.`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
static collectReferencedTables(query) {
|
|
348
|
+
const collector = new TableSourceCollector_1.TableSourceCollector(false);
|
|
349
|
+
const sources = collector.collect(query);
|
|
350
|
+
const normalized = new Set();
|
|
351
|
+
for (const source of sources) {
|
|
352
|
+
normalized.add(this.normalizeIdentifier(source.getSourceName()));
|
|
353
|
+
}
|
|
354
|
+
return normalized;
|
|
355
|
+
}
|
|
356
|
+
static collectCteNamesFromWithClause(withClause) {
|
|
357
|
+
const names = new Set();
|
|
358
|
+
if (!(withClause === null || withClause === void 0 ? void 0 : withClause.tables)) {
|
|
359
|
+
return names;
|
|
360
|
+
}
|
|
361
|
+
for (const table of withClause.tables) {
|
|
362
|
+
names.add(this.normalizeIdentifier(table.getSourceAliasName()));
|
|
363
|
+
}
|
|
364
|
+
return names;
|
|
365
|
+
}
|
|
366
|
+
static getMissingFixtureTables(referencedTables, fixtureMap) {
|
|
367
|
+
const missing = [];
|
|
368
|
+
for (const table of referencedTables) {
|
|
369
|
+
if (!fixtureMap.has(table)) {
|
|
370
|
+
missing.push(table);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return missing;
|
|
374
|
+
}
|
|
375
|
+
static mergeWithClause(original, fixtureCtes) {
|
|
376
|
+
var _a;
|
|
377
|
+
if (!fixtureCtes.length && !original) {
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
const combinedTables = [...fixtureCtes];
|
|
381
|
+
if (original === null || original === void 0 ? void 0 : original.tables) {
|
|
382
|
+
combinedTables.push(...original.tables);
|
|
383
|
+
}
|
|
384
|
+
if (!combinedTables.length) {
|
|
385
|
+
return null;
|
|
386
|
+
}
|
|
387
|
+
const merged = new Clause_1.WithClause((_a = original === null || original === void 0 ? void 0 : original.recursive) !== null && _a !== void 0 ? _a : false, combinedTables);
|
|
388
|
+
merged.globalComments = (original === null || original === void 0 ? void 0 : original.globalComments) ? [...original.globalComments] : null;
|
|
389
|
+
merged.trailingComments = (original === null || original === void 0 ? void 0 : original.trailingComments) ? [...original.trailingComments] : null;
|
|
390
|
+
return merged;
|
|
391
|
+
}
|
|
392
|
+
static normalizeIdentifier(value) {
|
|
393
|
+
return value.trim().toLowerCase();
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
exports.DeleteResultSelectConverter = DeleteResultSelectConverter;
|
|
397
|
+
DeleteResultSelectConverter.DEFAULT_MISSING_FIXTURE_STRATEGY = 'error';
|
|
398
|
+
//# sourceMappingURL=DeleteResultSelectConverter.js.map
|