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,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LexemeCursor = void 0;
|
|
4
|
+
const Lexeme_1 = require("../models/Lexeme");
|
|
5
|
+
const stringUtils_1 = require("./stringUtils");
|
|
6
|
+
/**
|
|
7
|
+
* Utility class for cursor-to-lexeme mapping in SQL text.
|
|
8
|
+
*
|
|
9
|
+
* Provides functionality to find lexemes at specific cursor positions for IDE integration.
|
|
10
|
+
* Handles SQL parsing with proper comment and whitespace handling for editor features.
|
|
11
|
+
*
|
|
12
|
+
* @example Basic usage
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const sql = "SELECT id FROM users WHERE active = true";
|
|
15
|
+
* const lexeme = LexemeCursor.findLexemeAtPosition(sql, 7); // position at 'id'
|
|
16
|
+
* console.log(lexeme?.value); // 'id'
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
class LexemeCursor {
|
|
20
|
+
/**
|
|
21
|
+
* Find the lexeme at the specified line and column position.
|
|
22
|
+
*
|
|
23
|
+
* Designed for GUI editor integration where users select alias text.
|
|
24
|
+
* Uses 1-based line and column indexing to match editor conventions.
|
|
25
|
+
*
|
|
26
|
+
* @param sql - The SQL string to analyze
|
|
27
|
+
* @param position - Line and column position (1-based)
|
|
28
|
+
* @returns The lexeme at the position, or null if not found
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const sql = "SELECT user_id FROM orders";
|
|
33
|
+
* const lexeme = LexemeCursor.findLexemeAtLineColumn(sql, { line: 1, column: 8 });
|
|
34
|
+
* console.log(lexeme?.value); // 'user_id'
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
static findLexemeAtLineColumn(sql, position) {
|
|
38
|
+
const charOffset = this.lineColumnToCharOffset(sql, position);
|
|
39
|
+
if (charOffset === -1) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return this.findLexemeAtPosition(sql, charOffset);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Find the lexeme at the specified cursor position.
|
|
46
|
+
*
|
|
47
|
+
* Performs intelligent SQL parsing with proper comment and whitespace handling.
|
|
48
|
+
* Returns null if cursor is in whitespace or comments.
|
|
49
|
+
*
|
|
50
|
+
* @param sql - The SQL string to analyze
|
|
51
|
+
* @param cursorPosition - The cursor position (0-based character offset)
|
|
52
|
+
* @returns The lexeme at the position, or null if not found
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const sql = "SELECT user_id FROM orders";
|
|
57
|
+
* const lexeme = LexemeCursor.findLexemeAtPosition(sql, 7);
|
|
58
|
+
* console.log(lexeme?.value); // 'user_id'
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
static findLexemeAtPosition(sql, cursorPosition) {
|
|
62
|
+
if (cursorPosition < 0 || cursorPosition >= sql.length) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const lexemes = this.getAllLexemesWithPosition(sql);
|
|
66
|
+
for (const lexeme of lexemes) {
|
|
67
|
+
if (lexeme.position &&
|
|
68
|
+
cursorPosition >= lexeme.position.startPosition &&
|
|
69
|
+
cursorPosition < lexeme.position.endPosition) {
|
|
70
|
+
return lexeme;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get all lexemes with position information from SQL text.
|
|
77
|
+
*
|
|
78
|
+
* Tokenizes the entire SQL string with precise position information.
|
|
79
|
+
* Useful for syntax highlighting, code analysis, and editor features.
|
|
80
|
+
*
|
|
81
|
+
* @param sql - The SQL string to tokenize
|
|
82
|
+
* @returns Array of lexemes with position information (excludes comments/whitespace)
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const sql = "SELECT id FROM users";
|
|
87
|
+
* const lexemes = LexemeCursor.getAllLexemesWithPosition(sql);
|
|
88
|
+
* lexemes.forEach(l => console.log(`${l.value} at ${l.position.startPosition}`));
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
static getAllLexemesWithPosition(sql) {
|
|
92
|
+
if (!(sql === null || sql === void 0 ? void 0 : sql.trim())) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const lexemes = [];
|
|
97
|
+
let position = 0;
|
|
98
|
+
while (position < sql.length) {
|
|
99
|
+
position = this.skipWhitespaceAndComments(sql, position);
|
|
100
|
+
if (position >= sql.length) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
const lexeme = this.parseNextToken(sql, position);
|
|
104
|
+
if (lexeme) {
|
|
105
|
+
lexemes.push(lexeme);
|
|
106
|
+
position = lexeme.position.endPosition;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
position++; // Skip unknown character
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return lexemes;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Skip whitespace and comments, returning new position
|
|
120
|
+
*/
|
|
121
|
+
static skipWhitespaceAndComments(sql, position) {
|
|
122
|
+
const result = stringUtils_1.StringUtils.readWhiteSpaceAndComment(sql, position);
|
|
123
|
+
return result.position;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Parse the next token starting at the given position
|
|
127
|
+
*/
|
|
128
|
+
static parseNextToken(sql, startPos) {
|
|
129
|
+
const char = sql[startPos];
|
|
130
|
+
// String literals
|
|
131
|
+
if (char === "'" || char === '"') {
|
|
132
|
+
return this.parseStringLiteral(sql, startPos);
|
|
133
|
+
}
|
|
134
|
+
// Operators and special characters
|
|
135
|
+
if (/[=<>!+\-*/%().*]/.test(char)) {
|
|
136
|
+
return this.parseOperator(sql, startPos);
|
|
137
|
+
}
|
|
138
|
+
// Comma
|
|
139
|
+
if (char === ',') {
|
|
140
|
+
return this.createLexeme(Lexeme_1.TokenType.Comma, ',', startPos, startPos + 1);
|
|
141
|
+
}
|
|
142
|
+
// Word tokens (identifiers, commands, functions)
|
|
143
|
+
if (/[a-zA-Z0-9_]/.test(char)) {
|
|
144
|
+
return this.parseWordToken(sql, startPos);
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Parse string literal tokens
|
|
150
|
+
*/
|
|
151
|
+
static parseStringLiteral(sql, startPos) {
|
|
152
|
+
const quote = sql[startPos];
|
|
153
|
+
let position = startPos + 1;
|
|
154
|
+
let token = quote;
|
|
155
|
+
while (position < sql.length && sql[position] !== quote) {
|
|
156
|
+
token += sql[position++];
|
|
157
|
+
}
|
|
158
|
+
if (position < sql.length) {
|
|
159
|
+
token += sql[position++]; // closing quote
|
|
160
|
+
}
|
|
161
|
+
return this.createLexeme(Lexeme_1.TokenType.Literal, token, startPos, position);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Parse operator tokens
|
|
165
|
+
*/
|
|
166
|
+
static parseOperator(sql, startPos) {
|
|
167
|
+
let token = sql[startPos];
|
|
168
|
+
let position = startPos + 1;
|
|
169
|
+
// Handle compound operators (<=, >=, !=, etc.)
|
|
170
|
+
if (position < sql.length && /[=<>!]/.test(sql[position]) && /[=<>!]/.test(token)) {
|
|
171
|
+
token += sql[position++];
|
|
172
|
+
}
|
|
173
|
+
const tokenType = this.getOperatorTokenType(token);
|
|
174
|
+
return this.createLexeme(tokenType, token, startPos, position);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Parse word tokens (identifiers, commands, functions)
|
|
178
|
+
*/
|
|
179
|
+
static parseWordToken(sql, startPos) {
|
|
180
|
+
let position = startPos;
|
|
181
|
+
let token = '';
|
|
182
|
+
while (position < sql.length && /[a-zA-Z0-9_]/.test(sql[position])) {
|
|
183
|
+
token += sql[position++];
|
|
184
|
+
}
|
|
185
|
+
const tokenType = this.getWordTokenType(token, sql, position);
|
|
186
|
+
const value = this.shouldLowercase(tokenType) ? token.toLowerCase() : token;
|
|
187
|
+
return this.createLexeme(tokenType, value, startPos, position);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Determine the token type for operators
|
|
191
|
+
*/
|
|
192
|
+
static getOperatorTokenType(token) {
|
|
193
|
+
switch (token) {
|
|
194
|
+
case '(': return Lexeme_1.TokenType.OpenParen;
|
|
195
|
+
case ')': return Lexeme_1.TokenType.CloseParen;
|
|
196
|
+
case '*': return Lexeme_1.TokenType.Identifier; // Treat * as identifier for SELECT *
|
|
197
|
+
default: return Lexeme_1.TokenType.Operator;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Determine the token type for word tokens
|
|
202
|
+
*/
|
|
203
|
+
static getWordTokenType(token, sql, position) {
|
|
204
|
+
const lowerToken = token.toLowerCase();
|
|
205
|
+
// Check if it's a command
|
|
206
|
+
if (this.SQL_COMMANDS.has(lowerToken)) {
|
|
207
|
+
return Lexeme_1.TokenType.Command;
|
|
208
|
+
}
|
|
209
|
+
// Check if it's followed by parentheses (function)
|
|
210
|
+
const nextNonWhitespacePos = this.skipWhitespaceAndComments(sql, position);
|
|
211
|
+
if (nextNonWhitespacePos < sql.length && sql[nextNonWhitespacePos] === '(') {
|
|
212
|
+
return Lexeme_1.TokenType.Function;
|
|
213
|
+
}
|
|
214
|
+
return Lexeme_1.TokenType.Identifier;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Check if token value should be lowercased
|
|
218
|
+
*/
|
|
219
|
+
static shouldLowercase(tokenType) {
|
|
220
|
+
return !!(tokenType & Lexeme_1.TokenType.Command) ||
|
|
221
|
+
!!(tokenType & Lexeme_1.TokenType.Operator) ||
|
|
222
|
+
!!(tokenType & Lexeme_1.TokenType.Function);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Create a lexeme with position information
|
|
226
|
+
*/
|
|
227
|
+
static createLexeme(type, value, startPos, endPos) {
|
|
228
|
+
return {
|
|
229
|
+
type,
|
|
230
|
+
value,
|
|
231
|
+
comments: null,
|
|
232
|
+
position: {
|
|
233
|
+
startPosition: startPos,
|
|
234
|
+
endPosition: endPos
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Convert line and column position to character offset.
|
|
240
|
+
*
|
|
241
|
+
* @param sql - The SQL string
|
|
242
|
+
* @param position - Line and column position (1-based)
|
|
243
|
+
* @returns Character offset (0-based), or -1 if position is out of bounds
|
|
244
|
+
*/
|
|
245
|
+
static lineColumnToCharOffset(sql, position) {
|
|
246
|
+
if (position.line < 1 || position.column < 1) {
|
|
247
|
+
return -1;
|
|
248
|
+
}
|
|
249
|
+
const lines = sql.split('\n');
|
|
250
|
+
if (position.line > lines.length) {
|
|
251
|
+
return -1; // Line out of bounds
|
|
252
|
+
}
|
|
253
|
+
const targetLine = lines[position.line - 1];
|
|
254
|
+
if (position.column > targetLine.length + 1) {
|
|
255
|
+
return -1; // Column out of bounds
|
|
256
|
+
}
|
|
257
|
+
// Calculate character offset
|
|
258
|
+
let offset = 0;
|
|
259
|
+
for (let i = 0; i < position.line - 1; i++) {
|
|
260
|
+
offset += lines[i].length + 1; // +1 for newline character
|
|
261
|
+
}
|
|
262
|
+
offset += position.column - 1;
|
|
263
|
+
return offset;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Convert character offset to line and column position.
|
|
267
|
+
*
|
|
268
|
+
* @param sql - The SQL string
|
|
269
|
+
* @param charOffset - Character offset (0-based)
|
|
270
|
+
* @returns Line and column position (1-based), or null if offset is out of bounds
|
|
271
|
+
*/
|
|
272
|
+
static charOffsetToLineColumn(sql, charOffset) {
|
|
273
|
+
if (charOffset < 0 || charOffset > sql.length) {
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
const lines = sql.split('\n');
|
|
277
|
+
let currentOffset = 0;
|
|
278
|
+
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
|
279
|
+
const lineLength = lines[lineIndex].length;
|
|
280
|
+
// Check if the offset is within this line
|
|
281
|
+
if (charOffset < currentOffset + lineLength) {
|
|
282
|
+
return {
|
|
283
|
+
line: lineIndex + 1,
|
|
284
|
+
column: charOffset - currentOffset + 1
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
// Check if the offset is exactly at the end of this line (newline position)
|
|
288
|
+
if (charOffset === currentOffset + lineLength && lineIndex < lines.length - 1) {
|
|
289
|
+
// Position at newline - return start of next line
|
|
290
|
+
return {
|
|
291
|
+
line: lineIndex + 2,
|
|
292
|
+
column: 1
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
currentOffset += lineLength + 1; // +1 for newline character
|
|
296
|
+
}
|
|
297
|
+
// Handle position at the very end of the text
|
|
298
|
+
if (charOffset === sql.length) {
|
|
299
|
+
const lastLine = lines[lines.length - 1];
|
|
300
|
+
return {
|
|
301
|
+
line: lines.length,
|
|
302
|
+
column: lastLine.length + 1
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
exports.LexemeCursor = LexemeCursor;
|
|
309
|
+
LexemeCursor.SQL_COMMANDS = new Set([
|
|
310
|
+
'select', 'from', 'where', 'and', 'or', 'order', 'by', 'group', 'having',
|
|
311
|
+
'limit', 'offset', 'as', 'on', 'inner', 'left', 'right', 'join', 'union',
|
|
312
|
+
'insert', 'update', 'delete', 'into', 'values', 'set'
|
|
313
|
+
]);
|
|
314
|
+
//# sourceMappingURL=LexemeCursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LexemeCursor.js","sourceRoot":"","sources":["../../src/utils/LexemeCursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MultiQueryUtils = exports.MultiQuerySplitter = void 0;
|
|
4
|
+
const TextPositionUtils_1 = require("./TextPositionUtils");
|
|
5
|
+
/**
|
|
6
|
+
* Splits SQL text containing multiple queries separated by semicolons
|
|
7
|
+
*
|
|
8
|
+
* Provides sophisticated query boundary detection that properly handles:
|
|
9
|
+
* - String literals containing semicolons
|
|
10
|
+
* - Comments containing semicolons
|
|
11
|
+
* - Nested structures and complex SQL
|
|
12
|
+
* - Empty queries and whitespace handling
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const multiSQL = `
|
|
17
|
+
* -- First query
|
|
18
|
+
* SELECT 'hello;world' FROM users;
|
|
19
|
+
*
|
|
20
|
+
* // Second query with comment
|
|
21
|
+
* SELECT id FROM orders WHERE status = 'active';
|
|
22
|
+
*
|
|
23
|
+
* -- Empty query
|
|
24
|
+
* ;
|
|
25
|
+
* `;
|
|
26
|
+
*
|
|
27
|
+
* const queries = MultiQuerySplitter.split(multiSQL);
|
|
28
|
+
* console.log(queries.queries.length); // 3 queries
|
|
29
|
+
*
|
|
30
|
+
* // Find query at cursor position
|
|
31
|
+
* const active = queries.getActive(150);
|
|
32
|
+
* console.log(active?.sql); // Query containing position 150
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
class MultiQuerySplitter {
|
|
36
|
+
/**
|
|
37
|
+
* Split multi-query SQL text into individual queries
|
|
38
|
+
*
|
|
39
|
+
* @param text - SQL text that may contain multiple queries separated by semicolons
|
|
40
|
+
* @returns Collection of individual queries with position information
|
|
41
|
+
*/
|
|
42
|
+
static split(text) {
|
|
43
|
+
const queries = [];
|
|
44
|
+
// Handle completely empty or whitespace-only text
|
|
45
|
+
if (!text || text.trim() === '') {
|
|
46
|
+
return {
|
|
47
|
+
queries: [],
|
|
48
|
+
originalText: text,
|
|
49
|
+
getActive: () => undefined,
|
|
50
|
+
getQuery: () => undefined,
|
|
51
|
+
getNonEmpty: () => []
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const rawBoundaries = this.splitRespectingQuotesAndComments(text);
|
|
55
|
+
const boundaries = this.mergeTrailingCommentSegments(rawBoundaries, text);
|
|
56
|
+
let queryIndex = 0;
|
|
57
|
+
for (const boundary of boundaries) {
|
|
58
|
+
const rawSql = boundary.text.trim();
|
|
59
|
+
const isEmpty = this.isEmptyQuery(rawSql);
|
|
60
|
+
// Use raw SQL as-is - boundaries are already correctly split by valid semicolons
|
|
61
|
+
const sql = rawSql;
|
|
62
|
+
const startLineCol = TextPositionUtils_1.TextPositionUtils.charOffsetToLineColumn(text, boundary.start);
|
|
63
|
+
const endLineCol = TextPositionUtils_1.TextPositionUtils.charOffsetToLineColumn(text, boundary.end);
|
|
64
|
+
queries.push({
|
|
65
|
+
sql,
|
|
66
|
+
start: boundary.start,
|
|
67
|
+
end: boundary.end,
|
|
68
|
+
startLine: (startLineCol === null || startLineCol === void 0 ? void 0 : startLineCol.line) || 1,
|
|
69
|
+
endLine: (endLineCol === null || endLineCol === void 0 ? void 0 : endLineCol.line) || 1,
|
|
70
|
+
index: queryIndex++,
|
|
71
|
+
isEmpty
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
queries,
|
|
76
|
+
originalText: text,
|
|
77
|
+
getActive: (cursorPosition) => {
|
|
78
|
+
const charPos = typeof cursorPosition === 'number'
|
|
79
|
+
? cursorPosition
|
|
80
|
+
: TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(text, cursorPosition);
|
|
81
|
+
if (charPos === -1)
|
|
82
|
+
return undefined;
|
|
83
|
+
return queries.find(query => charPos >= query.start && charPos <= query.end);
|
|
84
|
+
},
|
|
85
|
+
getQuery: (index) => {
|
|
86
|
+
return queries[index];
|
|
87
|
+
},
|
|
88
|
+
getNonEmpty: () => {
|
|
89
|
+
return queries.filter(q => !q.isEmpty);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get query boundaries from SQL text with proper semicolon handling
|
|
95
|
+
*
|
|
96
|
+
* @param text - SQL text to analyze
|
|
97
|
+
* @returns Array of boundary positions
|
|
98
|
+
*/
|
|
99
|
+
/**
|
|
100
|
+
* Split text by semicolons while respecting quotes and comments
|
|
101
|
+
*/
|
|
102
|
+
static splitRespectingQuotesAndComments(text) {
|
|
103
|
+
const segments = [];
|
|
104
|
+
let currentStart = 0;
|
|
105
|
+
let i = 0;
|
|
106
|
+
while (i <= text.length) {
|
|
107
|
+
// Check if we're at a valid semicolon or end of text
|
|
108
|
+
const isValidBreakpoint = (i === text.length) || (i < text.length && this.isValidSemicolon(text, i));
|
|
109
|
+
if (isValidBreakpoint) {
|
|
110
|
+
const segmentText = text.substring(currentStart, i);
|
|
111
|
+
if (segmentText.length > 0 || i < text.length) {
|
|
112
|
+
segments.push({
|
|
113
|
+
text: segmentText,
|
|
114
|
+
start: currentStart,
|
|
115
|
+
end: i
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
currentStart = i + 1;
|
|
119
|
+
}
|
|
120
|
+
i++;
|
|
121
|
+
}
|
|
122
|
+
return segments;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if character at position is a valid semicolon (not in quotes/comments)
|
|
126
|
+
*/
|
|
127
|
+
static isValidSemicolon(text, pos) {
|
|
128
|
+
if (text[pos] !== ';')
|
|
129
|
+
return false;
|
|
130
|
+
// Check if this semicolon is inside quotes or comments by scanning from start
|
|
131
|
+
let inSingleQuote = false;
|
|
132
|
+
let inDoubleQuote = false;
|
|
133
|
+
let inLineComment = false;
|
|
134
|
+
let inBlockComment = false;
|
|
135
|
+
for (let i = 0; i < pos; i++) {
|
|
136
|
+
const char = text[i];
|
|
137
|
+
const nextChar = i + 1 < text.length ? text[i + 1] : '';
|
|
138
|
+
// Handle line comments
|
|
139
|
+
if (!inSingleQuote && !inDoubleQuote && !inBlockComment &&
|
|
140
|
+
char === '-' && nextChar === '-') {
|
|
141
|
+
inLineComment = true;
|
|
142
|
+
i++; // Skip next character
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (inLineComment && char === '\n') {
|
|
146
|
+
inLineComment = false;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// Handle block comments
|
|
150
|
+
if (!inSingleQuote && !inDoubleQuote && !inLineComment &&
|
|
151
|
+
char === '/' && nextChar === '*') {
|
|
152
|
+
inBlockComment = true;
|
|
153
|
+
i++; // Skip next character
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (inBlockComment && char === '*' && nextChar === '/') {
|
|
157
|
+
inBlockComment = false;
|
|
158
|
+
i++; // Skip next character
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
// Skip if in any comment
|
|
162
|
+
if (inLineComment || inBlockComment) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
// Handle quotes
|
|
166
|
+
if (char === "'" && !inDoubleQuote) {
|
|
167
|
+
if (inSingleQuote && nextChar === "'") {
|
|
168
|
+
i++; // Skip escaped quote
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
inSingleQuote = !inSingleQuote;
|
|
172
|
+
}
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (char === '"' && !inSingleQuote) {
|
|
176
|
+
if (inDoubleQuote && nextChar === '"') {
|
|
177
|
+
i++; // Skip escaped quote
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
inDoubleQuote = !inDoubleQuote;
|
|
181
|
+
}
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Return false if we're inside quotes or comments at this position
|
|
186
|
+
return !inSingleQuote && !inDoubleQuote && !inLineComment && !inBlockComment;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Merge comment-only segments with previous executable segments
|
|
190
|
+
*/
|
|
191
|
+
static mergeTrailingCommentSegments(segments, fullText) {
|
|
192
|
+
const merged = [];
|
|
193
|
+
for (let i = 0; i < segments.length; i++) {
|
|
194
|
+
const segment = segments[i];
|
|
195
|
+
const segmentText = segment.text.trim();
|
|
196
|
+
// Check if this segment contains only comments/whitespace (no executable SQL)
|
|
197
|
+
const isCommentOnly = this.isEmptyQuery(segmentText);
|
|
198
|
+
if (isCommentOnly && merged.length > 0) {
|
|
199
|
+
// Only merge if this appears to be a trailing line comment (starts with --)
|
|
200
|
+
// and the previous segment contains executable SQL
|
|
201
|
+
const lastSegmentText = merged[merged.length - 1].text.trim();
|
|
202
|
+
const isTrailingLineComment = segmentText.startsWith('--');
|
|
203
|
+
const previousHasSQL = !this.isEmptyQuery(lastSegmentText);
|
|
204
|
+
if (isTrailingLineComment && previousHasSQL) {
|
|
205
|
+
// Merge trailing line comment with previous SQL segment
|
|
206
|
+
const lastSegment = merged[merged.length - 1];
|
|
207
|
+
merged[merged.length - 1] = {
|
|
208
|
+
text: fullText.substring(lastSegment.start, segment.end),
|
|
209
|
+
start: lastSegment.start,
|
|
210
|
+
end: segment.end
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
// Keep as separate segment (empty query or standalone comment)
|
|
215
|
+
merged.push(segment);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// Add as new segment
|
|
220
|
+
merged.push(segment);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return merged;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Clean SQL comments and extract SQL statements
|
|
227
|
+
*
|
|
228
|
+
* @param sql - SQL query text
|
|
229
|
+
* @returns Cleaned SQL text or null if no SQL remains
|
|
230
|
+
*/
|
|
231
|
+
static cleanSqlComments(sql) {
|
|
232
|
+
if (!sql)
|
|
233
|
+
return null;
|
|
234
|
+
// Remove comments and extract SQL
|
|
235
|
+
let cleaned = sql;
|
|
236
|
+
// Remove line comments - standard SQL behavior: -- comments out to end of line
|
|
237
|
+
cleaned = cleaned.split('\n').map(line => {
|
|
238
|
+
const commentStart = line.indexOf('--');
|
|
239
|
+
if (commentStart >= 0) {
|
|
240
|
+
return line.substring(0, commentStart);
|
|
241
|
+
}
|
|
242
|
+
return line;
|
|
243
|
+
}).join('\n');
|
|
244
|
+
// Remove block comments
|
|
245
|
+
cleaned = cleaned.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
246
|
+
const result = cleaned.trim();
|
|
247
|
+
return result.length > 0 ? result : null;
|
|
248
|
+
}
|
|
249
|
+
static isEmptyQuery(sql) {
|
|
250
|
+
if (!sql)
|
|
251
|
+
return true;
|
|
252
|
+
return this.cleanSqlComments(sql) === null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
exports.MultiQuerySplitter = MultiQuerySplitter;
|
|
256
|
+
/**
|
|
257
|
+
* Utility functions for working with query collections
|
|
258
|
+
*/
|
|
259
|
+
class MultiQueryUtils {
|
|
260
|
+
/**
|
|
261
|
+
* Get context information for IntelliSense at a cursor position
|
|
262
|
+
*
|
|
263
|
+
* @param text - Multi-query SQL text
|
|
264
|
+
* @param cursorPosition - Cursor position
|
|
265
|
+
* @returns Active query and position within that query
|
|
266
|
+
*/
|
|
267
|
+
static getContextAt(text, cursorPosition) {
|
|
268
|
+
const queries = MultiQuerySplitter.split(text);
|
|
269
|
+
const activeQuery = queries.getActive(cursorPosition);
|
|
270
|
+
if (!activeQuery)
|
|
271
|
+
return undefined;
|
|
272
|
+
const charPos = typeof cursorPosition === 'number'
|
|
273
|
+
? cursorPosition
|
|
274
|
+
: TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(text, cursorPosition);
|
|
275
|
+
if (charPos === -1)
|
|
276
|
+
return undefined;
|
|
277
|
+
const relativePosition = charPos - activeQuery.start;
|
|
278
|
+
return { query: activeQuery, relativePosition };
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Extract all non-empty queries from multi-query text
|
|
282
|
+
*
|
|
283
|
+
* @param text - Multi-query SQL text
|
|
284
|
+
* @returns Array of query SQL strings
|
|
285
|
+
*/
|
|
286
|
+
static extractQueries(text) {
|
|
287
|
+
const queries = MultiQuerySplitter.split(text);
|
|
288
|
+
return queries.getNonEmpty().map(q => q.sql);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
exports.MultiQueryUtils = MultiQueryUtils;
|
|
292
|
+
//# sourceMappingURL=MultiQuerySplitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiQuerySplitter.js","sourceRoot":"","sources":["../../src/utils/MultiQuerySplitter.ts"],"names":[],"mappings":"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"}
|