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,523 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SchemaCollector = exports.TableSchema = void 0;
|
|
4
|
+
const Clause_1 = require("../models/Clause");
|
|
5
|
+
const SimpleSelectQuery_1 = require("../models/SimpleSelectQuery");
|
|
6
|
+
const CTECollector_1 = require("./CTECollector");
|
|
7
|
+
const SelectableColumnCollector_1 = require("./SelectableColumnCollector");
|
|
8
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
|
9
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
|
10
|
+
class TableSchema {
|
|
11
|
+
constructor(name, columns) {
|
|
12
|
+
this.name = name;
|
|
13
|
+
this.columns = columns;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.TableSchema = TableSchema;
|
|
17
|
+
/**
|
|
18
|
+
* Collects schema information (table names and resolved columns) from SelectQuery instances.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const collector = new SchemaCollector((table) => ['id', 'name']);
|
|
23
|
+
* const query = SelectQueryParser.parse('SELECT id, name FROM users');
|
|
24
|
+
* const schemas = collector.collect(query);
|
|
25
|
+
* ```
|
|
26
|
+
* Related tests: packages/core/tests/transformers/SchemaCollector.test.ts
|
|
27
|
+
*/
|
|
28
|
+
class SchemaCollector {
|
|
29
|
+
constructor(tableColumnResolver = null, allowWildcardWithoutResolver = false) {
|
|
30
|
+
this.tableColumnResolver = tableColumnResolver;
|
|
31
|
+
this.allowWildcardWithoutResolver = allowWildcardWithoutResolver;
|
|
32
|
+
this.tableSchemas = [];
|
|
33
|
+
this.visitedNodes = new Set();
|
|
34
|
+
this.commonTables = [];
|
|
35
|
+
this.running = false;
|
|
36
|
+
// For analyze method
|
|
37
|
+
this.unresolvedColumns = [];
|
|
38
|
+
this.analysisError = undefined;
|
|
39
|
+
this.isAnalyzeMode = false;
|
|
40
|
+
this.handlers = new Map();
|
|
41
|
+
// Setup handlers for query components
|
|
42
|
+
this.handlers.set(SimpleSelectQuery_1.SimpleSelectQuery.kind, (expr) => this.visitSimpleSelectQuery(expr));
|
|
43
|
+
this.handlers.set(SelectQuery_1.BinarySelectQuery.kind, (expr) => this.visitBinarySelectQuery(expr));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Collects schema information (table names and column names) from a SQL query structure.
|
|
47
|
+
* This method ensures that the collected schema information is unique and sorted.
|
|
48
|
+
* The resulting schemas and columns are sorted alphabetically to ensure deterministic ordering.
|
|
49
|
+
*
|
|
50
|
+
* @param arg The SQL query structure to analyze.
|
|
51
|
+
*/
|
|
52
|
+
collect(arg) {
|
|
53
|
+
this.visit(arg);
|
|
54
|
+
return this.tableSchemas;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Analyzes schema information from a SQL query structure without throwing errors.
|
|
58
|
+
* Returns a result object containing successfully resolved schemas, unresolved columns,
|
|
59
|
+
* and error information if any issues were encountered.
|
|
60
|
+
*
|
|
61
|
+
* @param arg The SQL query structure to analyze.
|
|
62
|
+
* @returns Analysis result containing schemas, unresolved columns, and success status.
|
|
63
|
+
*/
|
|
64
|
+
analyze(arg) {
|
|
65
|
+
// Set analyze mode flag
|
|
66
|
+
this.isAnalyzeMode = true;
|
|
67
|
+
try {
|
|
68
|
+
this.visit(arg);
|
|
69
|
+
// If we got here without errors, it's a success
|
|
70
|
+
return {
|
|
71
|
+
success: this.unresolvedColumns.length === 0 && !this.analysisError,
|
|
72
|
+
schemas: this.tableSchemas,
|
|
73
|
+
unresolvedColumns: this.unresolvedColumns,
|
|
74
|
+
error: this.analysisError
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
// Reset analyze mode flag
|
|
79
|
+
this.isAnalyzeMode = false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Main entry point for the visitor pattern.
|
|
84
|
+
* Implements the shallow visit pattern to distinguish between root and recursive visits.
|
|
85
|
+
*
|
|
86
|
+
* This method ensures that schema information is collected uniquely and sorted.
|
|
87
|
+
* The resulting schemas and columns are sorted alphabetically to ensure deterministic ordering.
|
|
88
|
+
*
|
|
89
|
+
* @param arg The SQL component to visit.
|
|
90
|
+
*/
|
|
91
|
+
visit(arg) {
|
|
92
|
+
// If not a root visit, just visit the node and return
|
|
93
|
+
if (this.running) {
|
|
94
|
+
this.visitNode(arg);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// If this is a root visit, we need to reset the state
|
|
98
|
+
this.reset();
|
|
99
|
+
this.running = true;
|
|
100
|
+
try {
|
|
101
|
+
// Ensure the argument is a SelectQuery
|
|
102
|
+
if (!(arg instanceof SimpleSelectQuery_1.SimpleSelectQuery || arg instanceof SelectQuery_1.BinarySelectQuery)) {
|
|
103
|
+
throw new Error(`Unsupported SQL component type for schema collection. Received: ${arg.constructor.name}. Expected: SimpleSelectQuery or BinarySelectQuery.`);
|
|
104
|
+
}
|
|
105
|
+
// Collects Common Table Expressions (CTEs) using CTECollector
|
|
106
|
+
const cteCollector = new CTECollector_1.CTECollector();
|
|
107
|
+
this.commonTables = cteCollector.collect(arg);
|
|
108
|
+
this.visitNode(arg);
|
|
109
|
+
// Consolidate tableSchemas
|
|
110
|
+
this.consolidateTableSchemas();
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
// Regardless of success or failure, reset the root visit flag
|
|
114
|
+
this.running = false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Internal visit method used for all nodes.
|
|
119
|
+
* This separates the visit flag management from the actual node visitation logic.
|
|
120
|
+
*/
|
|
121
|
+
visitNode(arg) {
|
|
122
|
+
// Skip if we've already visited this node to prevent infinite recursion
|
|
123
|
+
if (this.visitedNodes.has(arg)) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Mark as visited
|
|
127
|
+
this.visitedNodes.add(arg);
|
|
128
|
+
const handler = this.handlers.get(arg.getKind());
|
|
129
|
+
if (handler) {
|
|
130
|
+
handler(arg);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// If no handler found, that's ok - we only care about specific components
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Resets the state of the collector for a new root visit.
|
|
137
|
+
*/
|
|
138
|
+
reset() {
|
|
139
|
+
this.tableSchemas = [];
|
|
140
|
+
this.visitedNodes = new Set();
|
|
141
|
+
this.commonTables = [];
|
|
142
|
+
this.unresolvedColumns = [];
|
|
143
|
+
this.analysisError = undefined;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Consolidates table schemas by merging columns for tables with the same name.
|
|
147
|
+
* This ensures that each table name appears only once in the final schema list,
|
|
148
|
+
* with all its columns combined while removing duplicates.
|
|
149
|
+
*
|
|
150
|
+
* Note: The resulting schemas and columns are sorted alphabetically to ensure deterministic ordering.
|
|
151
|
+
*/
|
|
152
|
+
consolidateTableSchemas() {
|
|
153
|
+
const consolidatedSchemas = new Map();
|
|
154
|
+
for (const schema of this.tableSchemas) {
|
|
155
|
+
if (!consolidatedSchemas.has(schema.name)) {
|
|
156
|
+
consolidatedSchemas.set(schema.name, new Set(schema.columns));
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
const existingColumns = consolidatedSchemas.get(schema.name);
|
|
160
|
+
schema.columns.forEach(column => existingColumns === null || existingColumns === void 0 ? void 0 : existingColumns.add(column));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
this.tableSchemas = Array.from(consolidatedSchemas.entries())
|
|
164
|
+
.sort(([nameA], [nameB]) => nameA.localeCompare(nameB)) // Sort by table name
|
|
165
|
+
.map(([name, columns]) => {
|
|
166
|
+
return new TableSchema(name, Array.from(columns).sort()); // Sort columns alphabetically
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
handleSourceExpression(source, queryColumns, includeUnnamed) {
|
|
170
|
+
var _a, _b;
|
|
171
|
+
if (source.datasource instanceof Clause_1.TableSource) {
|
|
172
|
+
const tableName = source.datasource.getSourceName();
|
|
173
|
+
const cte = this.commonTables.filter((table) => table.getSourceAliasName() === tableName);
|
|
174
|
+
if (cte.length > 0) {
|
|
175
|
+
// Process the CTE query recursively
|
|
176
|
+
cte[0].query.accept(this);
|
|
177
|
+
// Also collect schema information for the CTE itself
|
|
178
|
+
const cteAlias = (_a = source.getAliasName()) !== null && _a !== void 0 ? _a : tableName;
|
|
179
|
+
this.processCTETableSchema(cte[0], cteAlias, queryColumns, includeUnnamed);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const tableAlias = (_b = source.getAliasName()) !== null && _b !== void 0 ? _b : tableName;
|
|
183
|
+
this.processCollectTableSchema(tableName, tableAlias, queryColumns, includeUnnamed);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else if (source.datasource instanceof Clause_1.SubQuerySource) {
|
|
187
|
+
// Process subqueries recursively
|
|
188
|
+
this.visitNode(source.datasource.query);
|
|
189
|
+
// For subqueries, we don't add schema information directly as they're derived
|
|
190
|
+
// The schema will be collected from the inner query
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// For other source types (FunctionSource, ParenSource), we skip schema collection
|
|
194
|
+
// as they don't represent table schemas in the traditional sense
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
visitSimpleSelectQuery(query) {
|
|
198
|
+
var _a;
|
|
199
|
+
if (query.fromClause === null) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// Collect columns used in the query
|
|
203
|
+
const columnCollector = new SelectableColumnCollector_1.SelectableColumnCollector(this.tableColumnResolver, true, SelectableColumnCollector_1.DuplicateDetectionMode.FullName);
|
|
204
|
+
const columns = columnCollector.collect(query);
|
|
205
|
+
let queryColumns;
|
|
206
|
+
// Only filter JOIN condition columns when allowWildcardWithoutResolver is true
|
|
207
|
+
// This preserves backward compatibility for existing tests
|
|
208
|
+
if (this.allowWildcardWithoutResolver) {
|
|
209
|
+
// Filter to include only columns that are actually selected, not those used in JOIN conditions
|
|
210
|
+
const selectColumns = this.getSelectClauseColumns(query);
|
|
211
|
+
queryColumns = columns.filter((column) => column.value instanceof ValueComponent_1.ColumnReference)
|
|
212
|
+
.map(column => column.value)
|
|
213
|
+
.filter(columnRef => {
|
|
214
|
+
// Only include columns that are either:
|
|
215
|
+
// 1. Explicitly mentioned in SELECT clause (not wildcards)
|
|
216
|
+
// 2. Part of wildcard expansion from SELECT clause (only if we have a resolver)
|
|
217
|
+
const tableName = columnRef.getNamespace();
|
|
218
|
+
const columnName = columnRef.column.name;
|
|
219
|
+
return selectColumns.some(selectCol => {
|
|
220
|
+
if (selectCol.value instanceof ValueComponent_1.ColumnReference) {
|
|
221
|
+
const selectTableName = selectCol.value.getNamespace();
|
|
222
|
+
const selectColumnName = selectCol.value.column.name;
|
|
223
|
+
// Exact match for explicit columns
|
|
224
|
+
if (selectTableName === tableName && selectColumnName === columnName) {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
// Wildcard match (table.* or *) - only include if we have a resolver
|
|
228
|
+
if (selectColumnName === "*") {
|
|
229
|
+
// If allowWildcardWithoutResolver is true and no resolver, exclude wildcard expansions
|
|
230
|
+
if (this.allowWildcardWithoutResolver && this.tableColumnResolver === null) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
// Full wildcard (*) matches all tables
|
|
234
|
+
if (selectTableName === "") {
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
// Table wildcard (table.*) matches specific table
|
|
238
|
+
if (selectTableName === tableName) {
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return false;
|
|
244
|
+
});
|
|
245
|
+
})
|
|
246
|
+
.map(columnRef => ({
|
|
247
|
+
table: columnRef.getNamespace(),
|
|
248
|
+
column: columnRef.column.name
|
|
249
|
+
}));
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
// Original behavior: include all columns including JOIN conditions
|
|
253
|
+
queryColumns = columns.filter((column) => column.value instanceof ValueComponent_1.ColumnReference)
|
|
254
|
+
.map(column => column.value)
|
|
255
|
+
.map(columnRef => ({
|
|
256
|
+
table: columnRef.getNamespace(),
|
|
257
|
+
column: columnRef.column.name
|
|
258
|
+
}));
|
|
259
|
+
}
|
|
260
|
+
// Handle columns without table names in queries with joins
|
|
261
|
+
if (query.fromClause.joins !== null && query.fromClause.joins.length > 0) {
|
|
262
|
+
const columnsWithoutTable = queryColumns.filter((columnRef) => columnRef.table === "").map((columnRef) => columnRef.column);
|
|
263
|
+
if (columnsWithoutTable.length > 0) {
|
|
264
|
+
if (this.isAnalyzeMode) {
|
|
265
|
+
// In analyze mode, collect unresolved columns
|
|
266
|
+
this.unresolvedColumns.push(...columnsWithoutTable);
|
|
267
|
+
this.analysisError = `Column reference(s) without table name found in query: ${columnsWithoutTable.join(', ')}`;
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
// In collect mode, throw error as before
|
|
271
|
+
throw new Error(`Column reference(s) without table name found in query: ${columnsWithoutTable.join(', ')}`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Handle the main FROM clause table
|
|
276
|
+
if (query.fromClause.source.datasource instanceof Clause_1.TableSource) {
|
|
277
|
+
this.handleSourceExpression(query.fromClause.source, queryColumns, true);
|
|
278
|
+
}
|
|
279
|
+
else if (query.fromClause.source.datasource instanceof Clause_1.SubQuerySource) {
|
|
280
|
+
query.fromClause.source.datasource.query.accept(this);
|
|
281
|
+
}
|
|
282
|
+
// Handle JOIN clause tables
|
|
283
|
+
if ((_a = query.fromClause) === null || _a === void 0 ? void 0 : _a.joins) {
|
|
284
|
+
for (const join of query.fromClause.joins) {
|
|
285
|
+
if (join.source.datasource instanceof Clause_1.TableSource) {
|
|
286
|
+
this.handleSourceExpression(join.source, queryColumns, false);
|
|
287
|
+
}
|
|
288
|
+
else if (join.source.datasource instanceof Clause_1.SubQuerySource) {
|
|
289
|
+
join.source.datasource.query.accept(this);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
visitBinarySelectQuery(query) {
|
|
295
|
+
// Visit the left and right queries
|
|
296
|
+
this.visitNode(query.left);
|
|
297
|
+
this.visitNode(query.right);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Extract column references from the SELECT clause only
|
|
301
|
+
*/
|
|
302
|
+
getSelectClauseColumns(query) {
|
|
303
|
+
if (!query.selectClause) {
|
|
304
|
+
return [];
|
|
305
|
+
}
|
|
306
|
+
const selectColumns = [];
|
|
307
|
+
for (const item of query.selectClause.items) {
|
|
308
|
+
if (item.value instanceof ValueComponent_1.ColumnReference) {
|
|
309
|
+
const columnName = item.value.column.name;
|
|
310
|
+
selectColumns.push({ name: columnName, value: item.value });
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return selectColumns;
|
|
314
|
+
}
|
|
315
|
+
processCollectTableSchema(tableName, tableAlias, queryColumns, includeUnnamed = false) {
|
|
316
|
+
// Check if wildcard is present and handle based on configuration
|
|
317
|
+
if (this.tableColumnResolver === null) {
|
|
318
|
+
const hasWildcard = queryColumns
|
|
319
|
+
.filter((columnRef) => columnRef.table === tableAlias || (includeUnnamed && columnRef.table === ""))
|
|
320
|
+
.filter((columnRef) => columnRef.column === "*")
|
|
321
|
+
.length > 0;
|
|
322
|
+
// Handle error if wildcard is found and allowWildcardWithoutResolver is false (default behavior)
|
|
323
|
+
if (hasWildcard && !this.allowWildcardWithoutResolver) {
|
|
324
|
+
const errorMessage = tableName
|
|
325
|
+
? `Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards. Target table: ${tableName}`
|
|
326
|
+
: "Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards.";
|
|
327
|
+
if (this.isAnalyzeMode) {
|
|
328
|
+
// In analyze mode, record the error but continue processing
|
|
329
|
+
this.analysisError = errorMessage;
|
|
330
|
+
// Add wildcard columns to unresolved list
|
|
331
|
+
const wildcardColumns = queryColumns
|
|
332
|
+
.filter((columnRef) => columnRef.table === tableAlias || (includeUnnamed && columnRef.table === ""))
|
|
333
|
+
.filter((columnRef) => columnRef.column === "*")
|
|
334
|
+
.map((columnRef) => columnRef.table ? `${columnRef.table}.*` : "*");
|
|
335
|
+
this.unresolvedColumns.push(...wildcardColumns);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
// In collect mode, throw error as before
|
|
339
|
+
throw new Error(errorMessage);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
let tableColumns = queryColumns
|
|
344
|
+
.filter((columnRef) => columnRef.column !== "*")
|
|
345
|
+
.filter((columnRef) => columnRef.table === tableAlias || (includeUnnamed && columnRef.table === ""))
|
|
346
|
+
.map((columnRef) => columnRef.column);
|
|
347
|
+
const tableSchema = new TableSchema(tableName, tableColumns);
|
|
348
|
+
this.tableSchemas.push(tableSchema);
|
|
349
|
+
}
|
|
350
|
+
processCTETableSchema(cte, cteAlias, queryColumns, includeUnnamed = false) {
|
|
351
|
+
const cteName = cte.getSourceAliasName();
|
|
352
|
+
// Get the columns that the CTE exposes by analyzing its SELECT clause
|
|
353
|
+
const cteColumns = this.getCTEColumns(cte);
|
|
354
|
+
// Filter query columns that reference this CTE
|
|
355
|
+
const cteReferencedColumns = queryColumns
|
|
356
|
+
.filter((columnRef) => columnRef.table === cteAlias || (includeUnnamed && columnRef.table === ""))
|
|
357
|
+
.map((columnRef) => columnRef.column);
|
|
358
|
+
// Handle wildcards for CTEs
|
|
359
|
+
if (cteReferencedColumns.includes("*")) {
|
|
360
|
+
if (this.tableColumnResolver !== null) {
|
|
361
|
+
// Try to resolve columns using the resolver first
|
|
362
|
+
const resolvedColumns = this.tableColumnResolver(cteName);
|
|
363
|
+
if (resolvedColumns.length > 0) {
|
|
364
|
+
const tableSchema = new TableSchema(cteName, resolvedColumns);
|
|
365
|
+
this.tableSchemas.push(tableSchema);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// If we can determine CTE columns, use them for wildcard expansion
|
|
370
|
+
if (cteColumns.length > 0) {
|
|
371
|
+
const tableSchema = new TableSchema(cteName, cteColumns);
|
|
372
|
+
this.tableSchemas.push(tableSchema);
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
else if (this.allowWildcardWithoutResolver) {
|
|
376
|
+
// Allow wildcards but with empty columns since we can't determine them
|
|
377
|
+
const tableSchema = new TableSchema(cteName, []);
|
|
378
|
+
this.tableSchemas.push(tableSchema);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
// Handle wildcard error
|
|
383
|
+
const errorMessage = `Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards. Target table: ${cteName}`;
|
|
384
|
+
if (this.isAnalyzeMode) {
|
|
385
|
+
this.analysisError = errorMessage;
|
|
386
|
+
this.unresolvedColumns.push(cteAlias ? `${cteAlias}.*` : "*");
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
throw new Error(errorMessage);
|
|
390
|
+
}
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// Process specific column references
|
|
395
|
+
let tableColumns = cteReferencedColumns.filter((column) => column !== "*");
|
|
396
|
+
// Validate column references against CTE columns in analyze mode
|
|
397
|
+
if (this.isAnalyzeMode) {
|
|
398
|
+
let availableColumns = cteColumns;
|
|
399
|
+
// Try to get columns from resolver first if available
|
|
400
|
+
if (this.tableColumnResolver) {
|
|
401
|
+
const resolvedColumns = this.tableColumnResolver(cteName);
|
|
402
|
+
if (resolvedColumns.length > 0) {
|
|
403
|
+
availableColumns = resolvedColumns;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// Only validate columns if we have available columns to validate against
|
|
407
|
+
// If allowWildcardWithoutResolver is true and we have no available columns,
|
|
408
|
+
// skip validation as the wildcard expansion couldn't be determined
|
|
409
|
+
if (availableColumns.length > 0) {
|
|
410
|
+
const invalidColumns = tableColumns.filter((column) => !availableColumns.includes(column));
|
|
411
|
+
if (invalidColumns.length > 0) {
|
|
412
|
+
this.unresolvedColumns.push(...invalidColumns);
|
|
413
|
+
if (!this.analysisError) {
|
|
414
|
+
this.analysisError = `Undefined column(s) found in CTE "${cteName}": ${invalidColumns.join(', ')}`;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
else if (!this.allowWildcardWithoutResolver) {
|
|
419
|
+
// Only report error if wildcards are not allowed without resolver
|
|
420
|
+
const invalidColumns = tableColumns;
|
|
421
|
+
if (invalidColumns.length > 0) {
|
|
422
|
+
this.unresolvedColumns.push(...invalidColumns);
|
|
423
|
+
if (!this.analysisError) {
|
|
424
|
+
this.analysisError = `Undefined column(s) found in CTE "${cteName}": ${invalidColumns.join(', ')}`;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
// Add the CTE schema
|
|
430
|
+
const tableSchema = new TableSchema(cteName, tableColumns);
|
|
431
|
+
this.tableSchemas.push(tableSchema);
|
|
432
|
+
}
|
|
433
|
+
getCTEColumns(cte) {
|
|
434
|
+
try {
|
|
435
|
+
if (cte.query instanceof SimpleSelectQuery_1.SimpleSelectQuery && cte.query.selectClause) {
|
|
436
|
+
return this.extractColumnsFromSelectItems(cte.query.selectClause.items, cte);
|
|
437
|
+
}
|
|
438
|
+
return this.extractColumnsUsingCollector(cte.query);
|
|
439
|
+
}
|
|
440
|
+
catch (error) {
|
|
441
|
+
return [];
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
extractColumnsFromSelectItems(selectItems, cte) {
|
|
445
|
+
var _a;
|
|
446
|
+
const columns = [];
|
|
447
|
+
for (const item of selectItems) {
|
|
448
|
+
if (item.value instanceof ValueComponent_1.ColumnReference) {
|
|
449
|
+
const columnName = ((_a = item.identifier) === null || _a === void 0 ? void 0 : _a.name) || item.value.column.name;
|
|
450
|
+
if (item.value.column.name === "*") {
|
|
451
|
+
const wildcardColumns = this.resolveWildcardInCTE(item.value, cte);
|
|
452
|
+
if (wildcardColumns === null) {
|
|
453
|
+
return []; // Wildcard couldn't be resolved
|
|
454
|
+
}
|
|
455
|
+
columns.push(...wildcardColumns);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
columns.push(columnName);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
else if (item.identifier) {
|
|
462
|
+
columns.push(item.identifier.name);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return this.removeDuplicates(columns);
|
|
466
|
+
}
|
|
467
|
+
resolveWildcardInCTE(columnRef, cte) {
|
|
468
|
+
const tableNamespace = columnRef.getNamespace();
|
|
469
|
+
if (tableNamespace) {
|
|
470
|
+
return this.resolveQualifiedWildcard(tableNamespace);
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
return this.resolveUnqualifiedWildcard(cte);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
resolveQualifiedWildcard(tableNamespace) {
|
|
477
|
+
const referencedCTE = this.commonTables.find(cte => cte.getSourceAliasName() === tableNamespace);
|
|
478
|
+
if (referencedCTE) {
|
|
479
|
+
const referencedColumns = this.getCTEColumns(referencedCTE);
|
|
480
|
+
if (referencedColumns.length > 0) {
|
|
481
|
+
return referencedColumns;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
return null;
|
|
485
|
+
}
|
|
486
|
+
resolveUnqualifiedWildcard(cte) {
|
|
487
|
+
if (!(cte.query instanceof SimpleSelectQuery_1.SimpleSelectQuery) || !cte.query.fromClause) {
|
|
488
|
+
return null;
|
|
489
|
+
}
|
|
490
|
+
const fromSource = cte.query.fromClause.source;
|
|
491
|
+
if (fromSource.datasource instanceof Clause_1.TableSource) {
|
|
492
|
+
return this.resolveTableWildcard(fromSource.datasource.table.name);
|
|
493
|
+
}
|
|
494
|
+
else if (fromSource.datasource instanceof Clause_1.SubQuerySource) {
|
|
495
|
+
return null; // Too complex to resolve
|
|
496
|
+
}
|
|
497
|
+
return null;
|
|
498
|
+
}
|
|
499
|
+
resolveTableWildcard(tableName) {
|
|
500
|
+
if (this.tableColumnResolver) {
|
|
501
|
+
const resolvedColumns = this.tableColumnResolver(tableName);
|
|
502
|
+
if (resolvedColumns.length > 0) {
|
|
503
|
+
return resolvedColumns;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
// If allowWildcardWithoutResolver is true, return null to indicate unknown columns
|
|
507
|
+
return this.allowWildcardWithoutResolver ? null : null;
|
|
508
|
+
}
|
|
509
|
+
extractColumnsUsingCollector(query) {
|
|
510
|
+
const columnCollector = new SelectableColumnCollector_1.SelectableColumnCollector(null, true, SelectableColumnCollector_1.DuplicateDetectionMode.FullName);
|
|
511
|
+
const columns = columnCollector.collect(query);
|
|
512
|
+
return columns
|
|
513
|
+
.filter((column) => column.value instanceof ValueComponent_1.ColumnReference)
|
|
514
|
+
.map(column => column.value)
|
|
515
|
+
.map(columnRef => columnRef.column.name)
|
|
516
|
+
.filter((name, index, array) => array.indexOf(name) === index);
|
|
517
|
+
}
|
|
518
|
+
removeDuplicates(columns) {
|
|
519
|
+
return columns.filter((name, index, array) => array.indexOf(name) === index);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
exports.SchemaCollector = SchemaCollector;
|
|
523
|
+
//# sourceMappingURL=SchemaCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaCollector.js","sourceRoot":"","sources":["../../src/transformers/SchemaCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectResultSelectConverter = void 0;
|
|
4
|
+
const SimpleSelectQuery_1 = require("../models/SimpleSelectQuery");
|
|
5
|
+
const FixtureCteBuilder_1 = require("./FixtureCteBuilder");
|
|
6
|
+
const TableSourceCollector_1 = require("./TableSourceCollector");
|
|
7
|
+
class SelectResultSelectConverter {
|
|
8
|
+
static toSelectQuery(query, options) {
|
|
9
|
+
var _a;
|
|
10
|
+
const fixtureTables = (_a = options === null || options === void 0 ? void 0 : options.fixtureTables) !== null && _a !== void 0 ? _a : [];
|
|
11
|
+
if (fixtureTables.length === 0) {
|
|
12
|
+
return query;
|
|
13
|
+
}
|
|
14
|
+
const collector = new TableSourceCollector_1.TableSourceCollector(false);
|
|
15
|
+
const sources = collector.collect(query);
|
|
16
|
+
const referencedTables = new Set();
|
|
17
|
+
sources.forEach(s => referencedTables.add(s.getSourceName().toLowerCase()));
|
|
18
|
+
const neededFixtures = fixtureTables.filter(f => referencedTables.has(f.tableName.toLowerCase()));
|
|
19
|
+
if (neededFixtures.length === 0) {
|
|
20
|
+
return query;
|
|
21
|
+
}
|
|
22
|
+
const fixtureCtes = FixtureCteBuilder_1.FixtureCteBuilder.buildFixtures(neededFixtures);
|
|
23
|
+
if (query instanceof SimpleSelectQuery_1.SimpleSelectQuery) {
|
|
24
|
+
if (!query.withClause) {
|
|
25
|
+
query.appendWith(fixtureCtes);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Prepend fixtures to existing CTEs
|
|
29
|
+
query.withClause.tables = [...fixtureCtes, ...query.withClause.tables];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return query;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.SelectResultSelectConverter = SelectResultSelectConverter;
|
|
36
|
+
//# sourceMappingURL=SelectResultSelectConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectResultSelectConverter.js","sourceRoot":"","sources":["../../src/transformers/SelectResultSelectConverter.ts"],"names":[],"mappings":";;;AACA,mEAAgE;AAChE,2DAAgF;AAChF,iEAA8D;AAQ9D,MAAa,2BAA2B;IAC7B,MAAM,CAAC,aAAa,CAAC,KAAkB,EAAE,OAAmC;;QAC/E,MAAM,aAAa,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,EAAE,CAAC;QACnD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,2CAAoB,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC3C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAE5E,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAElG,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,WAAW,GAAG,qCAAiB,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAEpE,IAAI,KAAK,YAAY,qCAAiB,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gBACpB,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACJ,oCAAoC;gBACpC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AA/BD,kEA+BC"}
|