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,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Central schema management utility for rawsql-ts.
|
|
4
|
+
* Converts user-defined table definitions into resolvers and JSON mappings consumed by collectors and builders.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const manager = new SchemaManager({
|
|
9
|
+
* users: {
|
|
10
|
+
* name: 'users',
|
|
11
|
+
* columns: {
|
|
12
|
+
* id: { name: 'id', isPrimaryKey: true },
|
|
13
|
+
* email: { name: 'email' }
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* const resolver = manager.createTableColumnResolver();
|
|
19
|
+
* const collector = new SchemaCollector(resolver);
|
|
20
|
+
* const schemas = collector.collect(SelectQueryParser.parse('SELECT * FROM users'));
|
|
21
|
+
* ```
|
|
22
|
+
* Related tests: packages/core/tests/transformers/SchemaCollector.test.ts
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.SchemaManager = void 0;
|
|
26
|
+
exports.createSchemaManager = createSchemaManager;
|
|
27
|
+
exports.createTableColumnResolver = createTableColumnResolver;
|
|
28
|
+
exports.createJsonMappingFromSchema = createJsonMappingFromSchema;
|
|
29
|
+
// === Schema Manager Class ===
|
|
30
|
+
/**
|
|
31
|
+
* Central schema management utility for rawsql-ts
|
|
32
|
+
* Converts user-defined schemas to various internal formats
|
|
33
|
+
*/
|
|
34
|
+
class SchemaManager {
|
|
35
|
+
constructor(schemas) {
|
|
36
|
+
this.schemas = schemas;
|
|
37
|
+
this.validateSchemas();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate schema definitions for consistency
|
|
41
|
+
* Ensures each table has a primary key (required for UPDATE/DELETE operations)
|
|
42
|
+
* and validates relationship references
|
|
43
|
+
*/
|
|
44
|
+
validateSchemas() {
|
|
45
|
+
const tableNames = Object.keys(this.schemas);
|
|
46
|
+
const errors = [];
|
|
47
|
+
// Validate each table
|
|
48
|
+
Object.entries(this.schemas).forEach(([tableName, table]) => {
|
|
49
|
+
var _a;
|
|
50
|
+
// Check primary key exists (required for UPDATE/DELETE WHERE conditions)
|
|
51
|
+
const primaryKeys = Object.entries(table.columns)
|
|
52
|
+
.filter(([_, col]) => col.isPrimaryKey)
|
|
53
|
+
.map(([name, _]) => name);
|
|
54
|
+
if (primaryKeys.length === 0) {
|
|
55
|
+
errors.push(`Table '${tableName}' has no primary key defined`);
|
|
56
|
+
}
|
|
57
|
+
// Validate foreign key references
|
|
58
|
+
(_a = table.relationships) === null || _a === void 0 ? void 0 : _a.forEach(rel => {
|
|
59
|
+
if (!tableNames.includes(rel.table)) {
|
|
60
|
+
errors.push(`Table '${tableName}' references unknown table '${rel.table}' in relationship`);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
if (errors.length > 0) {
|
|
65
|
+
throw new Error(`Schema validation failed:\\n${errors.join('\\n')}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get table column names for SqlParamInjector TableColumnResolver
|
|
70
|
+
* @param tableName Name of the table
|
|
71
|
+
* @returns Array of column names
|
|
72
|
+
*/
|
|
73
|
+
getTableColumns(tableName) {
|
|
74
|
+
const table = this.schemas[tableName];
|
|
75
|
+
if (!table) {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
return Object.keys(table.columns);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create TableColumnResolver function for SqlParamInjector
|
|
82
|
+
* @returns Function compatible with SqlParamInjector
|
|
83
|
+
*/
|
|
84
|
+
createTableColumnResolver() {
|
|
85
|
+
return (tableName) => this.getTableColumns(tableName);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate JSON mapping configuration for PostgresJsonQueryBuilder
|
|
89
|
+
* @param rootTableName Root table for the JSON structure
|
|
90
|
+
* @returns JSON mapping configuration
|
|
91
|
+
*/
|
|
92
|
+
createJsonMapping(rootTableName) {
|
|
93
|
+
var _a;
|
|
94
|
+
const rootTable = this.schemas[rootTableName];
|
|
95
|
+
if (!rootTable) {
|
|
96
|
+
throw new Error(`Table '${rootTableName}' not found in schema registry`);
|
|
97
|
+
}
|
|
98
|
+
// Build root entity columns mapping
|
|
99
|
+
const rootColumns = {};
|
|
100
|
+
Object.entries(rootTable.columns).forEach(([columnName, column]) => {
|
|
101
|
+
rootColumns[columnName] = column.jsonAlias || column.name;
|
|
102
|
+
});
|
|
103
|
+
// Build nested entities from relationships
|
|
104
|
+
const nestedEntities = [];
|
|
105
|
+
(_a = rootTable.relationships) === null || _a === void 0 ? void 0 : _a.forEach(rel => {
|
|
106
|
+
const relatedTable = this.schemas[rel.table];
|
|
107
|
+
if (!relatedTable) {
|
|
108
|
+
throw new Error(`Related table '${rel.table}' not found in schema registry`);
|
|
109
|
+
}
|
|
110
|
+
// Build columns mapping for related table
|
|
111
|
+
const relatedColumns = {};
|
|
112
|
+
Object.entries(relatedTable.columns).forEach(([columnName, column]) => {
|
|
113
|
+
relatedColumns[columnName] = column.jsonAlias || column.name;
|
|
114
|
+
});
|
|
115
|
+
// Determine relationship type for JSON builder
|
|
116
|
+
const relationshipType = rel.type;
|
|
117
|
+
nestedEntities.push({
|
|
118
|
+
id: rel.propertyName,
|
|
119
|
+
name: relatedTable.displayName || rel.table,
|
|
120
|
+
parentId: rootTableName,
|
|
121
|
+
propertyName: rel.propertyName,
|
|
122
|
+
relationshipType: relationshipType,
|
|
123
|
+
columns: relatedColumns
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
return {
|
|
127
|
+
rootName: rootTableName,
|
|
128
|
+
rootEntity: {
|
|
129
|
+
id: rootTableName,
|
|
130
|
+
name: rootTable.displayName || rootTableName,
|
|
131
|
+
columns: rootColumns
|
|
132
|
+
},
|
|
133
|
+
nestedEntities,
|
|
134
|
+
resultFormat: "single"
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get all table names in the schema
|
|
139
|
+
* @returns Array of table names
|
|
140
|
+
*/
|
|
141
|
+
getTableNames() {
|
|
142
|
+
return Object.keys(this.schemas);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get table definition by name
|
|
146
|
+
* @param tableName Name of the table
|
|
147
|
+
* @returns Table definition or undefined
|
|
148
|
+
*/
|
|
149
|
+
getTable(tableName) {
|
|
150
|
+
return this.schemas[tableName];
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get primary key column name for a table
|
|
154
|
+
* Used by QueryBuilder.buildUpdateQuery for WHERE clause conditions
|
|
155
|
+
* @param tableName Name of the table
|
|
156
|
+
* @returns Primary key column name or undefined
|
|
157
|
+
*/
|
|
158
|
+
getPrimaryKey(tableName) {
|
|
159
|
+
const table = this.schemas[tableName];
|
|
160
|
+
if (!table)
|
|
161
|
+
return undefined;
|
|
162
|
+
const primaryKeyEntry = Object.entries(table.columns)
|
|
163
|
+
.find(([_, col]) => col.isPrimaryKey);
|
|
164
|
+
return primaryKeyEntry ? primaryKeyEntry[0] : undefined;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get foreign key relationships for a table
|
|
168
|
+
* @param tableName Name of the table
|
|
169
|
+
* @returns Array of foreign key relationships
|
|
170
|
+
*/
|
|
171
|
+
getForeignKeys(tableName) {
|
|
172
|
+
const table = this.schemas[tableName];
|
|
173
|
+
if (!table)
|
|
174
|
+
return [];
|
|
175
|
+
const foreignKeys = [];
|
|
176
|
+
Object.entries(table.columns).forEach(([columnName, column]) => {
|
|
177
|
+
if (column.foreignKey) {
|
|
178
|
+
foreignKeys.push({
|
|
179
|
+
column: columnName,
|
|
180
|
+
referencedTable: column.foreignKey.table,
|
|
181
|
+
referencedColumn: column.foreignKey.column
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
return foreignKeys;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.SchemaManager = SchemaManager;
|
|
189
|
+
// === Convenience Functions ===
|
|
190
|
+
/**
|
|
191
|
+
* Create a SchemaManager instance from schema definitions
|
|
192
|
+
* @param schemas Schema registry object
|
|
193
|
+
* @returns SchemaManager instance
|
|
194
|
+
*/
|
|
195
|
+
function createSchemaManager(schemas) {
|
|
196
|
+
return new SchemaManager(schemas);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Create TableColumnResolver function from schema definitions
|
|
200
|
+
* @param schemas Schema registry object
|
|
201
|
+
* @returns TableColumnResolver function for SqlParamInjector
|
|
202
|
+
*/
|
|
203
|
+
function createTableColumnResolver(schemas) {
|
|
204
|
+
const manager = new SchemaManager(schemas);
|
|
205
|
+
return manager.createTableColumnResolver();
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Create JSON mapping from schema definitions
|
|
209
|
+
* @param schemas Schema registry object
|
|
210
|
+
* @param rootTableName Root table name
|
|
211
|
+
* @returns JSON mapping for PostgresJsonQueryBuilder
|
|
212
|
+
*/
|
|
213
|
+
function createJsonMappingFromSchema(schemas, rootTableName) {
|
|
214
|
+
const manager = new SchemaManager(schemas);
|
|
215
|
+
return manager.createJsonMapping(rootTableName);
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=SchemaManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaManager.js","sourceRoot":"","sources":["../../src/utils/SchemaManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScopeResolver = void 0;
|
|
4
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
|
5
|
+
const Clause_1 = require("../models/Clause");
|
|
6
|
+
const CTECollector_1 = require("../transformers/CTECollector");
|
|
7
|
+
const TextPositionUtils_1 = require("./TextPositionUtils");
|
|
8
|
+
/**
|
|
9
|
+
* Resolves scope information at cursor positions for SQL IntelliSense
|
|
10
|
+
*
|
|
11
|
+
* Provides comprehensive scope analysis including table availability, CTE resolution,
|
|
12
|
+
* and column visibility for intelligent code completion suggestions.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const sql = `
|
|
17
|
+
* WITH users AS (SELECT id, name FROM accounts)
|
|
18
|
+
* SELECT u.name FROM users u
|
|
19
|
+
* LEFT JOIN orders o ON u.id = o.user_id
|
|
20
|
+
* WHERE u.|
|
|
21
|
+
* `;
|
|
22
|
+
* const scope = ScopeResolver.resolveAt(sql, { line: 4, column: 12 });
|
|
23
|
+
*
|
|
24
|
+
* console.log(scope.availableTables); // [{ name: 'users', alias: 'u' }, { name: 'orders', alias: 'o' }]
|
|
25
|
+
* console.log(scope.availableCTEs); // [{ name: 'users', columns: ['id', 'name'] }]
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
class ScopeResolver {
|
|
29
|
+
/**
|
|
30
|
+
* Resolve scope information at the specified cursor position
|
|
31
|
+
*
|
|
32
|
+
* @param sql - SQL text to analyze
|
|
33
|
+
* @param cursorPosition - Character position of cursor (0-based)
|
|
34
|
+
* @returns Complete scope information
|
|
35
|
+
*/
|
|
36
|
+
static resolve(sql, cursorPosition) {
|
|
37
|
+
// Simplified for suggestion-only focus - return basic scope information
|
|
38
|
+
// Complex SQL parsing removed to avoid issues with incomplete SQL syntax
|
|
39
|
+
return this.createEmptyScope();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve scope information at line/column position
|
|
43
|
+
*
|
|
44
|
+
* @param sql - SQL text to analyze
|
|
45
|
+
* @param position - Line and column position (1-based)
|
|
46
|
+
* @returns Complete scope information
|
|
47
|
+
*/
|
|
48
|
+
static resolveAt(sql, position) {
|
|
49
|
+
const charOffset = TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(sql, position);
|
|
50
|
+
if (charOffset === -1) {
|
|
51
|
+
return this.createEmptyScope();
|
|
52
|
+
}
|
|
53
|
+
return this.resolve(sql, charOffset);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get available columns for a specific table or alias
|
|
57
|
+
*
|
|
58
|
+
* @param sql - SQL text containing the query
|
|
59
|
+
* @param cursorPosition - Cursor position for scope resolution
|
|
60
|
+
* @param tableOrAlias - Table name or alias to get columns for
|
|
61
|
+
* @returns Array of available columns for the specified table
|
|
62
|
+
*/
|
|
63
|
+
static getColumnsForTable(sql, cursorPosition, tableOrAlias) {
|
|
64
|
+
const scope = this.resolve(sql, cursorPosition);
|
|
65
|
+
// Find matching table
|
|
66
|
+
const table = scope.availableTables.find(t => t.name === tableOrAlias || t.alias === tableOrAlias);
|
|
67
|
+
if (!table) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
// Return columns for this table
|
|
71
|
+
return scope.visibleColumns.filter(col => col.tableName === table.name ||
|
|
72
|
+
(table.alias && col.tableAlias === table.alias));
|
|
73
|
+
}
|
|
74
|
+
static analyzeScopeFromQuery(query) {
|
|
75
|
+
const scope = {
|
|
76
|
+
availableTables: [],
|
|
77
|
+
availableCTEs: [],
|
|
78
|
+
subqueryLevel: 0,
|
|
79
|
+
visibleColumns: [],
|
|
80
|
+
currentQuery: query,
|
|
81
|
+
parentQueries: []
|
|
82
|
+
};
|
|
83
|
+
if (query instanceof SelectQuery_1.SimpleSelectQuery) {
|
|
84
|
+
// Collect CTEs
|
|
85
|
+
scope.availableCTEs = this.collectCTEs(query);
|
|
86
|
+
// Collect tables from FROM and JOINs
|
|
87
|
+
scope.availableTables = this.collectTablesFromQuery(query);
|
|
88
|
+
// Collect visible columns
|
|
89
|
+
scope.visibleColumns = this.collectVisibleColumns(scope.availableTables, scope.availableCTEs);
|
|
90
|
+
}
|
|
91
|
+
else if (query instanceof SelectQuery_1.BinarySelectQuery) {
|
|
92
|
+
// For UNION queries, analyze both sides
|
|
93
|
+
const leftScope = this.analyzeScopeFromQuery(query.left);
|
|
94
|
+
const rightScope = this.analyzeScopeFromQuery(query.right);
|
|
95
|
+
// Merge scopes (tables from both sides available)
|
|
96
|
+
scope.availableTables = [...leftScope.availableTables, ...rightScope.availableTables];
|
|
97
|
+
scope.availableCTEs = [...leftScope.availableCTEs, ...rightScope.availableCTEs];
|
|
98
|
+
scope.visibleColumns = [...leftScope.visibleColumns, ...rightScope.visibleColumns];
|
|
99
|
+
}
|
|
100
|
+
return scope;
|
|
101
|
+
}
|
|
102
|
+
static collectCTEs(query) {
|
|
103
|
+
const ctes = [];
|
|
104
|
+
if (query.withClause) {
|
|
105
|
+
const cteCollector = new CTECollector_1.CTECollector();
|
|
106
|
+
const collectedCTEs = cteCollector.collect(query);
|
|
107
|
+
for (const cte of collectedCTEs) {
|
|
108
|
+
ctes.push({
|
|
109
|
+
name: cte.getSourceAliasName(),
|
|
110
|
+
query: cte.query,
|
|
111
|
+
columns: this.extractCTEColumns(cte.query),
|
|
112
|
+
materialized: cte.materialized || false
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return ctes;
|
|
117
|
+
}
|
|
118
|
+
static collectTablesFromQuery(query) {
|
|
119
|
+
const tables = [];
|
|
120
|
+
// Collect from FROM clause
|
|
121
|
+
if (query.fromClause) {
|
|
122
|
+
const fromTables = this.extractTablesFromFromClause(query.fromClause);
|
|
123
|
+
tables.push(...fromTables);
|
|
124
|
+
}
|
|
125
|
+
return tables;
|
|
126
|
+
}
|
|
127
|
+
static extractTablesFromFromClause(fromClause) {
|
|
128
|
+
var _a, _b, _c, _d;
|
|
129
|
+
const tables = [];
|
|
130
|
+
// Extract main source table
|
|
131
|
+
if (fromClause.source.datasource instanceof Clause_1.TableSource) {
|
|
132
|
+
const table = {
|
|
133
|
+
name: this.extractTableName(fromClause.source.datasource.qualifiedName),
|
|
134
|
+
alias: (_a = fromClause.source.aliasExpression) === null || _a === void 0 ? void 0 : _a.table.name,
|
|
135
|
+
schema: this.extractSchemaName(fromClause.source.datasource.qualifiedName),
|
|
136
|
+
fullName: this.getQualifiedNameString(fromClause.source.datasource.qualifiedName),
|
|
137
|
+
sourceType: 'table'
|
|
138
|
+
};
|
|
139
|
+
tables.push(table);
|
|
140
|
+
}
|
|
141
|
+
else if (fromClause.source.datasource instanceof Clause_1.SubQuerySource) {
|
|
142
|
+
const table = {
|
|
143
|
+
name: ((_b = fromClause.source.aliasExpression) === null || _b === void 0 ? void 0 : _b.table.name) || 'subquery',
|
|
144
|
+
alias: (_c = fromClause.source.aliasExpression) === null || _c === void 0 ? void 0 : _c.table.name,
|
|
145
|
+
fullName: ((_d = fromClause.source.aliasExpression) === null || _d === void 0 ? void 0 : _d.table.name) || 'subquery',
|
|
146
|
+
sourceType: 'subquery',
|
|
147
|
+
originalQuery: fromClause.source.datasource.query
|
|
148
|
+
};
|
|
149
|
+
tables.push(table);
|
|
150
|
+
}
|
|
151
|
+
// Collect from JOINs
|
|
152
|
+
if (fromClause.joins) {
|
|
153
|
+
for (const join of fromClause.joins) {
|
|
154
|
+
const joinTables = this.extractTablesFromJoin(join);
|
|
155
|
+
tables.push(...joinTables);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return tables;
|
|
159
|
+
}
|
|
160
|
+
static extractTablesFromJoin(join) {
|
|
161
|
+
var _a, _b, _c, _d;
|
|
162
|
+
const tables = [];
|
|
163
|
+
if (join.source.datasource instanceof Clause_1.TableSource) {
|
|
164
|
+
const table = {
|
|
165
|
+
name: this.extractTableName(join.source.datasource.qualifiedName),
|
|
166
|
+
alias: (_a = join.source.aliasExpression) === null || _a === void 0 ? void 0 : _a.table.name,
|
|
167
|
+
schema: this.extractSchemaName(join.source.datasource.qualifiedName),
|
|
168
|
+
fullName: this.getQualifiedNameString(join.source.datasource.qualifiedName),
|
|
169
|
+
sourceType: 'table'
|
|
170
|
+
};
|
|
171
|
+
tables.push(table);
|
|
172
|
+
}
|
|
173
|
+
else if (join.source.datasource instanceof Clause_1.SubQuerySource) {
|
|
174
|
+
const table = {
|
|
175
|
+
name: ((_b = join.source.aliasExpression) === null || _b === void 0 ? void 0 : _b.table.name) || 'subquery',
|
|
176
|
+
alias: (_c = join.source.aliasExpression) === null || _c === void 0 ? void 0 : _c.table.name,
|
|
177
|
+
fullName: ((_d = join.source.aliasExpression) === null || _d === void 0 ? void 0 : _d.table.name) || 'subquery',
|
|
178
|
+
sourceType: 'subquery',
|
|
179
|
+
originalQuery: join.source.datasource.query
|
|
180
|
+
};
|
|
181
|
+
tables.push(table);
|
|
182
|
+
}
|
|
183
|
+
return tables;
|
|
184
|
+
}
|
|
185
|
+
static getQualifiedNameString(qualifiedName) {
|
|
186
|
+
// Use the existing method from QualifiedName to get the string representation
|
|
187
|
+
return qualifiedName.toString();
|
|
188
|
+
}
|
|
189
|
+
static extractTableName(qualifiedName) {
|
|
190
|
+
const fullName = this.getQualifiedNameString(qualifiedName);
|
|
191
|
+
const parts = fullName.split('.');
|
|
192
|
+
return parts[parts.length - 1]; // Last part is table name
|
|
193
|
+
}
|
|
194
|
+
static extractSchemaName(qualifiedName) {
|
|
195
|
+
const fullName = this.getQualifiedNameString(qualifiedName);
|
|
196
|
+
const parts = fullName.split('.');
|
|
197
|
+
return parts.length > 1 ? parts[parts.length - 2] : undefined;
|
|
198
|
+
}
|
|
199
|
+
static extractCTEColumns(query) {
|
|
200
|
+
// Try to extract column names from CTE SELECT clause
|
|
201
|
+
try {
|
|
202
|
+
if (query instanceof SelectQuery_1.SimpleSelectQuery && query.selectClause) {
|
|
203
|
+
const columns = [];
|
|
204
|
+
for (const item of query.selectClause.items) {
|
|
205
|
+
// Use alias if available, otherwise try to extract from expression
|
|
206
|
+
if (item.identifier) {
|
|
207
|
+
columns.push(item.identifier.name);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// Try to extract column name from expression
|
|
211
|
+
const columnName = this.extractColumnNameFromExpression(item.value);
|
|
212
|
+
if (columnName) {
|
|
213
|
+
columns.push(columnName);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return columns;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
// If extraction fails, return undefined
|
|
222
|
+
}
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
static extractColumnNameFromExpression(expression) {
|
|
226
|
+
// Simple extraction - can be enhanced based on ValueComponent types
|
|
227
|
+
if (expression && typeof expression === 'object' && 'value' in expression) {
|
|
228
|
+
return expression.value;
|
|
229
|
+
}
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
static collectVisibleColumns(tables, ctes) {
|
|
233
|
+
const columns = [];
|
|
234
|
+
// Add columns from CTEs
|
|
235
|
+
for (const cte of ctes) {
|
|
236
|
+
if (cte.columns) {
|
|
237
|
+
for (const columnName of cte.columns) {
|
|
238
|
+
columns.push({
|
|
239
|
+
name: columnName,
|
|
240
|
+
tableName: cte.name,
|
|
241
|
+
fullReference: `${cte.name}.${columnName}`
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// For regular tables, we would need schema information to determine columns
|
|
247
|
+
// This is a placeholder - in practice, this would integrate with database metadata
|
|
248
|
+
for (const table of tables) {
|
|
249
|
+
if (table.sourceType === 'table') {
|
|
250
|
+
// Placeholder - would query database schema
|
|
251
|
+
columns.push({
|
|
252
|
+
name: '*',
|
|
253
|
+
tableName: table.name,
|
|
254
|
+
tableAlias: table.alias,
|
|
255
|
+
fullReference: `${table.alias || table.name}.*`
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return columns;
|
|
260
|
+
}
|
|
261
|
+
static createEmptyScope() {
|
|
262
|
+
return {
|
|
263
|
+
availableTables: [],
|
|
264
|
+
availableCTEs: [],
|
|
265
|
+
subqueryLevel: 0,
|
|
266
|
+
visibleColumns: [],
|
|
267
|
+
parentQueries: []
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
exports.ScopeResolver = ScopeResolver;
|
|
272
|
+
//# sourceMappingURL=ScopeResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScopeResolver.js","sourceRoot":"","sources":["../../src/utils/ScopeResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectQueryWithClauseHelper = void 0;
|
|
4
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
|
5
|
+
/**
|
|
6
|
+
* Utility to manage WITH clause placement for statements that promote the
|
|
7
|
+
* CTE definitions outside of the SELECT body (for example, INSERT).
|
|
8
|
+
*/
|
|
9
|
+
class SelectQueryWithClauseHelper {
|
|
10
|
+
static getWithClause(selectQuery) {
|
|
11
|
+
const owner = this.findClauseOwner(selectQuery);
|
|
12
|
+
if (!owner) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return owner.withClause;
|
|
16
|
+
}
|
|
17
|
+
static setWithClause(selectQuery, withClause) {
|
|
18
|
+
const owner = this.findClauseOwner(selectQuery);
|
|
19
|
+
if (!owner) {
|
|
20
|
+
throw new Error("Cannot attach WITH clause to the provided select query.");
|
|
21
|
+
}
|
|
22
|
+
owner.withClause = withClause;
|
|
23
|
+
}
|
|
24
|
+
static detachWithClause(selectQuery) {
|
|
25
|
+
const owner = this.findClauseOwner(selectQuery);
|
|
26
|
+
if (!owner) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const clause = owner.withClause;
|
|
30
|
+
owner.withClause = null;
|
|
31
|
+
return clause;
|
|
32
|
+
}
|
|
33
|
+
static findClauseOwner(selectQuery) {
|
|
34
|
+
if (!selectQuery) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
if (selectQuery instanceof SelectQuery_1.SimpleSelectQuery || selectQuery instanceof SelectQuery_1.ValuesQuery) {
|
|
38
|
+
return selectQuery;
|
|
39
|
+
}
|
|
40
|
+
if (selectQuery instanceof SelectQuery_1.BinarySelectQuery) {
|
|
41
|
+
return this.findClauseOwner(selectQuery.left);
|
|
42
|
+
}
|
|
43
|
+
throw new Error("Unsupported select query type for WITH clause management.");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.SelectQueryWithClauseHelper = SelectQueryWithClauseHelper;
|
|
47
|
+
//# sourceMappingURL=SelectQueryWithClauseHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectQueryWithClauseHelper.js","sourceRoot":"","sources":["../../src/utils/SelectQueryWithClauseHelper.ts"],"names":[],"mappings":";;;AAAA,uDAAuG;AAGvG;;;GAGG;AACH,MAAa,2BAA2B;IAC7B,MAAM,CAAC,aAAa,CAAC,WAA+B;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC,UAAU,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,WAAwB,EAAE,UAA6B;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC/E,CAAC;QACD,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,WAAwB;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;QAChC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QACxB,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,WAA+B;QAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,WAAW,YAAY,+BAAiB,IAAI,WAAW,YAAY,yBAAW,EAAE,CAAC;YACjF,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,IAAI,WAAW,YAAY,+BAAiB,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IACjF,CAAC;CACJ;AAvCD,kEAuCC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SqlSchemaValidator = void 0;
|
|
4
|
+
const SchemaCollector_1 = require("../transformers/SchemaCollector");
|
|
5
|
+
const SelectQueryParser_1 = require("../parsers/SelectQueryParser");
|
|
6
|
+
/**
|
|
7
|
+
* Validates SQL query structures against known tables and columns.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const tables = [
|
|
12
|
+
* { name: 'users', columns: ['id', 'email'] }
|
|
13
|
+
* ];
|
|
14
|
+
*
|
|
15
|
+
* SqlSchemaValidator.validate('SELECT id FROM users', tables);
|
|
16
|
+
* ```
|
|
17
|
+
* Related tests: packages/core/tests/utils/SqlSchemaValidator.validate.test.ts
|
|
18
|
+
*/
|
|
19
|
+
class SqlSchemaValidator {
|
|
20
|
+
/**
|
|
21
|
+
* Validates a SQL query structure against a provided TableColumnResolver or TableSchema array.
|
|
22
|
+
* @param sql The SQL query structure to validate, can be a SQL string or a SqlComponent.
|
|
23
|
+
* @param tableResolver The TableColumnResolver or TableSchema array to validate against.
|
|
24
|
+
* @throws Error if the query contains undefined tables or columns.
|
|
25
|
+
*/
|
|
26
|
+
static validate(sql, tableResolver) {
|
|
27
|
+
const sqlComponent = typeof sql === 'string' ? SelectQueryParser_1.SelectQueryParser.parse(sql) : sql;
|
|
28
|
+
// Convert TableSchema[] to a resolver function if necessary
|
|
29
|
+
const resolver = Array.isArray(tableResolver)
|
|
30
|
+
? (tableName) => {
|
|
31
|
+
const schema = tableResolver.find((t) => t.name === tableName);
|
|
32
|
+
return schema ? schema.columns : [];
|
|
33
|
+
}
|
|
34
|
+
: tableResolver;
|
|
35
|
+
const schemaCollector = new SchemaCollector_1.SchemaCollector(resolver);
|
|
36
|
+
const tableSchemas = schemaCollector.collect(sqlComponent);
|
|
37
|
+
const errors = [];
|
|
38
|
+
for (const tableSchema of tableSchemas) {
|
|
39
|
+
const resolvedColumns = resolver(tableSchema.name);
|
|
40
|
+
if (resolvedColumns.length === 0) {
|
|
41
|
+
errors.push(`Table '${tableSchema.name}' is not defined.`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const undefinedColumns = tableSchema.columns.filter(column => !resolvedColumns.includes(column));
|
|
45
|
+
if (undefinedColumns.length > 0) {
|
|
46
|
+
errors.push(`Table '${tableSchema.name}' contains undefined columns: ${undefinedColumns.join(', ')}.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (errors.length > 0) {
|
|
50
|
+
throw new Error(errors.join('\n'));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.SqlSchemaValidator = SqlSchemaValidator;
|
|
55
|
+
//# sourceMappingURL=SqlSchemaValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlSchemaValidator.js","sourceRoot":"","sources":["../../src/utils/SqlSchemaValidator.ts"],"names":[],"mappings":";;;AAAA,qEAA+E;AAG/E,oEAAiE;AAEjE;;;;;;;;;;;;GAYG;AAEH,MAAa,kBAAkB;IAC3B;;;;;OAKG;IACI,MAAM,CAAC,QAAQ,CAClB,GAA0B,EAC1B,aAAkD;QAElD,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,qCAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAElF,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;YACzC,CAAC,CAAC,CAAC,SAAiB,EAAE,EAAE;gBACpB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;gBAC/D,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,CAAC;YACD,CAAC,CAAC,aAAa,CAAC;QAEpB,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACrC,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,IAAI,mBAAmB,CAAC,CAAC;gBAC3D,SAAS;YACb,CAAC;YAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACjG,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,CACP,UAAU,WAAW,CAAC,IAAI,iCAAiC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5F,CAAC;YACN,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;CACJ;AA5CD,gDA4CC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tableNameVariants = exports.normalizeTableName = void 0;
|
|
4
|
+
const FullNameParser_1 = require("../parsers/FullNameParser");
|
|
5
|
+
/**
|
|
6
|
+
* Parses a table name through the SQL parser so all supported identifier
|
|
7
|
+
* syntaxes (quoted, bracketed, backtick) converge to a consistent key.
|
|
8
|
+
*/
|
|
9
|
+
const normalizeTableName = (tableName) => {
|
|
10
|
+
var _a;
|
|
11
|
+
// Parse with the same rules as the main AST to avoid regex-based drift.
|
|
12
|
+
const parsed = FullNameParser_1.FullNameParser.parse(tableName);
|
|
13
|
+
const namespaces = (_a = parsed.namespaces) !== null && _a !== void 0 ? _a : [];
|
|
14
|
+
const parts = [...namespaces, parsed.name.name];
|
|
15
|
+
return parts.join('.').toLowerCase();
|
|
16
|
+
};
|
|
17
|
+
exports.normalizeTableName = normalizeTableName;
|
|
18
|
+
/**
|
|
19
|
+
* For schema-sensitive matching we no longer drop qualifiers; a single
|
|
20
|
+
* normalized key is sufficient and safer than heuristic variants.
|
|
21
|
+
*/
|
|
22
|
+
const tableNameVariants = (tableName) => {
|
|
23
|
+
var _a;
|
|
24
|
+
const parsed = FullNameParser_1.FullNameParser.parse(tableName);
|
|
25
|
+
const namespaces = (_a = parsed.namespaces) !== null && _a !== void 0 ? _a : [];
|
|
26
|
+
const normalized = (0, exports.normalizeTableName)(tableName);
|
|
27
|
+
// Return the parsed-normalized key alone when no schema qualifier is present.
|
|
28
|
+
if (namespaces.length === 0) {
|
|
29
|
+
return [normalized];
|
|
30
|
+
}
|
|
31
|
+
// DONOT return an unqualified variant; schema-qualified normalization is required to avoid mixing distinct tables.
|
|
32
|
+
return [normalized];
|
|
33
|
+
};
|
|
34
|
+
exports.tableNameVariants = tableNameVariants;
|
|
35
|
+
//# sourceMappingURL=TableNameUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableNameUtils.js","sourceRoot":"","sources":["../../src/utils/TableNameUtils.ts"],"names":[],"mappings":";;;AAAA,8DAA2D;AAE3D;;;GAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAU,EAAE;;IAC9D,wEAAwE;IACxE,MAAM,MAAM,GAAG,+BAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAA,MAAM,CAAC,UAAU,mCAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACvC,CAAC,CAAC;AANW,QAAA,kBAAkB,sBAM7B;AAEF;;;GAGG;AACI,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAY,EAAE;;IAC/D,MAAM,MAAM,GAAG,+BAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAA,MAAM,CAAC,UAAU,mCAAI,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAA,0BAAkB,EAAC,SAAS,CAAC,CAAC;IACjD,8EAA8E;IAC9E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IAED,mHAAmH;IACnH,OAAO,CAAC,UAAU,CAAC,CAAC;AACtB,CAAC,CAAC;AAXW,QAAA,iBAAiB,qBAW5B"}
|