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,553 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SqlTokenizer = void 0;
|
|
4
|
+
const Lexeme_1 = require("../models/Lexeme");
|
|
5
|
+
const CommandTokenReader_1 = require("../tokenReaders/CommandTokenReader");
|
|
6
|
+
const EscapedIdentifierTokenReader_1 = require("../tokenReaders/EscapedIdentifierTokenReader");
|
|
7
|
+
const FunctionTokenReader_1 = require("../tokenReaders/FunctionTokenReader");
|
|
8
|
+
const IdentifierTokenReader_1 = require("../tokenReaders/IdentifierTokenReader");
|
|
9
|
+
const LiteralTokenReader_1 = require("../tokenReaders/LiteralTokenReader");
|
|
10
|
+
const OperatorTokenReader_1 = require("../tokenReaders/OperatorTokenReader");
|
|
11
|
+
const ParameterTokenReader_1 = require("../tokenReaders/ParameterTokenReader");
|
|
12
|
+
const SymbolTokenReader_1 = require("../tokenReaders/SymbolTokenReader");
|
|
13
|
+
const StringSpecifierTokenReader_1 = require("../tokenReaders/StringSpecifierTokenReader");
|
|
14
|
+
const TokenReaderManager_1 = require("../tokenReaders/TokenReaderManager");
|
|
15
|
+
const TypeTokenReader_1 = require("../tokenReaders/TypeTokenReader");
|
|
16
|
+
const stringUtils_1 = require("../utils/stringUtils");
|
|
17
|
+
/**
|
|
18
|
+
* Class responsible for tokenizing SQL input.
|
|
19
|
+
*/
|
|
20
|
+
class SqlTokenizer {
|
|
21
|
+
/**
|
|
22
|
+
* Initializes a new instance of the SqlTokenizer.
|
|
23
|
+
*/
|
|
24
|
+
constructor(input) {
|
|
25
|
+
/**
|
|
26
|
+
* Cached start offsets for each line in the input string.
|
|
27
|
+
*/
|
|
28
|
+
this.lineStartPositions = null;
|
|
29
|
+
this.input = input;
|
|
30
|
+
this.position = 0;
|
|
31
|
+
// Initialize the token reader manager and register all readers
|
|
32
|
+
this.readerManager = new TokenReaderManager_1.TokenReaderManager(input)
|
|
33
|
+
.register(new EscapedIdentifierTokenReader_1.EscapedIdentifierTokenReader(input))
|
|
34
|
+
.register(new ParameterTokenReader_1.ParameterTokenReader(input))
|
|
35
|
+
.register(new StringSpecifierTokenReader_1.StringSpecifierTokenReader(input))
|
|
36
|
+
// LiteralTokenReader should be registered before SpecialSymbolTokenReader and OperatorTokenReader
|
|
37
|
+
// Reason: To prevent numeric literals starting with a dot or sign from being misrecognized as operators
|
|
38
|
+
// e.g. `1.0` is a literal, not an operator
|
|
39
|
+
.register(new LiteralTokenReader_1.LiteralTokenReader(input))
|
|
40
|
+
.register(new SymbolTokenReader_1.SpecialSymbolTokenReader(input))
|
|
41
|
+
.register(new CommandTokenReader_1.CommandTokenReader(input))
|
|
42
|
+
.register(new OperatorTokenReader_1.OperatorTokenReader(input))
|
|
43
|
+
// TypeTokenReader should be registered before FunctionTokenReader
|
|
44
|
+
// Reason: To prevent types containing parentheses from being misrecognized as functions
|
|
45
|
+
// e.g. `numeric(10, 2)` is a type, not a function
|
|
46
|
+
.register(new TypeTokenReader_1.TypeTokenReader(input))
|
|
47
|
+
.register(new FunctionTokenReader_1.FunctionTokenReader(input))
|
|
48
|
+
.register(new IdentifierTokenReader_1.IdentifierTokenReader(input)) // IdentifierTokenReader should be registered last
|
|
49
|
+
;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Checks if the end of input is reached.
|
|
53
|
+
*
|
|
54
|
+
* @param shift - The shift to consider beyond the current position.
|
|
55
|
+
* @returns True if the end of input is reached; otherwise, false.
|
|
56
|
+
*/
|
|
57
|
+
isEndOfInput(shift = 0) {
|
|
58
|
+
return this.position + shift >= this.input.length;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Checks if more input can be read.
|
|
62
|
+
*
|
|
63
|
+
* @param shift - The shift to consider beyond the current position.
|
|
64
|
+
* @returns True if more input can be read; otherwise, false.
|
|
65
|
+
*/
|
|
66
|
+
canRead(shift = 0) {
|
|
67
|
+
return !this.isEndOfInput(shift);
|
|
68
|
+
}
|
|
69
|
+
tokenize(options) {
|
|
70
|
+
if (options === null || options === void 0 ? void 0 : options.preserveFormatting) {
|
|
71
|
+
return this.tokenizeWithFormatting();
|
|
72
|
+
}
|
|
73
|
+
// Create a fresh tokenizer instance for clean state
|
|
74
|
+
const freshTokenizer = new SqlTokenizer(this.input);
|
|
75
|
+
return freshTokenizer.readLexemes();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @deprecated Use {@link readLexemes} (correct spelling) instead.
|
|
79
|
+
* This legacy alias remains for backwards compatibility and delegates to the new method.
|
|
80
|
+
*/
|
|
81
|
+
readLexmes() {
|
|
82
|
+
return this.readLexemes();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Reads the lexemes from the input string.
|
|
86
|
+
*
|
|
87
|
+
* @returns An array of lexemes extracted from the input string.
|
|
88
|
+
* @throws Error if an unexpected character is encountered.
|
|
89
|
+
*/
|
|
90
|
+
readLexemes() {
|
|
91
|
+
const segment = this.readNextStatement(0);
|
|
92
|
+
return segment ? segment.lexemes : [];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Tokenizes the input SQL without formatting preservation (internal method)
|
|
96
|
+
*/
|
|
97
|
+
tokenizeBasic() {
|
|
98
|
+
const segment = this.readNextStatement(0);
|
|
99
|
+
return segment ? segment.lexemes : [];
|
|
100
|
+
}
|
|
101
|
+
readNextStatement(startPosition = 0, carryComments = null) {
|
|
102
|
+
const length = this.input.length;
|
|
103
|
+
// Abort when the cursor already moved past the input.
|
|
104
|
+
if (startPosition >= length) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
// Adopt a working cursor so the original tokenizer state is untouched.
|
|
108
|
+
this.position = startPosition;
|
|
109
|
+
const statementStart = startPosition;
|
|
110
|
+
let pendingLeading = carryComments ? [...carryComments] : null;
|
|
111
|
+
const tokenData = [];
|
|
112
|
+
let previous = null;
|
|
113
|
+
while (this.canRead()) {
|
|
114
|
+
// Fold whitespace and comments into the token stream and advance to the next significant character.
|
|
115
|
+
const prefixComment = this.readComment();
|
|
116
|
+
this.position = prefixComment.position;
|
|
117
|
+
if (!this.canRead()) {
|
|
118
|
+
// No more characters, so keep any trailing comments for the next statement.
|
|
119
|
+
pendingLeading = this.mergeComments(pendingLeading, prefixComment.lines);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
if (this.input[this.position] === ';') {
|
|
123
|
+
// Statement terminated before any token appeared.
|
|
124
|
+
pendingLeading = this.mergeComments(pendingLeading, prefixComment.lines);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
// Read the next lexeme at the current position.
|
|
128
|
+
const lexeme = this.readerManager.tryRead(this.position, previous);
|
|
129
|
+
if (lexeme === null) {
|
|
130
|
+
throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}\n${this.getDebugPositionInfo(this.position)}`);
|
|
131
|
+
}
|
|
132
|
+
const tokenStartPos = this.position;
|
|
133
|
+
const tokenEndPos = this.position = this.readerManager.getMaxPosition();
|
|
134
|
+
// Capture trailing whitespace and comments after the token.
|
|
135
|
+
const suffixComment = this.readComment();
|
|
136
|
+
this.position = suffixComment.position;
|
|
137
|
+
let prefixComments = this.mergeComments(pendingLeading, prefixComment.lines);
|
|
138
|
+
pendingLeading = null;
|
|
139
|
+
tokenData.push({
|
|
140
|
+
lexeme,
|
|
141
|
+
startPos: tokenStartPos,
|
|
142
|
+
endPos: tokenEndPos,
|
|
143
|
+
prefixComments,
|
|
144
|
+
suffixComments: suffixComment.lines
|
|
145
|
+
});
|
|
146
|
+
previous = lexeme;
|
|
147
|
+
}
|
|
148
|
+
const statementEnd = this.position;
|
|
149
|
+
const lexemes = this.buildLexemesFromTokenData(tokenData);
|
|
150
|
+
const nextPosition = this.skipPastTerminator(statementEnd);
|
|
151
|
+
return {
|
|
152
|
+
lexemes,
|
|
153
|
+
statementStart,
|
|
154
|
+
statementEnd,
|
|
155
|
+
nextPosition,
|
|
156
|
+
rawText: this.input.slice(statementStart, statementEnd),
|
|
157
|
+
leadingComments: pendingLeading
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
buildLexemesFromTokenData(tokenData) {
|
|
161
|
+
const lexemes = new Array(tokenData.length);
|
|
162
|
+
for (let i = 0; i < tokenData.length; i++) {
|
|
163
|
+
const current = tokenData[i];
|
|
164
|
+
const lexeme = current.lexeme;
|
|
165
|
+
// Redirect SELECT suffix comments to the first meaningful select item.
|
|
166
|
+
if (lexeme.value.toLowerCase() === 'select' && current.suffixComments && current.suffixComments.length > 0) {
|
|
167
|
+
const suffixComments = current.suffixComments;
|
|
168
|
+
let targetIndex = i + 1;
|
|
169
|
+
while (targetIndex < tokenData.length) {
|
|
170
|
+
const target = tokenData[targetIndex];
|
|
171
|
+
// Allow SELECT-prefix comments to bind to '*' tokens so they stay with the select list.
|
|
172
|
+
const isStarOperator = (target.lexeme.type & Lexeme_1.TokenType.Operator) && target.lexeme.value === '*';
|
|
173
|
+
if ((target.lexeme.type & Lexeme_1.TokenType.Identifier) ||
|
|
174
|
+
(target.lexeme.type & Lexeme_1.TokenType.Literal) ||
|
|
175
|
+
isStarOperator ||
|
|
176
|
+
(!(target.lexeme.type & Lexeme_1.TokenType.Command) &&
|
|
177
|
+
!(target.lexeme.type & Lexeme_1.TokenType.Comma) &&
|
|
178
|
+
!(target.lexeme.type & Lexeme_1.TokenType.Operator))) {
|
|
179
|
+
if (!target.prefixComments) {
|
|
180
|
+
target.prefixComments = [];
|
|
181
|
+
}
|
|
182
|
+
target.prefixComments.unshift(...suffixComments);
|
|
183
|
+
current.suffixComments = null;
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
targetIndex++;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (lexeme.value.toLowerCase() === 'from' && current.suffixComments && current.suffixComments.length > 0) {
|
|
190
|
+
const suffixComments = current.suffixComments;
|
|
191
|
+
let targetIndex = i + 1;
|
|
192
|
+
while (targetIndex < tokenData.length) {
|
|
193
|
+
const target = tokenData[targetIndex];
|
|
194
|
+
// Attach FROM suffix comments to the immediately following source token.
|
|
195
|
+
const isCommand = (target.lexeme.type & Lexeme_1.TokenType.Command) !== 0;
|
|
196
|
+
if (!isCommand) {
|
|
197
|
+
if (!target.prefixComments) {
|
|
198
|
+
target.prefixComments = [];
|
|
199
|
+
}
|
|
200
|
+
target.prefixComments.unshift(...suffixComments);
|
|
201
|
+
current.suffixComments = null;
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
targetIndex++;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Ensure commas push trailing comments onto the following token.
|
|
208
|
+
if ((lexeme.type & Lexeme_1.TokenType.Comma) && current.suffixComments && current.suffixComments.length > 0) {
|
|
209
|
+
const suffixComments = current.suffixComments;
|
|
210
|
+
let targetIndex = i + 1;
|
|
211
|
+
if (targetIndex < tokenData.length) {
|
|
212
|
+
const target = tokenData[targetIndex];
|
|
213
|
+
if (!target.prefixComments) {
|
|
214
|
+
target.prefixComments = [];
|
|
215
|
+
}
|
|
216
|
+
target.prefixComments.unshift(...suffixComments);
|
|
217
|
+
current.suffixComments = null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Bridge set-operator suffix comments to the subsequent SELECT clause.
|
|
221
|
+
if ((lexeme.value.toLowerCase() === 'union' ||
|
|
222
|
+
lexeme.value.toLowerCase() === 'intersect' ||
|
|
223
|
+
lexeme.value.toLowerCase() === 'except') &&
|
|
224
|
+
current.suffixComments && current.suffixComments.length > 0) {
|
|
225
|
+
const suffixComments = current.suffixComments;
|
|
226
|
+
let targetIndex = i + 1;
|
|
227
|
+
while (targetIndex < tokenData.length) {
|
|
228
|
+
const target = tokenData[targetIndex];
|
|
229
|
+
if (target.lexeme.value.toLowerCase() === 'select') {
|
|
230
|
+
if (!target.prefixComments) {
|
|
231
|
+
target.prefixComments = [];
|
|
232
|
+
}
|
|
233
|
+
target.prefixComments.unshift(...suffixComments);
|
|
234
|
+
current.suffixComments = null;
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
targetIndex++;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
this.attachCommentsToLexeme(lexeme, current);
|
|
241
|
+
// Attach source position metadata so downstream parsers can report precise locations.
|
|
242
|
+
lexeme.position = {
|
|
243
|
+
startPosition: current.startPos,
|
|
244
|
+
endPosition: current.endPos,
|
|
245
|
+
...this.getLineColumnInfo(current.startPos, current.endPos)
|
|
246
|
+
};
|
|
247
|
+
lexemes[i] = lexeme;
|
|
248
|
+
}
|
|
249
|
+
this.relocateOrderByComments(lexemes);
|
|
250
|
+
return lexemes;
|
|
251
|
+
}
|
|
252
|
+
skipPastTerminator(position) {
|
|
253
|
+
let next = position;
|
|
254
|
+
if (next < this.input.length && this.input[next] === ';') {
|
|
255
|
+
next++;
|
|
256
|
+
}
|
|
257
|
+
return this.skipWhitespaceAndComments(next);
|
|
258
|
+
}
|
|
259
|
+
mergeComments(base, addition) {
|
|
260
|
+
if (addition && addition.length > 0) {
|
|
261
|
+
if (!base || base.length === 0) {
|
|
262
|
+
return [...addition];
|
|
263
|
+
}
|
|
264
|
+
return [...base, ...addition];
|
|
265
|
+
}
|
|
266
|
+
return base ? [...base] : null;
|
|
267
|
+
}
|
|
268
|
+
relocateOrderByComments(lexemes) {
|
|
269
|
+
// Move ORDER BY trailing comments onto the next token so the following expression inherits them.
|
|
270
|
+
for (let i = 0; i < lexemes.length - 1; i++) {
|
|
271
|
+
const current = lexemes[i];
|
|
272
|
+
if (current.value.toLowerCase() !== 'order by' || !current.positionedComments) {
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
// Gather only the trailing comment sets that should move with the clause.
|
|
276
|
+
const afterComments = current.positionedComments.filter(comment => comment.position === 'after' && comment.comments && comment.comments.length > 0);
|
|
277
|
+
if (afterComments.length === 0) {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
// Strip the relocated comments from the ORDER BY token so duplicates do not remain.
|
|
281
|
+
current.positionedComments = current.positionedComments.filter(comment => comment.position !== 'after');
|
|
282
|
+
if (current.positionedComments.length === 0) {
|
|
283
|
+
current.positionedComments = undefined;
|
|
284
|
+
}
|
|
285
|
+
const target = lexemes[i + 1];
|
|
286
|
+
// Convert trailing comments into before-positioned comments for the next expression.
|
|
287
|
+
const beforeComments = afterComments.map(comment => ({
|
|
288
|
+
position: 'before',
|
|
289
|
+
comments: [...comment.comments],
|
|
290
|
+
}));
|
|
291
|
+
// Prepend the relocated comments so they remain adjacent to the next lexeme.
|
|
292
|
+
if (target.positionedComments && target.positionedComments.length > 0) {
|
|
293
|
+
target.positionedComments = [...beforeComments, ...target.positionedComments];
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
target.positionedComments = beforeComments;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Attach comments to lexeme directly (no collection then assignment anti-pattern)
|
|
301
|
+
attachCommentsToLexeme(lexeme, tokenData) {
|
|
302
|
+
const newPositionedComments = [];
|
|
303
|
+
const allLegacyComments = [];
|
|
304
|
+
// Preserve existing positioned comments from token readers (e.g., CommandTokenReader)
|
|
305
|
+
if (lexeme.positionedComments && lexeme.positionedComments.length > 0) {
|
|
306
|
+
newPositionedComments.push(...lexeme.positionedComments);
|
|
307
|
+
}
|
|
308
|
+
// Add prefix comments as "before" positioned comments directly
|
|
309
|
+
if (tokenData.prefixComments && tokenData.prefixComments.length > 0) {
|
|
310
|
+
allLegacyComments.push(...tokenData.prefixComments);
|
|
311
|
+
newPositionedComments.push({
|
|
312
|
+
position: 'before',
|
|
313
|
+
comments: [...tokenData.prefixComments]
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
// Add suffix comments as "after" positioned comments directly
|
|
317
|
+
if (tokenData.suffixComments && tokenData.suffixComments.length > 0) {
|
|
318
|
+
allLegacyComments.push(...tokenData.suffixComments);
|
|
319
|
+
newPositionedComments.push({
|
|
320
|
+
position: 'after',
|
|
321
|
+
comments: [...tokenData.suffixComments]
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
// Apply comments directly to lexeme (positioned comments take priority)
|
|
325
|
+
if (newPositionedComments.length > 0) {
|
|
326
|
+
lexeme.positionedComments = newPositionedComments;
|
|
327
|
+
// Clear legacy comments when positioned comments exist to avoid duplication
|
|
328
|
+
lexeme.comments = null;
|
|
329
|
+
}
|
|
330
|
+
else if (allLegacyComments.length > 0) {
|
|
331
|
+
// Only set legacy comments if no positioned comments exist
|
|
332
|
+
lexeme.comments = allLegacyComments;
|
|
333
|
+
lexeme.positionedComments = undefined;
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
// Clear both if no comments exist
|
|
337
|
+
lexeme.comments = null;
|
|
338
|
+
lexeme.positionedComments = undefined;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Skips whitespace characters and SQL comments in the input.
|
|
343
|
+
*
|
|
344
|
+
* @remarks This method updates the position pointer.
|
|
345
|
+
*/
|
|
346
|
+
readComment() {
|
|
347
|
+
return stringUtils_1.StringUtils.readWhiteSpaceAndComment(this.input, this.position);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Gets debug information for error reporting.
|
|
351
|
+
*
|
|
352
|
+
* @param errPosition - The position where the error occurred.
|
|
353
|
+
* @returns A string containing the debug position information.
|
|
354
|
+
*/
|
|
355
|
+
getDebugPositionInfo(errPosition) {
|
|
356
|
+
return stringUtils_1.StringUtils.getDebugPositionInfo(this.input, errPosition);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Tokenizes the input SQL while preserving formatting information
|
|
360
|
+
*/
|
|
361
|
+
tokenizeWithFormatting() {
|
|
362
|
+
// Get regular lexemes first
|
|
363
|
+
const regularLexemes = this.tokenizeBasic();
|
|
364
|
+
// Map regular lexemes to formatting lexemes with whitespace info
|
|
365
|
+
return this.mapToFormattingLexemes(regularLexemes);
|
|
366
|
+
}
|
|
367
|
+
mapToFormattingLexemes(regularLexemes) {
|
|
368
|
+
if (regularLexemes.length === 0) {
|
|
369
|
+
return [];
|
|
370
|
+
}
|
|
371
|
+
// First pass: find all lexeme positions in the input
|
|
372
|
+
const lexemePositions = [];
|
|
373
|
+
let searchPos = 0;
|
|
374
|
+
for (const lexeme of regularLexemes) {
|
|
375
|
+
// Skip whitespace and comments
|
|
376
|
+
searchPos = this.skipWhitespaceAndComments(searchPos);
|
|
377
|
+
// Find lexeme at current position
|
|
378
|
+
const lexemeInfo = this.findLexemeAtPosition(lexeme, searchPos);
|
|
379
|
+
if (lexemeInfo) {
|
|
380
|
+
lexemePositions.push(lexemeInfo);
|
|
381
|
+
searchPos = lexemeInfo.endPosition;
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
// Fallback: assume lexeme length and continue
|
|
385
|
+
const fallbackInfo = {
|
|
386
|
+
startPosition: searchPos,
|
|
387
|
+
endPosition: searchPos + lexeme.value.length
|
|
388
|
+
};
|
|
389
|
+
lexemePositions.push(fallbackInfo);
|
|
390
|
+
searchPos = fallbackInfo.endPosition;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Second pass: build formatting lexemes with proper whitespace segments
|
|
394
|
+
const formattingLexemes = [];
|
|
395
|
+
for (let i = 0; i < regularLexemes.length; i++) {
|
|
396
|
+
const lexeme = regularLexemes[i];
|
|
397
|
+
const lexemeInfo = lexemePositions[i];
|
|
398
|
+
// Determine the end position of the whitespace segment
|
|
399
|
+
const nextLexemeStartPos = i < regularLexemes.length - 1
|
|
400
|
+
? lexemePositions[i + 1].startPosition
|
|
401
|
+
: this.input.length;
|
|
402
|
+
// Extract whitespace between this lexeme and the next
|
|
403
|
+
const whitespaceSegment = this.input.slice(lexemeInfo.endPosition, nextLexemeStartPos);
|
|
404
|
+
const inlineComments = this.extractCommentsFromWhitespace(whitespaceSegment);
|
|
405
|
+
const formattingLexeme = {
|
|
406
|
+
...lexeme,
|
|
407
|
+
followingWhitespace: whitespaceSegment,
|
|
408
|
+
inlineComments,
|
|
409
|
+
position: {
|
|
410
|
+
startPosition: lexemeInfo.startPosition,
|
|
411
|
+
endPosition: lexemeInfo.endPosition,
|
|
412
|
+
...this.getLineColumnInfo(lexemeInfo.startPosition, lexemeInfo.endPosition)
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
formattingLexemes.push(formattingLexeme);
|
|
416
|
+
}
|
|
417
|
+
return formattingLexemes;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Find lexeme at a specific position, handling case variations
|
|
421
|
+
*/
|
|
422
|
+
findLexemeAtPosition(lexeme, expectedPos) {
|
|
423
|
+
if (expectedPos >= this.input.length) {
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
// For command tokens (keywords), the lexeme.value might be lowercase but appear uppercase in input
|
|
427
|
+
const valuesToTry = [lexeme.value, lexeme.value.toUpperCase(), lexeme.value.toLowerCase()];
|
|
428
|
+
for (const valueToTry of valuesToTry) {
|
|
429
|
+
// Check if the input at expected position matches this value
|
|
430
|
+
if (expectedPos + valueToTry.length <= this.input.length &&
|
|
431
|
+
this.input.substring(expectedPos, expectedPos + valueToTry.length) === valueToTry &&
|
|
432
|
+
this.isValidLexemeMatch(valueToTry, expectedPos)) {
|
|
433
|
+
return {
|
|
434
|
+
startPosition: expectedPos,
|
|
435
|
+
endPosition: expectedPos + valueToTry.length
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
isValidLexemeMatch(value, position) {
|
|
442
|
+
// Check character before
|
|
443
|
+
if (position > 0) {
|
|
444
|
+
const charBefore = this.input[position - 1];
|
|
445
|
+
if (this.isAlphanumericUnderscore(charBefore)) {
|
|
446
|
+
return false; // Part of another identifier
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
// Check character after
|
|
450
|
+
const endPosition = position + value.length;
|
|
451
|
+
if (endPosition < this.input.length) {
|
|
452
|
+
const charAfter = this.input[endPosition];
|
|
453
|
+
if (this.isAlphanumericUnderscore(charAfter)) {
|
|
454
|
+
return false; // Part of another identifier
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return true;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Check if character is alphanumeric or underscore (faster than regex)
|
|
461
|
+
*/
|
|
462
|
+
isAlphanumericUnderscore(char) {
|
|
463
|
+
const code = char.charCodeAt(0);
|
|
464
|
+
return (code >= 48 && code <= 57) || // 0-9
|
|
465
|
+
(code >= 65 && code <= 90) || // A-Z
|
|
466
|
+
(code >= 97 && code <= 122) || // a-z
|
|
467
|
+
code === 95; // _
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Check if character is whitespace (faster than regex)
|
|
471
|
+
*/
|
|
472
|
+
isWhitespace(char) {
|
|
473
|
+
const code = char.charCodeAt(0);
|
|
474
|
+
return code === 32 || // space
|
|
475
|
+
code === 9 || // tab
|
|
476
|
+
code === 10 || // \n
|
|
477
|
+
code === 13; // \r
|
|
478
|
+
}
|
|
479
|
+
extractCommentsFromWhitespace(whitespaceSegment) {
|
|
480
|
+
const inlineComments = [];
|
|
481
|
+
let pos = 0;
|
|
482
|
+
while (pos < whitespaceSegment.length) {
|
|
483
|
+
const oldPos = pos;
|
|
484
|
+
// Try to extract comments using StringUtils
|
|
485
|
+
const result = stringUtils_1.StringUtils.readWhiteSpaceAndComment(whitespaceSegment, pos);
|
|
486
|
+
// Add any comments found
|
|
487
|
+
const lines = result.lines;
|
|
488
|
+
if (lines && lines.length > 0) {
|
|
489
|
+
inlineComments.push(...lines);
|
|
490
|
+
}
|
|
491
|
+
// Move position forward
|
|
492
|
+
pos = result.position;
|
|
493
|
+
// Prevent infinite loop - if position didn't advance, manually skip one character
|
|
494
|
+
if (pos === oldPos) {
|
|
495
|
+
pos++;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return inlineComments;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Skip whitespace and comments from the given position
|
|
502
|
+
*/
|
|
503
|
+
skipWhitespaceAndComments(pos) {
|
|
504
|
+
return stringUtils_1.StringUtils.readWhiteSpaceAndComment(this.input, pos).position;
|
|
505
|
+
}
|
|
506
|
+
getLineColumnInfo(startPos, endPos) {
|
|
507
|
+
const startInfo = this.getLineColumn(startPos);
|
|
508
|
+
const endInfo = this.getLineColumn(endPos);
|
|
509
|
+
return {
|
|
510
|
+
startLine: startInfo.line,
|
|
511
|
+
startColumn: startInfo.column,
|
|
512
|
+
endLine: endInfo.line,
|
|
513
|
+
endColumn: endInfo.column
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
getLineColumn(position) {
|
|
517
|
+
const starts = this.ensureLineStartPositions();
|
|
518
|
+
// Use binary search to locate the greatest line start that does not exceed position.
|
|
519
|
+
let low = 0;
|
|
520
|
+
let high = starts.length - 1;
|
|
521
|
+
while (low <= high) {
|
|
522
|
+
const mid = (low + high) >>> 1;
|
|
523
|
+
if (starts[mid] <= position) {
|
|
524
|
+
low = mid + 1;
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
high = mid - 1;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
const lineIndex = high >= 0 ? high : 0;
|
|
531
|
+
const lineStart = starts[lineIndex];
|
|
532
|
+
return {
|
|
533
|
+
line: lineIndex + 1,
|
|
534
|
+
column: position - lineStart + 1
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
ensureLineStartPositions() {
|
|
538
|
+
if (this.lineStartPositions) {
|
|
539
|
+
return this.lineStartPositions;
|
|
540
|
+
}
|
|
541
|
+
const starts = [0];
|
|
542
|
+
// Precompute the start index of each line so callers can map positions in O(log n).
|
|
543
|
+
for (let i = 0; i < this.input.length; i++) {
|
|
544
|
+
if (this.input.charCodeAt(i) === 10) { // '\n'
|
|
545
|
+
starts.push(i + 1);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
this.lineStartPositions = starts;
|
|
549
|
+
return starts;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
exports.SqlTokenizer = SqlTokenizer;
|
|
553
|
+
//# sourceMappingURL=SqlTokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlTokenizer.js","sourceRoot":"","sources":["../../src/parsers/SqlTokenizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StringSpecifierExpressionParser = void 0;
|
|
4
|
+
const Lexeme_1 = require("../models/Lexeme");
|
|
5
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
|
6
|
+
class StringSpecifierExpressionParser {
|
|
7
|
+
static parseFromLexeme(lexemes, index) {
|
|
8
|
+
let idx = index;
|
|
9
|
+
const specifer = lexemes[idx].value;
|
|
10
|
+
idx++;
|
|
11
|
+
if (idx >= lexemes.length || lexemes[idx].type !== Lexeme_1.TokenType.Literal) {
|
|
12
|
+
throw new Error(`Expected string literal after string specifier at index ${idx}`);
|
|
13
|
+
}
|
|
14
|
+
const value = lexemes[idx].value;
|
|
15
|
+
idx++;
|
|
16
|
+
// Create StringSpecifierExpression
|
|
17
|
+
const result = new ValueComponent_1.StringSpecifierExpression(specifer, value);
|
|
18
|
+
return { value: result, newIndex: idx };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.StringSpecifierExpressionParser = StringSpecifierExpressionParser;
|
|
22
|
+
//# sourceMappingURL=StringSpecifierExpressionParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringSpecifierExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/StringSpecifierExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAqF;AAErF,MAAa,+BAA+B;IACjC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACpC,GAAG,EAAE,CAAC;QACN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,OAAO,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,2DAA2D,GAAG,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACjC,GAAG,EAAE,CAAC;QACN,mCAAmC;QACnC,MAAM,MAAM,GAAG,IAAI,0CAAyB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE9D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;CACJ;AAfD,0EAeC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnaryExpressionParser = void 0;
|
|
4
|
+
const Lexeme_1 = require("../models/Lexeme");
|
|
5
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
|
6
|
+
const ValueParser_1 = require("./ValueParser");
|
|
7
|
+
class UnaryExpressionParser {
|
|
8
|
+
static parseFromLexeme(lexemes, index) {
|
|
9
|
+
let idx = index;
|
|
10
|
+
// Process unary operator
|
|
11
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Operator)) {
|
|
12
|
+
const operatorLexeme = lexemes[idx];
|
|
13
|
+
const operator = operatorLexeme.value;
|
|
14
|
+
idx++;
|
|
15
|
+
// Treat the asterisk as an Identifier, not as a unary operator
|
|
16
|
+
if (operator === '*') {
|
|
17
|
+
const v = new ValueComponent_1.ColumnReference(null, '*');
|
|
18
|
+
return { value: v, newIndex: idx };
|
|
19
|
+
}
|
|
20
|
+
// Get the right-hand side value of the unary operator
|
|
21
|
+
const result = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
22
|
+
idx = result.newIndex;
|
|
23
|
+
// Create unary expression
|
|
24
|
+
const value = new ValueComponent_1.UnaryExpression(operator, result.value);
|
|
25
|
+
if (operatorLexeme.positionedComments && operatorLexeme.positionedComments.length > 0) {
|
|
26
|
+
// Carry positioned comments from the operator token onto the expression for precise placement
|
|
27
|
+
value.positionedComments = operatorLexeme.positionedComments;
|
|
28
|
+
}
|
|
29
|
+
else if (operatorLexeme.comments && operatorLexeme.comments.length > 0) {
|
|
30
|
+
// Fallback for legacy comment collection so older paths still retain notes
|
|
31
|
+
value.comments = operatorLexeme.comments;
|
|
32
|
+
}
|
|
33
|
+
return { value, newIndex: idx };
|
|
34
|
+
}
|
|
35
|
+
throw new Error(`Invalid unary expression at index ${index}: ${lexemes[index].value}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.UnaryExpressionParser = UnaryExpressionParser;
|
|
39
|
+
//# sourceMappingURL=UnaryExpressionParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnaryExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/UnaryExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAA8G;AAC9G,+CAA4C;AAE5C,MAAa,qBAAqB;IACvB,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,yBAAyB;QACzB,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,kBAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC;YACtC,GAAG,EAAE,CAAC;YAEN,+DAA+D;YAC/D,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,gCAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACzC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACvC,CAAC;YAED,sDAAsD;YACtD,MAAM,MAAM,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACzD,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEtB,0BAA0B;YAC1B,MAAM,KAAK,GAAG,IAAI,gCAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAE1D,IAAI,cAAc,CAAC,kBAAkB,IAAI,cAAc,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpF,8FAA8F;gBAC9F,KAAK,CAAC,kBAAkB,GAAG,cAAc,CAAC,kBAAkB,CAAC;YACjE,CAAC;iBAAM,IAAI,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvE,2EAA2E;gBAC3E,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;YAC7C,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC;CACJ;AApCD,sDAoCC"}
|