rawsql-ts 0.12.0 → 0.12.1
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/dist/esm/formatters/OriginalFormatRestorer.js.map +1 -0
- package/dist/esm/index.d.ts +119 -0
- package/dist/esm/index.js +95 -80
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +19 -19
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/models/BinarySelectQuery.js.map +1 -0
- package/dist/esm/models/CTEError.js.map +1 -0
- package/dist/esm/models/Clause.d.ts +313 -0
- package/dist/esm/models/Clause.js +496 -0
- package/dist/esm/models/Clause.js.map +1 -0
- package/dist/esm/models/CreateTableQuery.js.map +1 -0
- package/dist/esm/models/DDLStatements.d.ts +207 -0
- package/dist/esm/models/DDLStatements.js +213 -0
- package/dist/esm/models/DDLStatements.js.map +1 -0
- package/dist/esm/models/DeleteQuery.js.map +1 -0
- package/dist/esm/models/HintClause.js.map +1 -0
- package/dist/esm/models/InsertQuery.d.ts +19 -0
- package/dist/esm/models/InsertQuery.js +19 -0
- package/dist/esm/models/InsertQuery.js.map +1 -0
- package/dist/esm/models/KeywordTrie.js.map +1 -0
- package/dist/esm/models/Lexeme.js.map +1 -0
- package/dist/esm/models/MergeQuery.js.map +1 -0
- package/dist/esm/models/SelectQuery.js.map +1 -0
- package/dist/esm/models/SimpleSelectQuery.js.map +1 -0
- package/dist/esm/models/SqlComponent.js.map +1 -0
- package/dist/esm/models/SqlPrintToken.d.ts +143 -0
- package/dist/esm/models/SqlPrintToken.js +134 -0
- package/dist/esm/models/SqlPrintToken.js.map +1 -0
- package/dist/esm/models/TableDefinitionModel.d.ts +39 -0
- package/dist/esm/models/TableDefinitionModel.js +77 -0
- package/dist/esm/models/TableDefinitionModel.js.map +1 -0
- package/dist/esm/models/UpdateQuery.js.map +1 -0
- package/dist/esm/models/ValueComponent.d.ts +225 -0
- package/dist/esm/models/ValueComponent.js +349 -0
- package/dist/esm/models/ValueComponent.js.map +1 -0
- package/dist/esm/models/ValuesQuery.d.ts +54 -0
- package/dist/esm/models/ValuesQuery.js +58 -0
- package/dist/esm/models/ValuesQuery.js.map +1 -0
- package/dist/esm/parsers/AlterTableParser.js +449 -0
- package/dist/esm/parsers/AlterTableParser.js.map +1 -0
- package/dist/esm/parsers/AnalyzeStatementParser.js.map +1 -0
- package/dist/esm/parsers/CommandExpressionParser.js.map +1 -0
- package/dist/esm/parsers/CommonTableParser.js.map +1 -0
- package/dist/esm/parsers/CreateIndexParser.js.map +1 -0
- package/dist/esm/parsers/CreateTableParser.js.map +1 -0
- package/dist/esm/parsers/DeleteClauseParser.js.map +1 -0
- package/dist/esm/parsers/DeleteQueryParser.js.map +1 -0
- package/dist/esm/parsers/DropConstraintParser.js.map +1 -0
- package/dist/esm/parsers/DropIndexParser.js.map +1 -0
- package/dist/esm/parsers/DropTableParser.js.map +1 -0
- package/dist/esm/parsers/ExplainStatementParser.js.map +1 -0
- package/dist/esm/parsers/FetchClauseParser.js.map +1 -0
- package/dist/esm/parsers/ForClauseParser.js.map +1 -0
- package/dist/esm/parsers/FromClauseParser.js.map +1 -0
- package/dist/esm/parsers/FullNameParser.js.map +1 -0
- package/dist/esm/parsers/FunctionExpressionParser.d.ts +65 -0
- package/dist/esm/parsers/FunctionExpressionParser.js +520 -0
- package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -0
- package/dist/esm/parsers/GroupByParser.js.map +1 -0
- package/dist/esm/parsers/HavingParser.js.map +1 -0
- package/dist/esm/parsers/IdentifierDecorator.js.map +1 -0
- package/dist/esm/parsers/IdentifierParser.js.map +1 -0
- package/dist/esm/parsers/InsertQueryParser.js +158 -0
- package/dist/esm/parsers/InsertQueryParser.js.map +1 -0
- package/dist/esm/parsers/JoinClauseParser.js.map +1 -0
- package/dist/esm/parsers/JoinOnClauseParser.js.map +1 -0
- package/dist/esm/parsers/JoinUsingClauseParser.js.map +1 -0
- package/dist/esm/parsers/KeywordParser.js.map +1 -0
- package/dist/esm/parsers/LimitClauseParser.js.map +1 -0
- package/dist/esm/parsers/LiteralParser.js.map +1 -0
- package/dist/esm/parsers/MergeQueryParser.js.map +1 -0
- package/dist/esm/parsers/OffsetClauseParser.js.map +1 -0
- package/dist/esm/parsers/OrderByClauseParser.js.map +1 -0
- package/dist/esm/parsers/OverExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ParameterDecorator.js.map +1 -0
- package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ParenExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ParseError.js.map +1 -0
- package/dist/esm/parsers/PartitionByParser.js.map +1 -0
- package/dist/esm/parsers/ReturningClauseParser.js +60 -0
- package/dist/esm/parsers/ReturningClauseParser.js.map +1 -0
- package/dist/esm/parsers/SelectClauseParser.js.map +1 -0
- package/dist/esm/parsers/SelectQueryParser.js.map +1 -0
- package/dist/esm/parsers/SetClauseParser.js.map +1 -0
- package/dist/esm/parsers/SourceAliasExpressionParser.js.map +1 -0
- package/dist/esm/parsers/SourceExpressionParser.js.map +1 -0
- package/dist/esm/parsers/SourceParser.js.map +1 -0
- package/dist/esm/parsers/SqlParser.d.ts +39 -0
- package/dist/esm/parsers/SqlParser.js +386 -0
- package/dist/esm/parsers/SqlParser.js.map +1 -0
- package/dist/esm/parsers/SqlPrintTokenParser.d.ts +315 -0
- package/dist/esm/parsers/SqlPrintTokenParser.js +3139 -0
- package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -0
- package/dist/esm/parsers/SqlTokenizer.js.map +1 -0
- package/dist/esm/parsers/StringSpecifierExpressionParser.js.map +1 -0
- package/dist/esm/parsers/UnaryExpressionParser.js.map +1 -0
- package/dist/esm/parsers/UpdateClauseParser.js.map +1 -0
- package/dist/esm/parsers/UpdateQueryParser.js.map +1 -0
- package/dist/esm/parsers/UsingClauseParser.js.map +1 -0
- package/dist/esm/parsers/ValueParser.js +558 -0
- package/dist/esm/parsers/ValueParser.js.map +1 -0
- package/dist/esm/parsers/ValuesQueryParser.js.map +1 -0
- package/dist/esm/parsers/WhereClauseParser.js.map +1 -0
- package/dist/esm/parsers/WindowClauseParser.js.map +1 -0
- package/dist/esm/parsers/WindowExpressionParser.js.map +1 -0
- package/dist/esm/parsers/WithClauseParser.js.map +1 -0
- package/dist/esm/parsers/utils/LexemeCommentUtils.js.map +1 -0
- package/dist/esm/reporting/models/DataFlowEdge.js.map +1 -0
- package/dist/esm/reporting/models/DataFlowGraph.js.map +1 -0
- package/dist/esm/reporting/models/DataFlowNode.js.map +1 -0
- package/dist/esm/reporting/services/CTEHandler.js.map +1 -0
- package/dist/esm/reporting/services/DataSourceHandler.js.map +1 -0
- package/dist/esm/reporting/services/JoinHandler.js.map +1 -0
- package/dist/esm/reporting/services/ProcessHandler.js.map +1 -0
- package/dist/esm/tokenReaders/BaseTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/FunctionTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/IdentifierTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/LiteralTokenReader.js +325 -0
- package/dist/esm/tokenReaders/LiteralTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/OperatorTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/ParameterTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/SymbolTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/TokenReaderManager.js.map +1 -0
- package/dist/esm/tokenReaders/TypeTokenReader.js.map +1 -0
- package/dist/esm/transformers/AliasRenamer.js.map +1 -0
- package/dist/esm/transformers/CTEBuilder.js.map +1 -0
- package/dist/esm/transformers/CTECollector.js.map +1 -0
- package/dist/esm/transformers/CTEComposer.js.map +1 -0
- package/dist/esm/transformers/CTEDependencyAnalyzer.js.map +1 -0
- package/dist/esm/transformers/CTEDependencyTracer.js.map +1 -0
- package/dist/esm/transformers/CTEDisabler.js.map +1 -0
- package/dist/esm/transformers/CTEInjector.js.map +1 -0
- package/dist/esm/transformers/CTENormalizer.js.map +1 -0
- package/dist/esm/transformers/CTEQueryDecomposer.js.map +1 -0
- package/dist/esm/transformers/CTERenamer.js.map +1 -0
- package/dist/esm/transformers/CTETableReferenceCollector.js.map +1 -0
- package/dist/esm/transformers/ColumnReferenceCollector.js +474 -0
- package/dist/esm/transformers/ColumnReferenceCollector.js.map +1 -0
- package/dist/esm/transformers/DDLDiffGenerator.d.ts +18 -0
- package/dist/esm/transformers/DDLDiffGenerator.js +309 -0
- package/dist/esm/transformers/DDLDiffGenerator.js.map +1 -0
- package/dist/esm/transformers/DDLGeneralizer.d.ts +13 -0
- package/dist/esm/transformers/DDLGeneralizer.js +98 -0
- package/dist/esm/transformers/DDLGeneralizer.js.map +1 -0
- package/dist/esm/transformers/DDLToFixtureConverter.d.ts +19 -0
- package/dist/esm/transformers/DDLToFixtureConverter.js +202 -0
- package/dist/esm/transformers/DDLToFixtureConverter.js.map +1 -0
- package/dist/esm/transformers/DeleteResultSelectConverter.d.ts +53 -0
- package/dist/esm/transformers/DeleteResultSelectConverter.js +410 -0
- package/dist/esm/transformers/DeleteResultSelectConverter.js.map +1 -0
- package/dist/esm/transformers/DynamicQueryBuilder.js.map +1 -0
- package/dist/esm/transformers/EnhancedJsonMapping.js.map +1 -0
- package/dist/esm/transformers/FilterableItemCollector.js.map +1 -0
- package/dist/esm/transformers/FixtureCteBuilder.d.ts +60 -0
- package/dist/esm/transformers/FixtureCteBuilder.js +147 -0
- package/dist/esm/transformers/FixtureCteBuilder.js.map +1 -0
- package/dist/esm/transformers/FormatOptionResolver.js.map +1 -0
- package/dist/esm/transformers/Formatter.js.map +1 -0
- package/dist/esm/transformers/InsertQuerySelectValuesConverter.js +121 -0
- package/dist/esm/transformers/InsertQuerySelectValuesConverter.js.map +1 -0
- package/dist/esm/transformers/InsertResultSelectConverter.d.ts +67 -0
- package/dist/esm/transformers/InsertResultSelectConverter.js +585 -0
- package/dist/esm/transformers/InsertResultSelectConverter.js.map +1 -0
- package/dist/esm/transformers/JoinAggregationDecomposer.js.map +1 -0
- package/dist/esm/transformers/JsonMappingConverter.js.map +1 -0
- package/dist/esm/transformers/JsonMappingUnifier.js.map +1 -0
- package/dist/esm/transformers/LinePrinter.js.map +1 -0
- package/dist/esm/transformers/MergeResultSelectConverter.d.ts +38 -0
- package/dist/esm/transformers/MergeResultSelectConverter.js +306 -0
- package/dist/esm/transformers/MergeResultSelectConverter.js.map +1 -0
- package/dist/esm/transformers/ModelDrivenJsonMapping.js.map +1 -0
- package/dist/esm/transformers/OnelineFormattingHelper.js.map +1 -0
- package/dist/esm/transformers/ParameterCollector.js.map +1 -0
- package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
- package/dist/esm/transformers/PostgresJsonQueryBuilder.js.map +1 -0
- package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js.map +1 -0
- package/dist/esm/transformers/QueryBuilder.d.ts +130 -0
- package/dist/esm/transformers/QueryBuilder.js +634 -0
- package/dist/esm/transformers/QueryBuilder.js.map +1 -0
- package/dist/esm/transformers/QueryFlowDiagramGenerator.js.map +1 -0
- package/dist/esm/transformers/SchemaCollector.js.map +1 -0
- package/dist/esm/transformers/SelectResultSelectConverter.d.ts +10 -0
- package/dist/esm/transformers/SelectResultSelectConverter.js +32 -0
- package/dist/esm/transformers/SelectResultSelectConverter.js.map +1 -0
- package/dist/esm/transformers/SelectValueCollector.js.map +1 -0
- package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -0
- package/dist/esm/transformers/SimulatedSelectConverter.d.ts +23 -0
- package/dist/esm/transformers/SimulatedSelectConverter.js +61 -0
- package/dist/esm/transformers/SimulatedSelectConverter.js.map +1 -0
- package/dist/esm/transformers/SmartRenamer.js.map +1 -0
- package/dist/esm/transformers/SqlFormatter.js.map +1 -0
- package/dist/esm/transformers/SqlIdentifierRenamer.js.map +1 -0
- package/dist/esm/transformers/SqlOutputToken.js.map +1 -0
- package/dist/esm/transformers/SqlPaginationInjector.js.map +1 -0
- package/dist/esm/transformers/SqlParamInjector.js.map +1 -0
- package/dist/esm/transformers/SqlParameterBinder.js.map +1 -0
- package/dist/esm/transformers/SqlPrinter.js +1474 -0
- package/dist/esm/transformers/SqlPrinter.js.map +1 -0
- package/dist/esm/transformers/SqlSortInjector.js.map +1 -0
- package/dist/esm/transformers/TableSourceCollector.js +435 -0
- package/dist/esm/transformers/TableSourceCollector.js.map +1 -0
- package/dist/esm/transformers/TypeTransformationPostProcessor.js.map +1 -0
- package/dist/esm/transformers/UpdateResultSelectConverter.d.ts +51 -0
- package/dist/esm/transformers/UpdateResultSelectConverter.js +355 -0
- package/dist/esm/transformers/UpdateResultSelectConverter.js.map +1 -0
- package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -0
- package/dist/esm/types/GenericFixture.d.ts +17 -0
- package/dist/esm/types/GenericFixture.js +2 -0
- package/dist/esm/types/GenericFixture.js.map +1 -0
- package/dist/esm/utils/CTERegionDetector.js.map +1 -0
- package/dist/esm/utils/CommentEditor.js.map +1 -0
- package/dist/esm/utils/CommentUtils.js.map +1 -0
- package/dist/esm/utils/CursorContextAnalyzer.js.map +1 -0
- package/dist/esm/utils/IntelliSenseApi.js.map +1 -0
- package/dist/esm/utils/JsonSchemaValidator.js.map +1 -0
- package/dist/esm/utils/KeywordCache.js.map +1 -0
- package/dist/esm/utils/LexemeCursor.js.map +1 -0
- package/dist/esm/utils/MultiQuerySplitter.js.map +1 -0
- package/dist/esm/utils/OperatorPrecedence.js.map +1 -0
- package/dist/esm/utils/ParameterDetector.js.map +1 -0
- package/dist/esm/utils/ParameterHelper.js.map +1 -0
- package/dist/esm/utils/ParameterRemover.js +779 -0
- package/dist/esm/utils/ParameterRemover.js.map +1 -0
- package/dist/esm/utils/ParserStringUtils.js.map +1 -0
- package/dist/esm/utils/PositionAwareParser.js.map +1 -0
- package/dist/esm/utils/SchemaManager.js.map +1 -0
- package/dist/esm/utils/ScopeResolver.js.map +1 -0
- package/dist/esm/utils/SelectQueryWithClauseHelper.d.ts +12 -0
- package/dist/esm/utils/SelectQueryWithClauseHelper.js +43 -0
- package/dist/esm/utils/SelectQueryWithClauseHelper.js.map +1 -0
- package/dist/esm/utils/SqlSchemaValidator.js.map +1 -0
- package/dist/esm/utils/TableNameUtils.d.ts +10 -0
- package/dist/esm/utils/TableNameUtils.js +30 -0
- package/dist/esm/utils/TableNameUtils.js.map +1 -0
- package/dist/esm/utils/TextPositionUtils.js.map +1 -0
- package/dist/esm/utils/ValueComponentRewriter.d.ts +3 -0
- package/dist/esm/utils/ValueComponentRewriter.js +184 -0
- package/dist/esm/utils/ValueComponentRewriter.js.map +1 -0
- package/dist/esm/utils/charLookupTable.js.map +1 -0
- package/dist/esm/utils/stringUtils.js.map +1 -0
- package/dist/formatters/OriginalFormatRestorer.js.map +1 -0
- package/dist/index.js +142 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +20 -20
- package/dist/index.min.js.map +4 -4
- package/dist/models/BinarySelectQuery.js.map +1 -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.map +1 -0
- package/dist/models/DDLStatements.js +229 -0
- package/dist/models/DDLStatements.js.map +1 -0
- package/dist/models/DeleteQuery.js.map +1 -0
- package/dist/models/FormattingLexeme.js.map +1 -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.map +1 -0
- package/dist/models/Lexeme.js.map +1 -0
- package/dist/models/MergeQuery.js.map +1 -0
- package/dist/models/SelectQuery.js.map +1 -0
- package/dist/models/SimpleSelectQuery.js.map +1 -0
- package/dist/models/SqlComponent.js.map +1 -0
- package/dist/models/SqlPrintToken.js +138 -0
- package/dist/models/SqlPrintToken.js.map +1 -0
- package/dist/models/TableDefinitionModel.js +85 -0
- package/dist/models/TableDefinitionModel.js.map +1 -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 +453 -0
- package/dist/parsers/AlterTableParser.js.map +1 -0
- package/dist/parsers/AnalyzeStatementParser.js.map +1 -0
- package/dist/parsers/CommandExpressionParser.js.map +1 -0
- package/dist/parsers/CommonTableParser.js.map +1 -0
- package/dist/parsers/CreateIndexParser.js.map +1 -0
- package/dist/parsers/CreateTableParser.js.map +1 -0
- package/dist/parsers/DeleteClauseParser.js.map +1 -0
- package/dist/parsers/DeleteQueryParser.js.map +1 -0
- package/dist/parsers/DropConstraintParser.js.map +1 -0
- package/dist/parsers/DropIndexParser.js.map +1 -0
- package/dist/parsers/DropTableParser.js.map +1 -0
- package/dist/parsers/ExplainStatementParser.js.map +1 -0
- package/dist/parsers/FetchClauseParser.js.map +1 -0
- package/dist/parsers/ForClauseParser.js.map +1 -0
- package/dist/parsers/FromClauseParser.js.map +1 -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.map +1 -0
- package/dist/parsers/HavingParser.js.map +1 -0
- package/dist/parsers/IdentifierDecorator.js.map +1 -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.map +1 -0
- package/dist/parsers/JoinOnClauseParser.js.map +1 -0
- package/dist/parsers/JoinUsingClauseParser.js.map +1 -0
- package/dist/parsers/KeywordParser.js.map +1 -0
- package/dist/parsers/LimitClauseParser.js.map +1 -0
- package/dist/parsers/LiteralParser.js.map +1 -0
- package/dist/parsers/MergeQueryParser.js.map +1 -0
- package/dist/parsers/OffsetClauseParser.js.map +1 -0
- package/dist/parsers/OrderByClauseParser.js.map +1 -0
- package/dist/parsers/OverExpressionParser.js.map +1 -0
- package/dist/parsers/ParameterDecorator.js.map +1 -0
- package/dist/parsers/ParameterExpressionParser.js.map +1 -0
- package/dist/parsers/ParenExpressionParser.js.map +1 -0
- package/dist/parsers/ParseError.js.map +1 -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.map +1 -0
- package/dist/parsers/SelectQueryParser.js.map +1 -0
- package/dist/parsers/SetClauseParser.js.map +1 -0
- package/dist/parsers/SourceAliasExpressionParser.js.map +1 -0
- package/dist/parsers/SourceExpressionParser.js.map +1 -0
- package/dist/parsers/SourceParser.js.map +1 -0
- package/dist/parsers/SqlParser.js +390 -0
- package/dist/parsers/SqlParser.js.map +1 -0
- package/dist/parsers/SqlPrintTokenParser.js +3143 -0
- package/dist/parsers/SqlPrintTokenParser.js.map +1 -0
- package/dist/parsers/SqlTokenizer.js.map +1 -0
- package/dist/parsers/StringSpecifierExpressionParser.js.map +1 -0
- package/dist/parsers/UnaryExpressionParser.js.map +1 -0
- package/dist/parsers/UpdateClauseParser.js.map +1 -0
- package/dist/parsers/UpdateQueryParser.js.map +1 -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.map +1 -0
- package/dist/parsers/WhereClauseParser.js.map +1 -0
- package/dist/parsers/WindowClauseParser.js.map +1 -0
- package/dist/parsers/WindowExpressionParser.js.map +1 -0
- package/dist/parsers/WithClauseParser.js.map +1 -0
- package/dist/parsers/utils/LexemeCommentUtils.js.map +1 -0
- package/dist/reporting/models/DataFlowEdge.js.map +1 -0
- package/dist/reporting/models/DataFlowGraph.js.map +1 -0
- package/dist/reporting/models/DataFlowNode.js.map +1 -0
- package/dist/reporting/services/CTEHandler.js.map +1 -0
- package/dist/reporting/services/DataSourceHandler.js.map +1 -0
- package/dist/reporting/services/JoinHandler.js.map +1 -0
- package/dist/reporting/services/ProcessHandler.js.map +1 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/models/Clause.d.ts +7 -3
- package/dist/src/models/DDLStatements.d.ts +14 -2
- package/dist/src/models/InsertQuery.d.ts +1 -4
- package/dist/src/models/SqlPrintToken.d.ts +1 -0
- package/dist/src/models/TableDefinitionModel.d.ts +39 -0
- package/dist/src/models/ValueComponent.d.ts +2 -1
- package/dist/src/models/ValuesQuery.d.ts +2 -0
- package/dist/src/parsers/FunctionExpressionParser.d.ts +1 -0
- package/dist/src/parsers/SqlParser.d.ts +0 -1
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +4 -0
- package/dist/src/transformers/DDLDiffGenerator.d.ts +18 -0
- package/dist/src/transformers/DDLGeneralizer.d.ts +13 -0
- package/dist/src/transformers/DDLToFixtureConverter.d.ts +19 -0
- package/dist/src/transformers/DeleteResultSelectConverter.d.ts +53 -0
- package/dist/src/transformers/FixtureCteBuilder.d.ts +60 -0
- package/dist/src/transformers/InsertResultSelectConverter.d.ts +67 -0
- package/dist/src/transformers/MergeResultSelectConverter.d.ts +38 -0
- package/dist/src/transformers/QueryBuilder.d.ts +11 -0
- package/dist/src/transformers/SelectResultSelectConverter.d.ts +10 -0
- package/dist/src/transformers/SimulatedSelectConverter.d.ts +23 -0
- package/dist/src/transformers/UpdateResultSelectConverter.d.ts +51 -0
- package/dist/src/types/GenericFixture.d.ts +17 -0
- package/dist/src/utils/SelectQueryWithClauseHelper.d.ts +12 -0
- package/dist/src/utils/TableNameUtils.d.ts +10 -0
- package/dist/src/utils/ValueComponentRewriter.d.ts +3 -0
- package/dist/tokenReaders/BaseTokenReader.js.map +1 -0
- package/dist/tokenReaders/CommandTokenReader.js.map +1 -0
- package/dist/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -0
- package/dist/tokenReaders/FunctionTokenReader.js.map +1 -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.map +1 -0
- package/dist/tokenReaders/ParameterTokenReader.js.map +1 -0
- package/dist/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
- package/dist/tokenReaders/SymbolTokenReader.js.map +1 -0
- package/dist/tokenReaders/TokenReaderManager.js.map +1 -0
- package/dist/tokenReaders/TypeTokenReader.js.map +1 -0
- package/dist/transformers/AliasRenamer.js.map +1 -0
- package/dist/transformers/CTEBuilder.js.map +1 -0
- package/dist/transformers/CTECollector.js.map +1 -0
- package/dist/transformers/CTEComposer.js.map +1 -0
- package/dist/transformers/CTEDependencyAnalyzer.js.map +1 -0
- package/dist/transformers/CTEDependencyTracer.js.map +1 -0
- package/dist/transformers/CTEDisabler.js.map +1 -0
- package/dist/transformers/CTEInjector.js.map +1 -0
- package/dist/transformers/CTENormalizer.js.map +1 -0
- package/dist/transformers/CTEQueryDecomposer.js.map +1 -0
- package/dist/transformers/CTERenamer.js.map +1 -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.map +1 -0
- package/dist/transformers/EnhancedJsonMapping.js.map +1 -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.map +1 -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.map +1 -0
- package/dist/transformers/JsonMappingConverter.js.map +1 -0
- package/dist/transformers/JsonMappingUnifier.js.map +1 -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.map +1 -0
- package/dist/transformers/OnelineFormattingHelper.js.map +1 -0
- package/dist/transformers/ParameterCollector.js.map +1 -0
- package/dist/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
- package/dist/transformers/PostgresJsonQueryBuilder.js.map +1 -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.map +1 -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.map +1 -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.map +1 -0
- package/dist/transformers/SqlFormatter.js.map +1 -0
- package/dist/transformers/SqlIdentifierRenamer.js.map +1 -0
- package/dist/transformers/SqlOutputToken.js.map +1 -0
- package/dist/transformers/SqlPaginationInjector.js.map +1 -0
- package/dist/transformers/SqlParamInjector.js.map +1 -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.map +1 -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.map +1 -0
- package/dist/transformers/UpdateResultSelectConverter.js +359 -0
- package/dist/transformers/UpdateResultSelectConverter.js.map +1 -0
- package/dist/transformers/UpstreamSelectQueryFinder.js.map +1 -0
- package/dist/tsconfig.browser.tsbuildinfo +1 -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.map +1 -0
- package/dist/utils/CommentEditor.js.map +1 -0
- package/dist/utils/CommentUtils.js.map +1 -0
- package/dist/utils/CursorContextAnalyzer.js.map +1 -0
- package/dist/utils/IntelliSenseApi.js.map +1 -0
- package/dist/utils/JsonSchemaValidator.js.map +1 -0
- package/dist/utils/KeywordCache.js.map +1 -0
- package/dist/utils/LexemeCursor.js.map +1 -0
- package/dist/utils/MultiQuerySplitter.js.map +1 -0
- package/dist/utils/OperatorPrecedence.js.map +1 -0
- package/dist/utils/ParameterDetector.js.map +1 -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.map +1 -0
- package/dist/utils/PositionAwareParser.js.map +1 -0
- package/dist/utils/SchemaManager.js.map +1 -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.map +1 -0
- package/dist/utils/TableNameUtils.js +35 -0
- package/dist/utils/TableNameUtils.js.map +1 -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.map +1 -0
- package/dist/utils/stringUtils.js.map +1 -0
- package/package.json +4 -5
- package/dist/esm/src/formatters/OriginalFormatRestorer.js.map +0 -1
- package/dist/esm/src/index.d.ts +0 -104
- package/dist/esm/src/index.js +0 -100
- package/dist/esm/src/index.js.map +0 -1
- package/dist/esm/src/models/BinarySelectQuery.js.map +0 -1
- package/dist/esm/src/models/CTEError.js.map +0 -1
- package/dist/esm/src/models/Clause.d.ts +0 -309
- package/dist/esm/src/models/Clause.js +0 -483
- package/dist/esm/src/models/Clause.js.map +0 -1
- package/dist/esm/src/models/CreateTableQuery.js.map +0 -1
- package/dist/esm/src/models/DDLStatements.d.ts +0 -195
- package/dist/esm/src/models/DDLStatements.js +0 -201
- package/dist/esm/src/models/DDLStatements.js.map +0 -1
- package/dist/esm/src/models/DeleteQuery.js.map +0 -1
- package/dist/esm/src/models/FormattingLexeme.js.map +0 -1
- package/dist/esm/src/models/HintClause.js.map +0 -1
- package/dist/esm/src/models/InsertQuery.d.ts +0 -22
- package/dist/esm/src/models/InsertQuery.js +0 -21
- package/dist/esm/src/models/InsertQuery.js.map +0 -1
- package/dist/esm/src/models/KeywordTrie.js.map +0 -1
- package/dist/esm/src/models/Lexeme.js.map +0 -1
- package/dist/esm/src/models/MergeQuery.js.map +0 -1
- package/dist/esm/src/models/SelectQuery.js.map +0 -1
- package/dist/esm/src/models/SimpleSelectQuery.js.map +0 -1
- package/dist/esm/src/models/SqlComponent.js.map +0 -1
- package/dist/esm/src/models/SqlPrintToken.d.ts +0 -142
- package/dist/esm/src/models/SqlPrintToken.js +0 -133
- package/dist/esm/src/models/SqlPrintToken.js.map +0 -1
- package/dist/esm/src/models/UpdateQuery.js.map +0 -1
- package/dist/esm/src/models/ValueComponent.d.ts +0 -224
- package/dist/esm/src/models/ValueComponent.js +0 -348
- package/dist/esm/src/models/ValueComponent.js.map +0 -1
- package/dist/esm/src/models/ValuesQuery.d.ts +0 -52
- package/dist/esm/src/models/ValuesQuery.js +0 -57
- package/dist/esm/src/models/ValuesQuery.js.map +0 -1
- package/dist/esm/src/parsers/AlterTableParser.js +0 -428
- package/dist/esm/src/parsers/AlterTableParser.js.map +0 -1
- package/dist/esm/src/parsers/AnalyzeStatementParser.js.map +0 -1
- package/dist/esm/src/parsers/CommandExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/CommonTableParser.js.map +0 -1
- package/dist/esm/src/parsers/CreateIndexParser.js.map +0 -1
- package/dist/esm/src/parsers/CreateTableParser.js.map +0 -1
- package/dist/esm/src/parsers/DeleteClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/DeleteQueryParser.js.map +0 -1
- package/dist/esm/src/parsers/DropConstraintParser.js.map +0 -1
- package/dist/esm/src/parsers/DropIndexParser.js.map +0 -1
- package/dist/esm/src/parsers/DropTableParser.js.map +0 -1
- package/dist/esm/src/parsers/ExplainStatementParser.js.map +0 -1
- package/dist/esm/src/parsers/FetchClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/ForClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/FromClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/FullNameParser.js.map +0 -1
- package/dist/esm/src/parsers/FunctionExpressionParser.d.ts +0 -64
- package/dist/esm/src/parsers/FunctionExpressionParser.js +0 -487
- package/dist/esm/src/parsers/FunctionExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/GroupByParser.js.map +0 -1
- package/dist/esm/src/parsers/HavingParser.js.map +0 -1
- package/dist/esm/src/parsers/IdentifierDecorator.js.map +0 -1
- package/dist/esm/src/parsers/IdentifierParser.js.map +0 -1
- package/dist/esm/src/parsers/InsertQueryParser.js +0 -155
- package/dist/esm/src/parsers/InsertQueryParser.js.map +0 -1
- package/dist/esm/src/parsers/JoinClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/JoinOnClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/JoinUsingClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/KeywordParser.js.map +0 -1
- package/dist/esm/src/parsers/LimitClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/LiteralParser.js.map +0 -1
- package/dist/esm/src/parsers/MergeQueryParser.js.map +0 -1
- package/dist/esm/src/parsers/OffsetClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/OrderByClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/OverExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/ParameterDecorator.js.map +0 -1
- package/dist/esm/src/parsers/ParameterExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/ParenExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/ParseError.js.map +0 -1
- package/dist/esm/src/parsers/PartitionByParser.js.map +0 -1
- package/dist/esm/src/parsers/ReturningClauseParser.js +0 -74
- package/dist/esm/src/parsers/ReturningClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/SelectClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/SelectQueryParser.js.map +0 -1
- package/dist/esm/src/parsers/SetClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/SourceAliasExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/SourceExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/SourceParser.js.map +0 -1
- package/dist/esm/src/parsers/SqlParser.d.ts +0 -40
- package/dist/esm/src/parsers/SqlParser.js +0 -400
- package/dist/esm/src/parsers/SqlParser.js.map +0 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +0 -311
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +0 -3058
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +0 -1
- package/dist/esm/src/parsers/SqlTokenizer.js.map +0 -1
- package/dist/esm/src/parsers/StringSpecifierExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/UnaryExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/UpdateClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/UpdateQueryParser.js.map +0 -1
- package/dist/esm/src/parsers/UsingClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/ValueParser.js +0 -531
- package/dist/esm/src/parsers/ValueParser.js.map +0 -1
- package/dist/esm/src/parsers/ValuesQueryParser.js.map +0 -1
- package/dist/esm/src/parsers/WhereClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/WindowClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/WindowExpressionParser.js.map +0 -1
- package/dist/esm/src/parsers/WithClauseParser.js.map +0 -1
- package/dist/esm/src/parsers/utils/LexemeCommentUtils.js.map +0 -1
- package/dist/esm/src/reporting/models/DataFlowEdge.js.map +0 -1
- package/dist/esm/src/reporting/models/DataFlowGraph.js.map +0 -1
- package/dist/esm/src/reporting/models/DataFlowNode.js.map +0 -1
- package/dist/esm/src/reporting/services/CTEHandler.js.map +0 -1
- package/dist/esm/src/reporting/services/DataSourceHandler.js.map +0 -1
- package/dist/esm/src/reporting/services/JoinHandler.js.map +0 -1
- package/dist/esm/src/reporting/services/ProcessHandler.js.map +0 -1
- package/dist/esm/src/tokenReaders/BaseTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/CommandTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/EscapedIdentifierTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/FunctionTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/IdentifierTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js +0 -318
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/ParameterTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/StringSpecifierTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/SymbolTokenReader.js.map +0 -1
- package/dist/esm/src/tokenReaders/TokenReaderManager.js.map +0 -1
- package/dist/esm/src/tokenReaders/TypeTokenReader.js.map +0 -1
- package/dist/esm/src/transformers/AliasRenamer.js.map +0 -1
- package/dist/esm/src/transformers/CTEBuilder.js.map +0 -1
- package/dist/esm/src/transformers/CTECollector.js.map +0 -1
- package/dist/esm/src/transformers/CTEComposer.js.map +0 -1
- package/dist/esm/src/transformers/CTEDependencyAnalyzer.js.map +0 -1
- package/dist/esm/src/transformers/CTEDependencyTracer.js.map +0 -1
- package/dist/esm/src/transformers/CTEDisabler.js.map +0 -1
- package/dist/esm/src/transformers/CTEInjector.js.map +0 -1
- package/dist/esm/src/transformers/CTENormalizer.js.map +0 -1
- package/dist/esm/src/transformers/CTEQueryDecomposer.js.map +0 -1
- package/dist/esm/src/transformers/CTERenamer.js.map +0 -1
- package/dist/esm/src/transformers/CTETableReferenceCollector.js.map +0 -1
- package/dist/esm/src/transformers/ColumnReferenceCollector.js +0 -464
- package/dist/esm/src/transformers/ColumnReferenceCollector.js.map +0 -1
- package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +0 -1
- package/dist/esm/src/transformers/EnhancedJsonMapping.js.map +0 -1
- package/dist/esm/src/transformers/FilterableItemCollector.js.map +0 -1
- package/dist/esm/src/transformers/FormatOptionResolver.js.map +0 -1
- package/dist/esm/src/transformers/Formatter.js.map +0 -1
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js +0 -118
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js.map +0 -1
- package/dist/esm/src/transformers/JoinAggregationDecomposer.js.map +0 -1
- package/dist/esm/src/transformers/JsonMappingConverter.js.map +0 -1
- package/dist/esm/src/transformers/JsonMappingUnifier.js.map +0 -1
- package/dist/esm/src/transformers/LinePrinter.js.map +0 -1
- package/dist/esm/src/transformers/ModelDrivenJsonMapping.js.map +0 -1
- package/dist/esm/src/transformers/OnelineFormattingHelper.js.map +0 -1
- package/dist/esm/src/transformers/ParameterCollector.js.map +0 -1
- package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js.map +0 -1
- package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js.map +0 -1
- package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js.map +0 -1
- package/dist/esm/src/transformers/QueryBuilder.d.ts +0 -119
- package/dist/esm/src/transformers/QueryBuilder.js +0 -618
- package/dist/esm/src/transformers/QueryBuilder.js.map +0 -1
- package/dist/esm/src/transformers/QueryFlowDiagramGenerator.js.map +0 -1
- package/dist/esm/src/transformers/SchemaCollector.js.map +0 -1
- package/dist/esm/src/transformers/SelectValueCollector.js.map +0 -1
- package/dist/esm/src/transformers/SelectableColumnCollector.js.map +0 -1
- package/dist/esm/src/transformers/SmartRenamer.js.map +0 -1
- package/dist/esm/src/transformers/SqlFormatter.js.map +0 -1
- package/dist/esm/src/transformers/SqlIdentifierRenamer.js.map +0 -1
- package/dist/esm/src/transformers/SqlOutputToken.js.map +0 -1
- package/dist/esm/src/transformers/SqlPaginationInjector.js.map +0 -1
- package/dist/esm/src/transformers/SqlParamInjector.js.map +0 -1
- package/dist/esm/src/transformers/SqlParameterBinder.js.map +0 -1
- package/dist/esm/src/transformers/SqlPrinter.js +0 -1473
- package/dist/esm/src/transformers/SqlPrinter.js.map +0 -1
- package/dist/esm/src/transformers/SqlSortInjector.js.map +0 -1
- package/dist/esm/src/transformers/TableColumnResolver.js.map +0 -1
- package/dist/esm/src/transformers/TableSourceCollector.js +0 -431
- package/dist/esm/src/transformers/TableSourceCollector.js.map +0 -1
- package/dist/esm/src/transformers/TypeTransformationPostProcessor.js.map +0 -1
- package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js.map +0 -1
- package/dist/esm/src/types/Formatting.js.map +0 -1
- package/dist/esm/src/utils/CTERegionDetector.js.map +0 -1
- package/dist/esm/src/utils/CommentEditor.js.map +0 -1
- package/dist/esm/src/utils/CommentUtils.js.map +0 -1
- package/dist/esm/src/utils/CursorContextAnalyzer.js.map +0 -1
- package/dist/esm/src/utils/IntelliSenseApi.js.map +0 -1
- package/dist/esm/src/utils/JsonSchemaValidator.js.map +0 -1
- package/dist/esm/src/utils/KeywordCache.js.map +0 -1
- package/dist/esm/src/utils/LexemeCursor.js.map +0 -1
- package/dist/esm/src/utils/MultiQuerySplitter.js.map +0 -1
- package/dist/esm/src/utils/OperatorPrecedence.js.map +0 -1
- package/dist/esm/src/utils/ParameterDetector.js.map +0 -1
- package/dist/esm/src/utils/ParameterHelper.js.map +0 -1
- package/dist/esm/src/utils/ParameterRemover.js +0 -777
- package/dist/esm/src/utils/ParameterRemover.js.map +0 -1
- package/dist/esm/src/utils/ParserStringUtils.js.map +0 -1
- package/dist/esm/src/utils/PositionAwareParser.js.map +0 -1
- package/dist/esm/src/utils/SchemaManager.js.map +0 -1
- package/dist/esm/src/utils/ScopeResolver.js.map +0 -1
- package/dist/esm/src/utils/SqlSchemaValidator.js.map +0 -1
- package/dist/esm/src/utils/TextPositionUtils.js.map +0 -1
- package/dist/esm/src/utils/charLookupTable.js.map +0 -1
- package/dist/esm/src/utils/stringUtils.js.map +0 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +0 -1
- package/dist/src/formatters/OriginalFormatRestorer.js.map +0 -1
- package/dist/src/index.js +0 -126
- package/dist/src/index.js.map +0 -1
- package/dist/src/models/BinarySelectQuery.js.map +0 -1
- package/dist/src/models/CTEError.js.map +0 -1
- package/dist/src/models/Clause.js +0 -522
- package/dist/src/models/Clause.js.map +0 -1
- package/dist/src/models/CreateTableQuery.js.map +0 -1
- package/dist/src/models/DDLStatements.js +0 -216
- package/dist/src/models/DDLStatements.js.map +0 -1
- package/dist/src/models/DeleteQuery.js.map +0 -1
- package/dist/src/models/HintClause.js.map +0 -1
- package/dist/src/models/InsertQuery.js +0 -25
- package/dist/src/models/InsertQuery.js.map +0 -1
- package/dist/src/models/KeywordTrie.js.map +0 -1
- package/dist/src/models/Lexeme.js.map +0 -1
- package/dist/src/models/MergeQuery.js.map +0 -1
- package/dist/src/models/SelectQuery.js.map +0 -1
- package/dist/src/models/SimpleSelectQuery.js.map +0 -1
- package/dist/src/models/SqlComponent.js.map +0 -1
- package/dist/src/models/SqlPrintToken.js +0 -137
- package/dist/src/models/SqlPrintToken.js.map +0 -1
- package/dist/src/models/UpdateQuery.js.map +0 -1
- package/dist/src/models/ValueComponent.js +0 -379
- package/dist/src/models/ValueComponent.js.map +0 -1
- package/dist/src/models/ValuesQuery.js +0 -61
- package/dist/src/models/ValuesQuery.js.map +0 -1
- package/dist/src/parsers/AlterTableParser.js +0 -432
- package/dist/src/parsers/AlterTableParser.js.map +0 -1
- package/dist/src/parsers/AnalyzeStatementParser.js.map +0 -1
- package/dist/src/parsers/CommandExpressionParser.js.map +0 -1
- package/dist/src/parsers/CommonTableParser.js.map +0 -1
- package/dist/src/parsers/CreateIndexParser.js.map +0 -1
- package/dist/src/parsers/CreateTableParser.js.map +0 -1
- package/dist/src/parsers/DeleteClauseParser.js.map +0 -1
- package/dist/src/parsers/DeleteQueryParser.js.map +0 -1
- package/dist/src/parsers/DropConstraintParser.js.map +0 -1
- package/dist/src/parsers/DropIndexParser.js.map +0 -1
- package/dist/src/parsers/DropTableParser.js.map +0 -1
- package/dist/src/parsers/ExplainStatementParser.js.map +0 -1
- package/dist/src/parsers/FetchClauseParser.js.map +0 -1
- package/dist/src/parsers/ForClauseParser.js.map +0 -1
- package/dist/src/parsers/FromClauseParser.js.map +0 -1
- package/dist/src/parsers/FullNameParser.js.map +0 -1
- package/dist/src/parsers/FunctionExpressionParser.js +0 -491
- package/dist/src/parsers/FunctionExpressionParser.js.map +0 -1
- package/dist/src/parsers/GroupByParser.js.map +0 -1
- package/dist/src/parsers/HavingParser.js.map +0 -1
- package/dist/src/parsers/IdentifierDecorator.js.map +0 -1
- package/dist/src/parsers/IdentifierParser.js.map +0 -1
- package/dist/src/parsers/InsertQueryParser.js +0 -159
- package/dist/src/parsers/InsertQueryParser.js.map +0 -1
- package/dist/src/parsers/JoinClauseParser.js.map +0 -1
- package/dist/src/parsers/JoinOnClauseParser.js.map +0 -1
- package/dist/src/parsers/JoinUsingClauseParser.js.map +0 -1
- package/dist/src/parsers/KeywordParser.js.map +0 -1
- package/dist/src/parsers/LimitClauseParser.js.map +0 -1
- package/dist/src/parsers/LiteralParser.js.map +0 -1
- package/dist/src/parsers/MergeQueryParser.js.map +0 -1
- package/dist/src/parsers/OffsetClauseParser.js.map +0 -1
- package/dist/src/parsers/OrderByClauseParser.js.map +0 -1
- package/dist/src/parsers/OverExpressionParser.js.map +0 -1
- package/dist/src/parsers/ParameterDecorator.js.map +0 -1
- package/dist/src/parsers/ParameterExpressionParser.js.map +0 -1
- package/dist/src/parsers/ParenExpressionParser.js.map +0 -1
- package/dist/src/parsers/ParseError.js.map +0 -1
- package/dist/src/parsers/PartitionByParser.js.map +0 -1
- package/dist/src/parsers/ReturningClauseParser.js +0 -78
- package/dist/src/parsers/ReturningClauseParser.js.map +0 -1
- package/dist/src/parsers/SelectClauseParser.js.map +0 -1
- package/dist/src/parsers/SelectQueryParser.js.map +0 -1
- package/dist/src/parsers/SetClauseParser.js.map +0 -1
- package/dist/src/parsers/SourceAliasExpressionParser.js.map +0 -1
- package/dist/src/parsers/SourceExpressionParser.js.map +0 -1
- package/dist/src/parsers/SourceParser.js.map +0 -1
- package/dist/src/parsers/SqlParser.js +0 -409
- package/dist/src/parsers/SqlParser.js.map +0 -1
- package/dist/src/parsers/SqlPrintTokenParser.js +0 -3062
- package/dist/src/parsers/SqlPrintTokenParser.js.map +0 -1
- package/dist/src/parsers/SqlTokenizer.js.map +0 -1
- package/dist/src/parsers/StringSpecifierExpressionParser.js.map +0 -1
- package/dist/src/parsers/UnaryExpressionParser.js.map +0 -1
- package/dist/src/parsers/UpdateClauseParser.js.map +0 -1
- package/dist/src/parsers/UpdateQueryParser.js.map +0 -1
- package/dist/src/parsers/UsingClauseParser.js.map +0 -1
- package/dist/src/parsers/ValueParser.js +0 -535
- package/dist/src/parsers/ValueParser.js.map +0 -1
- package/dist/src/parsers/ValuesQueryParser.js.map +0 -1
- package/dist/src/parsers/WhereClauseParser.js.map +0 -1
- package/dist/src/parsers/WindowClauseParser.js.map +0 -1
- package/dist/src/parsers/WindowExpressionParser.js.map +0 -1
- package/dist/src/parsers/WithClauseParser.js.map +0 -1
- package/dist/src/parsers/utils/LexemeCommentUtils.js.map +0 -1
- package/dist/src/reporting/models/DataFlowEdge.js.map +0 -1
- package/dist/src/reporting/models/DataFlowGraph.js.map +0 -1
- package/dist/src/reporting/models/DataFlowNode.js.map +0 -1
- package/dist/src/reporting/services/CTEHandler.js.map +0 -1
- package/dist/src/reporting/services/DataSourceHandler.js.map +0 -1
- package/dist/src/reporting/services/JoinHandler.js.map +0 -1
- package/dist/src/reporting/services/ProcessHandler.js.map +0 -1
- package/dist/src/tokenReaders/BaseTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/CommandTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/EscapedIdentifierTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/FunctionTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/IdentifierTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/LiteralTokenReader.js +0 -322
- package/dist/src/tokenReaders/LiteralTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/OperatorTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/ParameterTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/StringSpecifierTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/SymbolTokenReader.js.map +0 -1
- package/dist/src/tokenReaders/TokenReaderManager.js.map +0 -1
- package/dist/src/tokenReaders/TypeTokenReader.js.map +0 -1
- package/dist/src/transformers/AliasRenamer.js.map +0 -1
- package/dist/src/transformers/CTEBuilder.js.map +0 -1
- package/dist/src/transformers/CTECollector.js.map +0 -1
- package/dist/src/transformers/CTEComposer.js.map +0 -1
- package/dist/src/transformers/CTEDependencyAnalyzer.js.map +0 -1
- package/dist/src/transformers/CTEDependencyTracer.js.map +0 -1
- package/dist/src/transformers/CTEDisabler.js.map +0 -1
- package/dist/src/transformers/CTEInjector.js.map +0 -1
- package/dist/src/transformers/CTENormalizer.js.map +0 -1
- package/dist/src/transformers/CTEQueryDecomposer.js.map +0 -1
- package/dist/src/transformers/CTERenamer.js.map +0 -1
- package/dist/src/transformers/CTETableReferenceCollector.js.map +0 -1
- package/dist/src/transformers/ColumnReferenceCollector.js +0 -468
- package/dist/src/transformers/ColumnReferenceCollector.js.map +0 -1
- package/dist/src/transformers/DynamicQueryBuilder.js.map +0 -1
- package/dist/src/transformers/EnhancedJsonMapping.js.map +0 -1
- package/dist/src/transformers/FilterableItemCollector.js.map +0 -1
- package/dist/src/transformers/FormatOptionResolver.js.map +0 -1
- package/dist/src/transformers/Formatter.js.map +0 -1
- package/dist/src/transformers/InsertQuerySelectValuesConverter.js +0 -122
- package/dist/src/transformers/InsertQuerySelectValuesConverter.js.map +0 -1
- package/dist/src/transformers/JoinAggregationDecomposer.js.map +0 -1
- package/dist/src/transformers/JsonMappingConverter.js.map +0 -1
- package/dist/src/transformers/JsonMappingUnifier.js.map +0 -1
- package/dist/src/transformers/LinePrinter.js.map +0 -1
- package/dist/src/transformers/ModelDrivenJsonMapping.js.map +0 -1
- package/dist/src/transformers/OnelineFormattingHelper.js.map +0 -1
- package/dist/src/transformers/ParameterCollector.js.map +0 -1
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.js.map +0 -1
- package/dist/src/transformers/PostgresJsonQueryBuilder.js.map +0 -1
- package/dist/src/transformers/PostgresObjectEntityCteBuilder.js.map +0 -1
- package/dist/src/transformers/QueryBuilder.js +0 -633
- package/dist/src/transformers/QueryBuilder.js.map +0 -1
- package/dist/src/transformers/QueryFlowDiagramGenerator.js.map +0 -1
- package/dist/src/transformers/SchemaCollector.js.map +0 -1
- package/dist/src/transformers/SelectValueCollector.js.map +0 -1
- package/dist/src/transformers/SelectableColumnCollector.js.map +0 -1
- package/dist/src/transformers/SmartRenamer.js.map +0 -1
- package/dist/src/transformers/SqlFormatter.js.map +0 -1
- package/dist/src/transformers/SqlIdentifierRenamer.js.map +0 -1
- package/dist/src/transformers/SqlOutputToken.js.map +0 -1
- package/dist/src/transformers/SqlPaginationInjector.js.map +0 -1
- package/dist/src/transformers/SqlParamInjector.js.map +0 -1
- package/dist/src/transformers/SqlParameterBinder.js.map +0 -1
- package/dist/src/transformers/SqlPrinter.js +0 -1477
- package/dist/src/transformers/SqlPrinter.js.map +0 -1
- package/dist/src/transformers/SqlSortInjector.js.map +0 -1
- package/dist/src/transformers/TableSourceCollector.js +0 -435
- package/dist/src/transformers/TableSourceCollector.js.map +0 -1
- package/dist/src/transformers/TypeTransformationPostProcessor.js.map +0 -1
- package/dist/src/transformers/UpstreamSelectQueryFinder.js.map +0 -1
- package/dist/src/utils/CTERegionDetector.js.map +0 -1
- package/dist/src/utils/CommentEditor.js.map +0 -1
- package/dist/src/utils/CommentUtils.js.map +0 -1
- package/dist/src/utils/CursorContextAnalyzer.js.map +0 -1
- package/dist/src/utils/IntelliSenseApi.js.map +0 -1
- package/dist/src/utils/JsonSchemaValidator.js.map +0 -1
- package/dist/src/utils/KeywordCache.js.map +0 -1
- package/dist/src/utils/LexemeCursor.js.map +0 -1
- package/dist/src/utils/MultiQuerySplitter.js.map +0 -1
- package/dist/src/utils/OperatorPrecedence.js.map +0 -1
- package/dist/src/utils/ParameterDetector.js.map +0 -1
- package/dist/src/utils/ParameterHelper.js.map +0 -1
- package/dist/src/utils/ParameterRemover.js +0 -781
- package/dist/src/utils/ParameterRemover.js.map +0 -1
- package/dist/src/utils/ParserStringUtils.js.map +0 -1
- package/dist/src/utils/PositionAwareParser.js.map +0 -1
- package/dist/src/utils/SchemaManager.js.map +0 -1
- package/dist/src/utils/ScopeResolver.js.map +0 -1
- package/dist/src/utils/SqlSchemaValidator.js.map +0 -1
- package/dist/src/utils/TextPositionUtils.js.map +0 -1
- package/dist/src/utils/charLookupTable.js.map +0 -1
- package/dist/src/utils/stringUtils.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/esm/{src/formatters → formatters}/OriginalFormatRestorer.d.ts +0 -0
- /package/dist/esm/{src/formatters → formatters}/OriginalFormatRestorer.js +0 -0
- /package/dist/esm/{src/models → models}/BinarySelectQuery.d.ts +0 -0
- /package/dist/esm/{src/models → models}/BinarySelectQuery.js +0 -0
- /package/dist/esm/{src/models → models}/CTEError.d.ts +0 -0
- /package/dist/esm/{src/models → models}/CTEError.js +0 -0
- /package/dist/esm/{src/models → models}/CreateTableQuery.d.ts +0 -0
- /package/dist/esm/{src/models → models}/CreateTableQuery.js +0 -0
- /package/dist/esm/{src/models → models}/DeleteQuery.d.ts +0 -0
- /package/dist/esm/{src/models → models}/DeleteQuery.js +0 -0
- /package/dist/esm/{src/models → models}/FormattingLexeme.d.ts +0 -0
- /package/dist/esm/{src/models → models}/FormattingLexeme.js +0 -0
- /package/dist/{src → esm}/models/FormattingLexeme.js.map +0 -0
- /package/dist/esm/{src/models → models}/HintClause.d.ts +0 -0
- /package/dist/esm/{src/models → models}/HintClause.js +0 -0
- /package/dist/esm/{src/models → models}/KeywordTrie.d.ts +0 -0
- /package/dist/esm/{src/models → models}/KeywordTrie.js +0 -0
- /package/dist/esm/{src/models → models}/Lexeme.d.ts +0 -0
- /package/dist/esm/{src/models → models}/Lexeme.js +0 -0
- /package/dist/esm/{src/models → models}/MergeQuery.d.ts +0 -0
- /package/dist/esm/{src/models → models}/MergeQuery.js +0 -0
- /package/dist/esm/{src/models → models}/SelectQuery.d.ts +0 -0
- /package/dist/esm/{src/models → models}/SelectQuery.js +0 -0
- /package/dist/esm/{src/models → models}/SimpleSelectQuery.d.ts +0 -0
- /package/dist/esm/{src/models → models}/SimpleSelectQuery.js +0 -0
- /package/dist/esm/{src/models → models}/SqlComponent.d.ts +0 -0
- /package/dist/esm/{src/models → models}/SqlComponent.js +0 -0
- /package/dist/esm/{src/models → models}/UpdateQuery.d.ts +0 -0
- /package/dist/esm/{src/models → models}/UpdateQuery.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/AlterTableParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/AnalyzeStatementParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/AnalyzeStatementParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/CommandExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/CommandExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/CommonTableParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/CommonTableParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/CreateIndexParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/CreateIndexParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/CreateTableParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/CreateTableParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/DeleteClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/DeleteClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/DeleteQueryParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/DeleteQueryParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/DropConstraintParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/DropConstraintParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/DropIndexParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/DropIndexParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/DropTableParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/DropTableParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/ExplainStatementParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/ExplainStatementParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/FetchClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/FetchClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/ForClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/ForClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/FromClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/FromClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/FullNameParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/FullNameParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/GroupByParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/GroupByParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/HavingParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/HavingParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/IdentifierDecorator.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/IdentifierDecorator.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/IdentifierParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/IdentifierParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/InsertQueryParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/JoinClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/JoinClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/JoinOnClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/JoinOnClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/JoinUsingClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/JoinUsingClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/KeywordParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/KeywordParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/LimitClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/LimitClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/LiteralParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/LiteralParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/MergeQueryParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/MergeQueryParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/OffsetClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/OffsetClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/OrderByClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/OrderByClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/OverExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/OverExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/ParameterDecorator.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/ParameterDecorator.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/ParameterExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/ParameterExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/ParenExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/ParenExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/ParseError.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/ParseError.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/PartitionByParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/PartitionByParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/ReturningClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/SelectClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/SelectClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/SelectQueryParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/SelectQueryParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/SetClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/SetClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/SourceAliasExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/SourceAliasExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/SourceExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/SourceExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/SourceParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/SourceParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/SqlTokenizer.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/SqlTokenizer.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/StringSpecifierExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/StringSpecifierExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/UnaryExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/UnaryExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/UpdateClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/UpdateClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/UpdateQueryParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/UpdateQueryParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/UsingClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/UsingClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/ValueParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/ValuesQueryParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/ValuesQueryParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/WhereClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/WhereClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/WindowClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/WindowClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/WindowExpressionParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/WindowExpressionParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/WithClauseParser.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/WithClauseParser.js +0 -0
- /package/dist/esm/{src/parsers → parsers}/utils/LexemeCommentUtils.d.ts +0 -0
- /package/dist/esm/{src/parsers → parsers}/utils/LexemeCommentUtils.js +0 -0
- /package/dist/esm/{src/reporting → reporting}/models/DataFlowEdge.d.ts +0 -0
- /package/dist/esm/{src/reporting → reporting}/models/DataFlowEdge.js +0 -0
- /package/dist/esm/{src/reporting → reporting}/models/DataFlowGraph.d.ts +0 -0
- /package/dist/esm/{src/reporting → reporting}/models/DataFlowGraph.js +0 -0
- /package/dist/esm/{src/reporting → reporting}/models/DataFlowNode.d.ts +0 -0
- /package/dist/esm/{src/reporting → reporting}/models/DataFlowNode.js +0 -0
- /package/dist/esm/{src/reporting → reporting}/services/CTEHandler.d.ts +0 -0
- /package/dist/esm/{src/reporting → reporting}/services/CTEHandler.js +0 -0
- /package/dist/esm/{src/reporting → reporting}/services/DataSourceHandler.d.ts +0 -0
- /package/dist/esm/{src/reporting → reporting}/services/DataSourceHandler.js +0 -0
- /package/dist/esm/{src/reporting → reporting}/services/JoinHandler.d.ts +0 -0
- /package/dist/esm/{src/reporting → reporting}/services/JoinHandler.js +0 -0
- /package/dist/esm/{src/reporting → reporting}/services/ProcessHandler.d.ts +0 -0
- /package/dist/esm/{src/reporting → reporting}/services/ProcessHandler.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/BaseTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/BaseTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/CommandTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/CommandTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/EscapedIdentifierTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/EscapedIdentifierTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/FunctionTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/FunctionTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/IdentifierTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/IdentifierTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/LiteralTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/OperatorTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/OperatorTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/ParameterTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/ParameterTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/StringSpecifierTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/StringSpecifierTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/SymbolTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/SymbolTokenReader.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/TokenReaderManager.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/TokenReaderManager.js +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/TypeTokenReader.d.ts +0 -0
- /package/dist/esm/{src/tokenReaders → tokenReaders}/TypeTokenReader.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/AliasRenamer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/AliasRenamer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEBuilder.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEBuilder.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTECollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTECollector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEComposer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEComposer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEDependencyAnalyzer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEDependencyAnalyzer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEDependencyTracer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEDependencyTracer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEDisabler.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEDisabler.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEInjector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEInjector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTENormalizer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTENormalizer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEQueryDecomposer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTEQueryDecomposer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTERenamer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTERenamer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTETableReferenceCollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/CTETableReferenceCollector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/ColumnReferenceCollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/DynamicQueryBuilder.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/DynamicQueryBuilder.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/EnhancedJsonMapping.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/EnhancedJsonMapping.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/FilterableItemCollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/FilterableItemCollector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/FormatOptionResolver.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/FormatOptionResolver.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/Formatter.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/Formatter.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/InsertQuerySelectValuesConverter.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/JoinAggregationDecomposer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/JoinAggregationDecomposer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/JsonMappingConverter.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/JsonMappingConverter.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/JsonMappingUnifier.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/JsonMappingUnifier.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/LinePrinter.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/LinePrinter.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/ModelDrivenJsonMapping.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/ModelDrivenJsonMapping.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/OnelineFormattingHelper.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/OnelineFormattingHelper.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/ParameterCollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/ParameterCollector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/PostgresArrayEntityCteBuilder.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/PostgresArrayEntityCteBuilder.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/PostgresJsonQueryBuilder.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/PostgresJsonQueryBuilder.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/PostgresObjectEntityCteBuilder.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/PostgresObjectEntityCteBuilder.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/QueryFlowDiagramGenerator.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/QueryFlowDiagramGenerator.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SchemaCollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SchemaCollector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SelectValueCollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SelectValueCollector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SelectableColumnCollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SelectableColumnCollector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SmartRenamer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SmartRenamer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlFormatter.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlFormatter.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlIdentifierRenamer.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlIdentifierRenamer.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlOutputToken.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlOutputToken.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlPaginationInjector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlPaginationInjector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlParamInjector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlParamInjector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlParameterBinder.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlParameterBinder.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlPrinter.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlSortInjector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/SqlSortInjector.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/TableColumnResolver.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/TableColumnResolver.js +0 -0
- /package/dist/{src → esm}/transformers/TableColumnResolver.js.map +0 -0
- /package/dist/esm/{src/transformers → transformers}/TableSourceCollector.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/TypeTransformationPostProcessor.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/TypeTransformationPostProcessor.js +0 -0
- /package/dist/esm/{src/transformers → transformers}/UpstreamSelectQueryFinder.d.ts +0 -0
- /package/dist/esm/{src/transformers → transformers}/UpstreamSelectQueryFinder.js +0 -0
- /package/dist/esm/{src/types → types}/Formatting.d.ts +0 -0
- /package/dist/esm/{src/types → types}/Formatting.js +0 -0
- /package/dist/{src → esm}/types/Formatting.js.map +0 -0
- /package/dist/esm/{src/utils → utils}/CTERegionDetector.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/CTERegionDetector.js +0 -0
- /package/dist/esm/{src/utils → utils}/CommentEditor.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/CommentEditor.js +0 -0
- /package/dist/esm/{src/utils → utils}/CommentUtils.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/CommentUtils.js +0 -0
- /package/dist/esm/{src/utils → utils}/CursorContextAnalyzer.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/CursorContextAnalyzer.js +0 -0
- /package/dist/esm/{src/utils → utils}/IntelliSenseApi.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/IntelliSenseApi.js +0 -0
- /package/dist/esm/{src/utils → utils}/JsonSchemaValidator.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/JsonSchemaValidator.js +0 -0
- /package/dist/esm/{src/utils → utils}/KeywordCache.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/KeywordCache.js +0 -0
- /package/dist/esm/{src/utils → utils}/LexemeCursor.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/LexemeCursor.js +0 -0
- /package/dist/esm/{src/utils → utils}/MultiQuerySplitter.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/MultiQuerySplitter.js +0 -0
- /package/dist/esm/{src/utils → utils}/OperatorPrecedence.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/OperatorPrecedence.js +0 -0
- /package/dist/esm/{src/utils → utils}/ParameterDetector.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/ParameterDetector.js +0 -0
- /package/dist/esm/{src/utils → utils}/ParameterHelper.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/ParameterHelper.js +0 -0
- /package/dist/esm/{src/utils → utils}/ParameterRemover.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/ParserStringUtils.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/ParserStringUtils.js +0 -0
- /package/dist/esm/{src/utils → utils}/PositionAwareParser.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/PositionAwareParser.js +0 -0
- /package/dist/esm/{src/utils → utils}/SchemaManager.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/SchemaManager.js +0 -0
- /package/dist/esm/{src/utils → utils}/ScopeResolver.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/ScopeResolver.js +0 -0
- /package/dist/esm/{src/utils → utils}/SqlSchemaValidator.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/SqlSchemaValidator.js +0 -0
- /package/dist/esm/{src/utils → utils}/TextPositionUtils.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/TextPositionUtils.js +0 -0
- /package/dist/esm/{src/utils → utils}/charLookupTable.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/charLookupTable.js +0 -0
- /package/dist/esm/{src/utils → utils}/stringUtils.d.ts +0 -0
- /package/dist/esm/{src/utils → utils}/stringUtils.js +0 -0
- /package/dist/{src/formatters → formatters}/OriginalFormatRestorer.js +0 -0
- /package/dist/{src/models → models}/BinarySelectQuery.js +0 -0
- /package/dist/{src/models → models}/CTEError.js +0 -0
- /package/dist/{src/models → models}/CreateTableQuery.js +0 -0
- /package/dist/{src/models → models}/DeleteQuery.js +0 -0
- /package/dist/{src/models → models}/FormattingLexeme.js +0 -0
- /package/dist/{src/models → models}/HintClause.js +0 -0
- /package/dist/{src/models → models}/KeywordTrie.js +0 -0
- /package/dist/{src/models → models}/Lexeme.js +0 -0
- /package/dist/{src/models → models}/MergeQuery.js +0 -0
- /package/dist/{src/models → models}/SelectQuery.js +0 -0
- /package/dist/{src/models → models}/SimpleSelectQuery.js +0 -0
- /package/dist/{src/models → models}/SqlComponent.js +0 -0
- /package/dist/{src/models → models}/UpdateQuery.js +0 -0
- /package/dist/{src/parsers → parsers}/AnalyzeStatementParser.js +0 -0
- /package/dist/{src/parsers → parsers}/CommandExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/CommonTableParser.js +0 -0
- /package/dist/{src/parsers → parsers}/CreateIndexParser.js +0 -0
- /package/dist/{src/parsers → parsers}/CreateTableParser.js +0 -0
- /package/dist/{src/parsers → parsers}/DeleteClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/DeleteQueryParser.js +0 -0
- /package/dist/{src/parsers → parsers}/DropConstraintParser.js +0 -0
- /package/dist/{src/parsers → parsers}/DropIndexParser.js +0 -0
- /package/dist/{src/parsers → parsers}/DropTableParser.js +0 -0
- /package/dist/{src/parsers → parsers}/ExplainStatementParser.js +0 -0
- /package/dist/{src/parsers → parsers}/FetchClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/ForClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/FromClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/FullNameParser.js +0 -0
- /package/dist/{src/parsers → parsers}/GroupByParser.js +0 -0
- /package/dist/{src/parsers → parsers}/HavingParser.js +0 -0
- /package/dist/{src/parsers → parsers}/IdentifierDecorator.js +0 -0
- /package/dist/{src/parsers → parsers}/IdentifierParser.js +0 -0
- /package/dist/{src/parsers → parsers}/JoinClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/JoinOnClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/JoinUsingClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/KeywordParser.js +0 -0
- /package/dist/{src/parsers → parsers}/LimitClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/LiteralParser.js +0 -0
- /package/dist/{src/parsers → parsers}/MergeQueryParser.js +0 -0
- /package/dist/{src/parsers → parsers}/OffsetClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/OrderByClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/OverExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/ParameterDecorator.js +0 -0
- /package/dist/{src/parsers → parsers}/ParameterExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/ParenExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/ParseError.js +0 -0
- /package/dist/{src/parsers → parsers}/PartitionByParser.js +0 -0
- /package/dist/{src/parsers → parsers}/SelectClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/SelectQueryParser.js +0 -0
- /package/dist/{src/parsers → parsers}/SetClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/SourceAliasExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/SourceExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/SourceParser.js +0 -0
- /package/dist/{src/parsers → parsers}/SqlTokenizer.js +0 -0
- /package/dist/{src/parsers → parsers}/StringSpecifierExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/UnaryExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/UpdateClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/UpdateQueryParser.js +0 -0
- /package/dist/{src/parsers → parsers}/UsingClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/ValuesQueryParser.js +0 -0
- /package/dist/{src/parsers → parsers}/WhereClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/WindowClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/WindowExpressionParser.js +0 -0
- /package/dist/{src/parsers → parsers}/WithClauseParser.js +0 -0
- /package/dist/{src/parsers → parsers}/utils/LexemeCommentUtils.js +0 -0
- /package/dist/{src/reporting → reporting}/models/DataFlowEdge.js +0 -0
- /package/dist/{src/reporting → reporting}/models/DataFlowGraph.js +0 -0
- /package/dist/{src/reporting → reporting}/models/DataFlowNode.js +0 -0
- /package/dist/{src/reporting → reporting}/services/CTEHandler.js +0 -0
- /package/dist/{src/reporting → reporting}/services/DataSourceHandler.js +0 -0
- /package/dist/{src/reporting → reporting}/services/JoinHandler.js +0 -0
- /package/dist/{src/reporting → reporting}/services/ProcessHandler.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/BaseTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/CommandTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/EscapedIdentifierTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/FunctionTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/IdentifierTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/OperatorTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/ParameterTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/StringSpecifierTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/SymbolTokenReader.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/TokenReaderManager.js +0 -0
- /package/dist/{src/tokenReaders → tokenReaders}/TypeTokenReader.js +0 -0
- /package/dist/{src/transformers → transformers}/AliasRenamer.js +0 -0
- /package/dist/{src/transformers → transformers}/CTEBuilder.js +0 -0
- /package/dist/{src/transformers → transformers}/CTECollector.js +0 -0
- /package/dist/{src/transformers → transformers}/CTEComposer.js +0 -0
- /package/dist/{src/transformers → transformers}/CTEDependencyAnalyzer.js +0 -0
- /package/dist/{src/transformers → transformers}/CTEDependencyTracer.js +0 -0
- /package/dist/{src/transformers → transformers}/CTEDisabler.js +0 -0
- /package/dist/{src/transformers → transformers}/CTEInjector.js +0 -0
- /package/dist/{src/transformers → transformers}/CTENormalizer.js +0 -0
- /package/dist/{src/transformers → transformers}/CTEQueryDecomposer.js +0 -0
- /package/dist/{src/transformers → transformers}/CTERenamer.js +0 -0
- /package/dist/{src/transformers → transformers}/CTETableReferenceCollector.js +0 -0
- /package/dist/{src/transformers → transformers}/DynamicQueryBuilder.js +0 -0
- /package/dist/{src/transformers → transformers}/EnhancedJsonMapping.js +0 -0
- /package/dist/{src/transformers → transformers}/FilterableItemCollector.js +0 -0
- /package/dist/{src/transformers → transformers}/FormatOptionResolver.js +0 -0
- /package/dist/{src/transformers → transformers}/Formatter.js +0 -0
- /package/dist/{src/transformers → transformers}/JoinAggregationDecomposer.js +0 -0
- /package/dist/{src/transformers → transformers}/JsonMappingConverter.js +0 -0
- /package/dist/{src/transformers → transformers}/JsonMappingUnifier.js +0 -0
- /package/dist/{src/transformers → transformers}/LinePrinter.js +0 -0
- /package/dist/{src/transformers → transformers}/ModelDrivenJsonMapping.js +0 -0
- /package/dist/{src/transformers → transformers}/OnelineFormattingHelper.js +0 -0
- /package/dist/{src/transformers → transformers}/ParameterCollector.js +0 -0
- /package/dist/{src/transformers → transformers}/PostgresArrayEntityCteBuilder.js +0 -0
- /package/dist/{src/transformers → transformers}/PostgresJsonQueryBuilder.js +0 -0
- /package/dist/{src/transformers → transformers}/PostgresObjectEntityCteBuilder.js +0 -0
- /package/dist/{src/transformers → transformers}/QueryFlowDiagramGenerator.js +0 -0
- /package/dist/{src/transformers → transformers}/SchemaCollector.js +0 -0
- /package/dist/{src/transformers → transformers}/SelectValueCollector.js +0 -0
- /package/dist/{src/transformers → transformers}/SelectableColumnCollector.js +0 -0
- /package/dist/{src/transformers → transformers}/SmartRenamer.js +0 -0
- /package/dist/{src/transformers → transformers}/SqlFormatter.js +0 -0
- /package/dist/{src/transformers → transformers}/SqlIdentifierRenamer.js +0 -0
- /package/dist/{src/transformers → transformers}/SqlOutputToken.js +0 -0
- /package/dist/{src/transformers → transformers}/SqlPaginationInjector.js +0 -0
- /package/dist/{src/transformers → transformers}/SqlParamInjector.js +0 -0
- /package/dist/{src/transformers → transformers}/SqlParameterBinder.js +0 -0
- /package/dist/{src/transformers → transformers}/SqlSortInjector.js +0 -0
- /package/dist/{src/transformers → transformers}/TableColumnResolver.js +0 -0
- /package/dist/{src/transformers → transformers}/TypeTransformationPostProcessor.js +0 -0
- /package/dist/{src/transformers → transformers}/UpstreamSelectQueryFinder.js +0 -0
- /package/dist/{src/types → types}/Formatting.js +0 -0
- /package/dist/{src/utils → utils}/CTERegionDetector.js +0 -0
- /package/dist/{src/utils → utils}/CommentEditor.js +0 -0
- /package/dist/{src/utils → utils}/CommentUtils.js +0 -0
- /package/dist/{src/utils → utils}/CursorContextAnalyzer.js +0 -0
- /package/dist/{src/utils → utils}/IntelliSenseApi.js +0 -0
- /package/dist/{src/utils → utils}/JsonSchemaValidator.js +0 -0
- /package/dist/{src/utils → utils}/KeywordCache.js +0 -0
- /package/dist/{src/utils → utils}/LexemeCursor.js +0 -0
- /package/dist/{src/utils → utils}/MultiQuerySplitter.js +0 -0
- /package/dist/{src/utils → utils}/OperatorPrecedence.js +0 -0
- /package/dist/{src/utils → utils}/ParameterDetector.js +0 -0
- /package/dist/{src/utils → utils}/ParameterHelper.js +0 -0
- /package/dist/{src/utils → utils}/ParserStringUtils.js +0 -0
- /package/dist/{src/utils → utils}/PositionAwareParser.js +0 -0
- /package/dist/{src/utils → utils}/SchemaManager.js +0 -0
- /package/dist/{src/utils → utils}/ScopeResolver.js +0 -0
- /package/dist/{src/utils → utils}/SqlSchemaValidator.js +0 -0
- /package/dist/{src/utils → utils}/TextPositionUtils.js +0 -0
- /package/dist/{src/utils → utils}/charLookupTable.js +0 -0
- /package/dist/{src/utils → utils}/stringUtils.js +0 -0
|
@@ -1,3058 +0,0 @@
|
|
|
1
|
-
import { PartitionByClause, OrderByClause, OrderByItem, SelectClause, SelectItem, Distinct, DistinctOn, SortDirection, NullsSortDirection, TableSource, SourceExpression, FromClause, JoinClause, JoinOnClause, JoinUsingClause, FunctionSource, SourceAliasExpression, WhereClause, GroupByClause, HavingClause, SubQuerySource, WindowFrameClause, LimitClause, ForClause, OffsetClause, WindowsClause as WindowClause, CommonTable, WithClause, FetchClause, FetchExpression, InsertClause, UpdateClause, DeleteClause, UsingClause, SetClause, ReturningClause, SetClauseItem } from "../models/Clause";
|
|
2
|
-
import { HintClause } from "../models/HintClause";
|
|
3
|
-
import { BinarySelectQuery, SimpleSelectQuery, ValuesQuery } from "../models/SelectQuery";
|
|
4
|
-
import { SqlPrintToken, SqlPrintTokenType, SqlPrintTokenContainerType } from "../models/SqlPrintToken";
|
|
5
|
-
import { ValueList, ColumnReference, FunctionCall, UnaryExpression, BinaryExpression, LiteralValue, ParameterExpression, SwitchCaseArgument, CaseKeyValuePair, RawString, IdentifierString, ParenExpression, CastExpression, CaseExpression, ArrayExpression, ArrayQueryExpression, ArraySliceExpression, ArrayIndexExpression, BetweenExpression, StringSpecifierExpression, TypeValue, TupleExpression, WindowFrameExpression, QualifiedName, InlineQuery, WindowFrameSpec, WindowFrameBoundStatic, WindowFrameBoundaryValue } from "../models/ValueComponent";
|
|
6
|
-
import { ParameterCollector } from "../transformers/ParameterCollector";
|
|
7
|
-
import { IdentifierDecorator } from "./IdentifierDecorator";
|
|
8
|
-
import { ParameterDecorator } from "./ParameterDecorator";
|
|
9
|
-
import { InsertQuery } from "../models/InsertQuery";
|
|
10
|
-
import { UpdateQuery } from "../models/UpdateQuery";
|
|
11
|
-
import { DeleteQuery } from "../models/DeleteQuery";
|
|
12
|
-
import { CreateTableQuery, TableColumnDefinition, ColumnConstraintDefinition, TableConstraintDefinition, ReferenceDefinition } from "../models/CreateTableQuery";
|
|
13
|
-
import { MergeQuery, MergeWhenClause, MergeUpdateAction, MergeDeleteAction, MergeInsertAction, MergeDoNothingAction } from "../models/MergeQuery";
|
|
14
|
-
import { DropTableStatement, DropIndexStatement, CreateIndexStatement, IndexColumnDefinition, AlterTableStatement, AlterTableAddConstraint, AlterTableDropConstraint, AlterTableDropColumn, DropConstraintStatement, ExplainStatement, AnalyzeStatement } from "../models/DDLStatements";
|
|
15
|
-
export var ParameterStyle;
|
|
16
|
-
(function (ParameterStyle) {
|
|
17
|
-
ParameterStyle["Anonymous"] = "anonymous";
|
|
18
|
-
ParameterStyle["Indexed"] = "indexed";
|
|
19
|
-
ParameterStyle["Named"] = "named";
|
|
20
|
-
})(ParameterStyle || (ParameterStyle = {}));
|
|
21
|
-
export const PRESETS = {
|
|
22
|
-
mysql: {
|
|
23
|
-
identifierEscape: { start: '`', end: '`' },
|
|
24
|
-
parameterSymbol: '?',
|
|
25
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
26
|
-
constraintStyle: 'mysql',
|
|
27
|
-
},
|
|
28
|
-
postgres: {
|
|
29
|
-
identifierEscape: { start: '"', end: '"' },
|
|
30
|
-
parameterSymbol: '$',
|
|
31
|
-
parameterStyle: ParameterStyle.Indexed,
|
|
32
|
-
castStyle: 'postgres',
|
|
33
|
-
constraintStyle: 'postgres',
|
|
34
|
-
},
|
|
35
|
-
postgresWithNamedParams: {
|
|
36
|
-
identifierEscape: { start: '"', end: '"' },
|
|
37
|
-
parameterSymbol: ':',
|
|
38
|
-
parameterStyle: ParameterStyle.Named,
|
|
39
|
-
castStyle: 'postgres',
|
|
40
|
-
constraintStyle: 'postgres',
|
|
41
|
-
},
|
|
42
|
-
sqlserver: {
|
|
43
|
-
identifierEscape: { start: '[', end: ']' },
|
|
44
|
-
parameterSymbol: '@',
|
|
45
|
-
parameterStyle: ParameterStyle.Named,
|
|
46
|
-
constraintStyle: 'postgres',
|
|
47
|
-
},
|
|
48
|
-
sqlite: {
|
|
49
|
-
identifierEscape: { start: '"', end: '"' },
|
|
50
|
-
parameterSymbol: ':',
|
|
51
|
-
parameterStyle: ParameterStyle.Named,
|
|
52
|
-
constraintStyle: 'postgres',
|
|
53
|
-
},
|
|
54
|
-
oracle: {
|
|
55
|
-
identifierEscape: { start: '"', end: '"' },
|
|
56
|
-
parameterSymbol: ':',
|
|
57
|
-
parameterStyle: ParameterStyle.Named,
|
|
58
|
-
constraintStyle: 'postgres',
|
|
59
|
-
},
|
|
60
|
-
clickhouse: {
|
|
61
|
-
identifierEscape: { start: '`', end: '`' },
|
|
62
|
-
parameterSymbol: '?',
|
|
63
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
64
|
-
constraintStyle: 'postgres',
|
|
65
|
-
},
|
|
66
|
-
firebird: {
|
|
67
|
-
identifierEscape: { start: '"', end: '"' },
|
|
68
|
-
parameterSymbol: '?',
|
|
69
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
70
|
-
},
|
|
71
|
-
db2: {
|
|
72
|
-
identifierEscape: { start: '"', end: '"' },
|
|
73
|
-
parameterSymbol: '?',
|
|
74
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
75
|
-
},
|
|
76
|
-
snowflake: {
|
|
77
|
-
identifierEscape: { start: '"', end: '"' },
|
|
78
|
-
parameterSymbol: '?',
|
|
79
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
80
|
-
},
|
|
81
|
-
cloudspanner: {
|
|
82
|
-
identifierEscape: { start: '`', end: '`' },
|
|
83
|
-
parameterSymbol: '@',
|
|
84
|
-
parameterStyle: ParameterStyle.Named,
|
|
85
|
-
},
|
|
86
|
-
duckdb: {
|
|
87
|
-
identifierEscape: { start: '"', end: '"' },
|
|
88
|
-
parameterSymbol: '?',
|
|
89
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
90
|
-
},
|
|
91
|
-
cockroachdb: {
|
|
92
|
-
identifierEscape: { start: '"', end: '"' },
|
|
93
|
-
parameterSymbol: '$',
|
|
94
|
-
parameterStyle: ParameterStyle.Indexed,
|
|
95
|
-
castStyle: 'postgres',
|
|
96
|
-
},
|
|
97
|
-
athena: {
|
|
98
|
-
identifierEscape: { start: '"', end: '"' },
|
|
99
|
-
parameterSymbol: '?',
|
|
100
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
101
|
-
},
|
|
102
|
-
bigquery: {
|
|
103
|
-
identifierEscape: { start: '`', end: '`' },
|
|
104
|
-
parameterSymbol: '@',
|
|
105
|
-
parameterStyle: ParameterStyle.Named,
|
|
106
|
-
},
|
|
107
|
-
hive: {
|
|
108
|
-
identifierEscape: { start: '`', end: '`' },
|
|
109
|
-
parameterSymbol: '?',
|
|
110
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
111
|
-
},
|
|
112
|
-
mariadb: {
|
|
113
|
-
identifierEscape: { start: '`', end: '`' },
|
|
114
|
-
parameterSymbol: '?',
|
|
115
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
116
|
-
},
|
|
117
|
-
redshift: {
|
|
118
|
-
identifierEscape: { start: '"', end: '"' },
|
|
119
|
-
parameterSymbol: '$',
|
|
120
|
-
parameterStyle: ParameterStyle.Indexed,
|
|
121
|
-
castStyle: 'postgres',
|
|
122
|
-
},
|
|
123
|
-
flinksql: {
|
|
124
|
-
identifierEscape: { start: '`', end: '`' },
|
|
125
|
-
parameterSymbol: '?',
|
|
126
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
127
|
-
},
|
|
128
|
-
mongodb: {
|
|
129
|
-
identifierEscape: { start: '"', end: '"' },
|
|
130
|
-
parameterSymbol: '?',
|
|
131
|
-
parameterStyle: ParameterStyle.Anonymous,
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
export class SqlPrintTokenParser {
|
|
135
|
-
static getSelfHandlingComponentTypes() {
|
|
136
|
-
if (!this._selfHandlingComponentTypes) {
|
|
137
|
-
this._selfHandlingComponentTypes = new Set([
|
|
138
|
-
SimpleSelectQuery.kind,
|
|
139
|
-
SelectItem.kind,
|
|
140
|
-
CaseKeyValuePair.kind,
|
|
141
|
-
SwitchCaseArgument.kind,
|
|
142
|
-
ColumnReference.kind,
|
|
143
|
-
LiteralValue.kind,
|
|
144
|
-
ParameterExpression.kind,
|
|
145
|
-
TableSource.kind,
|
|
146
|
-
SourceAliasExpression.kind,
|
|
147
|
-
TypeValue.kind,
|
|
148
|
-
FunctionCall.kind,
|
|
149
|
-
IdentifierString.kind,
|
|
150
|
-
QualifiedName.kind
|
|
151
|
-
]);
|
|
152
|
-
}
|
|
153
|
-
return this._selfHandlingComponentTypes;
|
|
154
|
-
}
|
|
155
|
-
constructor(options) {
|
|
156
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
157
|
-
this.handlers = new Map();
|
|
158
|
-
this.index = 1;
|
|
159
|
-
this.joinConditionContexts = [];
|
|
160
|
-
if (options === null || options === void 0 ? void 0 : options.preset) {
|
|
161
|
-
const preset = options.preset;
|
|
162
|
-
options = Object.assign(Object.assign({}, preset), options);
|
|
163
|
-
}
|
|
164
|
-
this.parameterDecorator = new ParameterDecorator({
|
|
165
|
-
prefix: typeof (options === null || options === void 0 ? void 0 : options.parameterSymbol) === 'string' ? options.parameterSymbol : (_b = (_a = options === null || options === void 0 ? void 0 : options.parameterSymbol) === null || _a === void 0 ? void 0 : _a.start) !== null && _b !== void 0 ? _b : ':',
|
|
166
|
-
suffix: typeof (options === null || options === void 0 ? void 0 : options.parameterSymbol) === 'object' ? options.parameterSymbol.end : '',
|
|
167
|
-
style: (_c = options === null || options === void 0 ? void 0 : options.parameterStyle) !== null && _c !== void 0 ? _c : 'named'
|
|
168
|
-
});
|
|
169
|
-
this.identifierDecorator = new IdentifierDecorator({
|
|
170
|
-
start: (_e = (_d = options === null || options === void 0 ? void 0 : options.identifierEscape) === null || _d === void 0 ? void 0 : _d.start) !== null && _e !== void 0 ? _e : '"',
|
|
171
|
-
end: (_g = (_f = options === null || options === void 0 ? void 0 : options.identifierEscape) === null || _f === void 0 ? void 0 : _f.end) !== null && _g !== void 0 ? _g : '"'
|
|
172
|
-
});
|
|
173
|
-
this.castStyle = (_h = options === null || options === void 0 ? void 0 : options.castStyle) !== null && _h !== void 0 ? _h : 'standard';
|
|
174
|
-
this.constraintStyle = (_j = options === null || options === void 0 ? void 0 : options.constraintStyle) !== null && _j !== void 0 ? _j : 'postgres';
|
|
175
|
-
this.normalizeJoinConditionOrder = (_k = options === null || options === void 0 ? void 0 : options.joinConditionOrderByDeclaration) !== null && _k !== void 0 ? _k : false;
|
|
176
|
-
this.handlers.set(ValueList.kind, (expr) => this.visitValueList(expr));
|
|
177
|
-
this.handlers.set(ColumnReference.kind, (expr) => this.visitColumnReference(expr));
|
|
178
|
-
this.handlers.set(QualifiedName.kind, (expr) => this.visitQualifiedName(expr));
|
|
179
|
-
this.handlers.set(FunctionCall.kind, (expr) => this.visitFunctionCall(expr));
|
|
180
|
-
this.handlers.set(UnaryExpression.kind, (expr) => this.visitUnaryExpression(expr));
|
|
181
|
-
this.handlers.set(BinaryExpression.kind, (expr) => this.visitBinaryExpression(expr));
|
|
182
|
-
this.handlers.set(LiteralValue.kind, (expr) => this.visitLiteralValue(expr));
|
|
183
|
-
this.handlers.set(ParameterExpression.kind, (expr) => this.visitParameterExpression(expr));
|
|
184
|
-
this.handlers.set(SwitchCaseArgument.kind, (expr) => this.visitSwitchCaseArgument(expr));
|
|
185
|
-
this.handlers.set(CaseKeyValuePair.kind, (expr) => this.visitCaseKeyValuePair(expr));
|
|
186
|
-
this.handlers.set(RawString.kind, (expr) => this.visitRawString(expr));
|
|
187
|
-
this.handlers.set(IdentifierString.kind, (expr) => this.visitIdentifierString(expr));
|
|
188
|
-
this.handlers.set(ParenExpression.kind, (expr) => this.visitParenExpression(expr));
|
|
189
|
-
this.handlers.set(CastExpression.kind, (expr) => this.visitCastExpression(expr));
|
|
190
|
-
this.handlers.set(CaseExpression.kind, (expr) => this.visitCaseExpression(expr));
|
|
191
|
-
this.handlers.set(ArrayExpression.kind, (expr) => this.visitArrayExpression(expr));
|
|
192
|
-
this.handlers.set(ArrayQueryExpression.kind, (expr) => this.visitArrayQueryExpression(expr));
|
|
193
|
-
this.handlers.set(ArraySliceExpression.kind, (expr) => this.visitArraySliceExpression(expr));
|
|
194
|
-
this.handlers.set(ArrayIndexExpression.kind, (expr) => this.visitArrayIndexExpression(expr));
|
|
195
|
-
this.handlers.set(BetweenExpression.kind, (expr) => this.visitBetweenExpression(expr));
|
|
196
|
-
this.handlers.set(StringSpecifierExpression.kind, (expr) => this.visitStringSpecifierExpression(expr));
|
|
197
|
-
this.handlers.set(TypeValue.kind, (expr) => this.visitTypeValue(expr));
|
|
198
|
-
this.handlers.set(TupleExpression.kind, (expr) => this.visitTupleExpression(expr));
|
|
199
|
-
this.handlers.set(InlineQuery.kind, (expr) => this.visitInlineQuery(expr));
|
|
200
|
-
this.handlers.set(WindowFrameExpression.kind, (expr) => this.visitWindowFrameExpression(expr));
|
|
201
|
-
this.handlers.set(WindowFrameSpec.kind, (expr) => this.visitWindowFrameSpec(expr));
|
|
202
|
-
this.handlers.set(WindowFrameBoundStatic.kind, (expr) => this.visitWindowFrameBoundStatic(expr));
|
|
203
|
-
this.handlers.set(WindowFrameBoundaryValue.kind, (expr) => this.visitWindowFrameBoundaryValue(expr));
|
|
204
|
-
this.handlers.set(PartitionByClause.kind, (expr) => this.visitPartitionByClause(expr));
|
|
205
|
-
this.handlers.set(OrderByClause.kind, (expr) => this.visitOrderByClause(expr));
|
|
206
|
-
this.handlers.set(OrderByItem.kind, (expr) => this.visitOrderByItem(expr));
|
|
207
|
-
// select
|
|
208
|
-
this.handlers.set(SelectItem.kind, (expr) => this.visitSelectItem(expr));
|
|
209
|
-
this.handlers.set(SelectClause.kind, (expr) => this.visitSelectClause(expr));
|
|
210
|
-
this.handlers.set(Distinct.kind, (expr) => this.visitDistinct(expr));
|
|
211
|
-
this.handlers.set(DistinctOn.kind, (expr) => this.visitDistinctOn(expr));
|
|
212
|
-
this.handlers.set(HintClause.kind, (expr) => this.visitHintClause(expr));
|
|
213
|
-
// from
|
|
214
|
-
this.handlers.set(TableSource.kind, (expr) => this.visitTableSource(expr));
|
|
215
|
-
this.handlers.set(FunctionSource.kind, (expr) => this.visitFunctionSource(expr));
|
|
216
|
-
this.handlers.set(SourceExpression.kind, (expr) => this.visitSourceExpression(expr));
|
|
217
|
-
this.handlers.set(SourceAliasExpression.kind, (expr) => this.visitSourceAliasExpression(expr));
|
|
218
|
-
this.handlers.set(FromClause.kind, (expr) => this.visitFromClause(expr));
|
|
219
|
-
this.handlers.set(JoinClause.kind, (expr) => this.visitJoinClause(expr));
|
|
220
|
-
this.handlers.set(JoinOnClause.kind, (expr) => this.visitJoinOnClause(expr));
|
|
221
|
-
this.handlers.set(JoinUsingClause.kind, (expr) => this.visitJoinUsingClause(expr));
|
|
222
|
-
// where
|
|
223
|
-
this.handlers.set(WhereClause.kind, (expr) => this.visitWhereClause(expr));
|
|
224
|
-
// group
|
|
225
|
-
this.handlers.set(GroupByClause.kind, (expr) => this.visitGroupByClause(expr));
|
|
226
|
-
this.handlers.set(HavingClause.kind, (expr) => this.visitHavingClause(expr));
|
|
227
|
-
this.handlers.set(WindowClause.kind, (expr) => this.visitWindowClause(expr));
|
|
228
|
-
this.handlers.set(WindowFrameClause.kind, (expr) => this.visitWindowFrameClause(expr));
|
|
229
|
-
this.handlers.set(LimitClause.kind, (expr) => this.visitLimitClause(expr));
|
|
230
|
-
this.handlers.set(OffsetClause.kind, (expr) => this.visitOffsetClause(expr));
|
|
231
|
-
this.handlers.set(FetchClause.kind, (expr) => this.visitFetchClause(expr));
|
|
232
|
-
this.handlers.set(FetchExpression.kind, (expr) => this.visitFetchExpression(expr));
|
|
233
|
-
this.handlers.set(ForClause.kind, (expr) => this.visitForClause(expr));
|
|
234
|
-
// With
|
|
235
|
-
this.handlers.set(WithClause.kind, (expr) => this.visitWithClause(expr));
|
|
236
|
-
this.handlers.set(CommonTable.kind, (expr) => this.visitCommonTable(expr));
|
|
237
|
-
// Query
|
|
238
|
-
this.handlers.set(SimpleSelectQuery.kind, (expr) => this.visitSimpleQuery(expr));
|
|
239
|
-
this.handlers.set(SubQuerySource.kind, (expr) => this.visitSubQuerySource(expr));
|
|
240
|
-
this.handlers.set(BinarySelectQuery.kind, (expr) => this.visitBinarySelectQuery(expr));
|
|
241
|
-
this.handlers.set(ValuesQuery.kind, (expr) => this.visitValuesQuery(expr));
|
|
242
|
-
this.handlers.set(TupleExpression.kind, (expr) => this.visitTupleExpression(expr));
|
|
243
|
-
this.handlers.set(InsertQuery.kind, (expr) => this.visitInsertQuery(expr));
|
|
244
|
-
this.handlers.set(InsertClause.kind, (expr) => this.visitInsertClause(expr));
|
|
245
|
-
this.handlers.set(UpdateQuery.kind, (expr) => this.visitUpdateQuery(expr));
|
|
246
|
-
this.handlers.set(UpdateClause.kind, (expr) => this.visitUpdateClause(expr));
|
|
247
|
-
this.handlers.set(DeleteQuery.kind, (expr) => this.visitDeleteQuery(expr));
|
|
248
|
-
this.handlers.set(DeleteClause.kind, (expr) => this.visitDeleteClause(expr));
|
|
249
|
-
this.handlers.set(UsingClause.kind, (expr) => this.visitUsingClause(expr));
|
|
250
|
-
this.handlers.set(SetClause.kind, (expr) => this.visitSetClause(expr));
|
|
251
|
-
this.handlers.set(SetClauseItem.kind, (expr) => this.visitSetClauseItem(expr));
|
|
252
|
-
this.handlers.set(ReturningClause.kind, (expr) => this.visitReturningClause(expr));
|
|
253
|
-
this.handlers.set(CreateTableQuery.kind, (expr) => this.visitCreateTableQuery(expr));
|
|
254
|
-
this.handlers.set(TableColumnDefinition.kind, (expr) => this.visitTableColumnDefinition(expr));
|
|
255
|
-
this.handlers.set(ColumnConstraintDefinition.kind, (expr) => this.visitColumnConstraintDefinition(expr));
|
|
256
|
-
this.handlers.set(TableConstraintDefinition.kind, (expr) => this.visitTableConstraintDefinition(expr));
|
|
257
|
-
this.handlers.set(ReferenceDefinition.kind, (expr) => this.visitReferenceDefinition(expr));
|
|
258
|
-
this.handlers.set(CreateIndexStatement.kind, (expr) => this.visitCreateIndexStatement(expr));
|
|
259
|
-
this.handlers.set(IndexColumnDefinition.kind, (expr) => this.visitIndexColumnDefinition(expr));
|
|
260
|
-
this.handlers.set(DropTableStatement.kind, (expr) => this.visitDropTableStatement(expr));
|
|
261
|
-
this.handlers.set(DropIndexStatement.kind, (expr) => this.visitDropIndexStatement(expr));
|
|
262
|
-
this.handlers.set(AlterTableStatement.kind, (expr) => this.visitAlterTableStatement(expr));
|
|
263
|
-
this.handlers.set(AlterTableAddConstraint.kind, (expr) => this.visitAlterTableAddConstraint(expr));
|
|
264
|
-
this.handlers.set(AlterTableDropConstraint.kind, (expr) => this.visitAlterTableDropConstraint(expr));
|
|
265
|
-
this.handlers.set(AlterTableDropColumn.kind, (expr) => this.visitAlterTableDropColumn(expr));
|
|
266
|
-
this.handlers.set(DropConstraintStatement.kind, (expr) => this.visitDropConstraintStatement(expr));
|
|
267
|
-
this.handlers.set(ExplainStatement.kind, (expr) => this.visitExplainStatement(expr));
|
|
268
|
-
this.handlers.set(AnalyzeStatement.kind, (expr) => this.visitAnalyzeStatement(expr));
|
|
269
|
-
this.handlers.set(MergeQuery.kind, (expr) => this.visitMergeQuery(expr));
|
|
270
|
-
this.handlers.set(MergeWhenClause.kind, (expr) => this.visitMergeWhenClause(expr));
|
|
271
|
-
this.handlers.set(MergeUpdateAction.kind, (expr) => this.visitMergeUpdateAction(expr));
|
|
272
|
-
this.handlers.set(MergeDeleteAction.kind, (expr) => this.visitMergeDeleteAction(expr));
|
|
273
|
-
this.handlers.set(MergeInsertAction.kind, (expr) => this.visitMergeInsertAction(expr));
|
|
274
|
-
this.handlers.set(MergeDoNothingAction.kind, (expr) => this.visitMergeDoNothingAction(expr));
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Pretty-prints a BinarySelectQuery (e.g., UNION, INTERSECT, EXCEPT).
|
|
278
|
-
* This will recursively print left and right queries, separated by the operator.
|
|
279
|
-
* @param arg BinarySelectQuery
|
|
280
|
-
*/
|
|
281
|
-
visitBinarySelectQuery(arg) {
|
|
282
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '');
|
|
283
|
-
// Handle positioned comments for BinarySelectQuery (unified spec)
|
|
284
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
285
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
286
|
-
// Clear positioned comments to prevent duplicate processing
|
|
287
|
-
arg.positionedComments = null;
|
|
288
|
-
}
|
|
289
|
-
else if (arg.headerComments && arg.headerComments.length > 0) {
|
|
290
|
-
if (this.shouldMergeHeaderComments(arg.headerComments)) {
|
|
291
|
-
const mergedHeaderComment = this.createHeaderMultiLineCommentBlock(arg.headerComments);
|
|
292
|
-
token.innerTokens.push(mergedHeaderComment);
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
const headerCommentBlocks = this.createCommentBlocks(arg.headerComments, true);
|
|
296
|
-
token.innerTokens.push(...headerCommentBlocks);
|
|
297
|
-
}
|
|
298
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
299
|
-
}
|
|
300
|
-
token.innerTokens.push(this.visit(arg.left));
|
|
301
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
302
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.operator.value, SqlPrintTokenContainerType.BinarySelectQueryOperator));
|
|
303
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
304
|
-
token.innerTokens.push(this.visit(arg.right));
|
|
305
|
-
return token;
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Returns an array of tokens representing a comma followed by a space.
|
|
309
|
-
* This is a common pattern in SQL pretty-printing.
|
|
310
|
-
*/
|
|
311
|
-
static commaSpaceTokens() {
|
|
312
|
-
return [SqlPrintTokenParser.COMMA_TOKEN, SqlPrintTokenParser.SPACE_TOKEN];
|
|
313
|
-
}
|
|
314
|
-
static argumentCommaSpaceTokens() {
|
|
315
|
-
return [SqlPrintTokenParser.ARGUMENT_SPLIT_COMMA_TOKEN, SqlPrintTokenParser.SPACE_TOKEN];
|
|
316
|
-
}
|
|
317
|
-
visitQualifiedName(arg) {
|
|
318
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.QualifiedName);
|
|
319
|
-
if (arg.namespaces) {
|
|
320
|
-
for (let i = 0; i < arg.namespaces.length; i++) {
|
|
321
|
-
token.innerTokens.push(arg.namespaces[i].accept(this));
|
|
322
|
-
token.innerTokens.push(SqlPrintTokenParser.DOT_TOKEN);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
// Handle name and its comments carefully
|
|
326
|
-
// We need to prevent double processing by temporarily clearing the name's comments,
|
|
327
|
-
// then process them at the QualifiedName level
|
|
328
|
-
const originalNameComments = arg.name.positionedComments;
|
|
329
|
-
const originalNameLegacyComments = arg.name.comments;
|
|
330
|
-
// Temporarily clear name's comments to prevent double processing
|
|
331
|
-
arg.name.positionedComments = null;
|
|
332
|
-
arg.name.comments = null;
|
|
333
|
-
const nameToken = arg.name.accept(this);
|
|
334
|
-
token.innerTokens.push(nameToken);
|
|
335
|
-
// Restore original comments
|
|
336
|
-
arg.name.positionedComments = originalNameComments;
|
|
337
|
-
arg.name.comments = originalNameLegacyComments;
|
|
338
|
-
// Apply the name's comments to the qualified name token
|
|
339
|
-
if (this.hasPositionedComments(arg.name) || this.hasLegacyComments(arg.name)) {
|
|
340
|
-
this.addComponentComments(token, arg.name);
|
|
341
|
-
}
|
|
342
|
-
// Also handle any comments directly on the QualifiedName itself
|
|
343
|
-
this.addComponentComments(token, arg);
|
|
344
|
-
return token;
|
|
345
|
-
}
|
|
346
|
-
visitPartitionByClause(arg) {
|
|
347
|
-
// Print as: partition by ...
|
|
348
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'partition by', SqlPrintTokenContainerType.PartitionByClause);
|
|
349
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
350
|
-
token.innerTokens.push(this.visit(arg.value));
|
|
351
|
-
return token;
|
|
352
|
-
}
|
|
353
|
-
visitOrderByClause(arg) {
|
|
354
|
-
// Print as: order by ...
|
|
355
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'order by', SqlPrintTokenContainerType.OrderByClause);
|
|
356
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
357
|
-
for (let i = 0; i < arg.order.length; i++) {
|
|
358
|
-
if (i > 0)
|
|
359
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
360
|
-
token.innerTokens.push(this.visit(arg.order[i]));
|
|
361
|
-
}
|
|
362
|
-
return token;
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Print an OrderByItem (expression [asc|desc] [nulls first|last])
|
|
366
|
-
*/
|
|
367
|
-
visitOrderByItem(arg) {
|
|
368
|
-
// arg: OrderByItem
|
|
369
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.OrderByItem);
|
|
370
|
-
token.innerTokens.push(this.visit(arg.value));
|
|
371
|
-
if (arg.sortDirection && arg.sortDirection !== SortDirection.Ascending) {
|
|
372
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
373
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'desc'));
|
|
374
|
-
}
|
|
375
|
-
if (arg.nullsPosition) {
|
|
376
|
-
if (arg.nullsPosition === NullsSortDirection.First) {
|
|
377
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
378
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'nulls first'));
|
|
379
|
-
}
|
|
380
|
-
else if (arg.nullsPosition === NullsSortDirection.Last) {
|
|
381
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
382
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'nulls last'));
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
return token;
|
|
386
|
-
}
|
|
387
|
-
parse(arg) {
|
|
388
|
-
// reset parameter index before parsing
|
|
389
|
-
this.index = 1;
|
|
390
|
-
const token = this.visit(arg);
|
|
391
|
-
const paramsRaw = ParameterCollector.collect(arg).sort((a, b) => { var _a, _b; return ((_a = a.index) !== null && _a !== void 0 ? _a : 0) - ((_b = b.index) !== null && _b !== void 0 ? _b : 0); });
|
|
392
|
-
const style = this.parameterDecorator.style;
|
|
393
|
-
if (style === ParameterStyle.Named) {
|
|
394
|
-
// Named: { name: value, ... }
|
|
395
|
-
const paramsObj = {};
|
|
396
|
-
for (const p of paramsRaw) {
|
|
397
|
-
const key = p.name.value;
|
|
398
|
-
if (paramsObj.hasOwnProperty(key)) {
|
|
399
|
-
if (paramsObj[key] !== p.value) {
|
|
400
|
-
throw new Error(`Duplicate parameter name '${key}' with different values detected during query composition.`);
|
|
401
|
-
}
|
|
402
|
-
// If value is the same, skip (already set)
|
|
403
|
-
continue;
|
|
404
|
-
}
|
|
405
|
-
paramsObj[key] = p.value;
|
|
406
|
-
}
|
|
407
|
-
return { token, params: paramsObj };
|
|
408
|
-
}
|
|
409
|
-
else if (style === ParameterStyle.Indexed) {
|
|
410
|
-
// Indexed: [value1, value2, ...] (sorted by index)
|
|
411
|
-
const paramsArr = paramsRaw.map(p => p.value);
|
|
412
|
-
return { token, params: paramsArr };
|
|
413
|
-
}
|
|
414
|
-
else if (style === ParameterStyle.Anonymous) {
|
|
415
|
-
// Anonymous: [value1, value2, ...] (sorted by index, name is empty)
|
|
416
|
-
const paramsArr = paramsRaw.map(p => p.value);
|
|
417
|
-
return { token, params: paramsArr };
|
|
418
|
-
}
|
|
419
|
-
// Fallback (just in case)
|
|
420
|
-
return { token, params: [] };
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Check if a component handles its own comments
|
|
424
|
-
*/
|
|
425
|
-
componentHandlesOwnComments(component) {
|
|
426
|
-
// First check if component has a handlesOwnComments method
|
|
427
|
-
if ('handlesOwnComments' in component && typeof component.handlesOwnComments === 'function') {
|
|
428
|
-
return component.handlesOwnComments();
|
|
429
|
-
}
|
|
430
|
-
return SqlPrintTokenParser.getSelfHandlingComponentTypes().has(component.getKind());
|
|
431
|
-
}
|
|
432
|
-
visit(arg) {
|
|
433
|
-
const handler = this.handlers.get(arg.getKind());
|
|
434
|
-
if (handler) {
|
|
435
|
-
const token = handler(arg);
|
|
436
|
-
if (!this.componentHandlesOwnComments(arg)) {
|
|
437
|
-
this.addComponentComments(token, arg);
|
|
438
|
-
}
|
|
439
|
-
return token;
|
|
440
|
-
}
|
|
441
|
-
throw new Error(`[SqlPrintTokenParser] No handler for kind: ${arg.getKind().toString()}`);
|
|
442
|
-
}
|
|
443
|
-
/**
|
|
444
|
-
* Check if a component has positioned comments
|
|
445
|
-
*/
|
|
446
|
-
hasPositionedComments(component) {
|
|
447
|
-
var _a, _b;
|
|
448
|
-
return ((_b = (_a = component.positionedComments) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
|
|
449
|
-
}
|
|
450
|
-
/**
|
|
451
|
-
* Check if a component has legacy comments
|
|
452
|
-
*/
|
|
453
|
-
hasLegacyComments(component) {
|
|
454
|
-
var _a, _b;
|
|
455
|
-
return ((_b = (_a = component.comments) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
|
|
456
|
-
}
|
|
457
|
-
/**
|
|
458
|
-
* Centralized comment handling - checks positioned comments first, falls back to legacy
|
|
459
|
-
*/
|
|
460
|
-
addComponentComments(token, component) {
|
|
461
|
-
if (this.hasPositionedComments(component)) {
|
|
462
|
-
this.addPositionedCommentsToToken(token, component);
|
|
463
|
-
}
|
|
464
|
-
else if (this.hasLegacyComments(component)) {
|
|
465
|
-
this.addCommentsToToken(token, component.comments);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
/**
|
|
469
|
-
* Adds positioned comment tokens to a SqlPrintToken for inline formatting
|
|
470
|
-
*/
|
|
471
|
-
addPositionedCommentsToToken(token, component) {
|
|
472
|
-
if (!this.hasPositionedComments(component)) {
|
|
473
|
-
return;
|
|
474
|
-
}
|
|
475
|
-
// Handle 'before' comments - add inline at the beginning with spaces
|
|
476
|
-
const beforeComments = component.getPositionedComments('before');
|
|
477
|
-
if (beforeComments.length > 0) {
|
|
478
|
-
const commentBlocks = this.createCommentBlocks(beforeComments);
|
|
479
|
-
for (let i = commentBlocks.length - 1; i >= 0; i--) {
|
|
480
|
-
token.innerTokens.unshift(commentBlocks[i]);
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
// Handle 'after' comments - add inline after the main content
|
|
484
|
-
const afterComments = component.getPositionedComments('after');
|
|
485
|
-
if (afterComments.length > 0) {
|
|
486
|
-
const commentBlocks = this.createCommentBlocks(afterComments);
|
|
487
|
-
// Append after comments with spaces for inline formatting
|
|
488
|
-
for (const commentBlock of commentBlocks) {
|
|
489
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
490
|
-
token.innerTokens.push(commentBlock);
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
// Clear positioned comments to prevent duplicate processing (unified spec)
|
|
494
|
-
// Only clear for specific component types that are known to have duplication issues
|
|
495
|
-
const componentsWithDuplicationIssues = [
|
|
496
|
-
SqlPrintTokenContainerType.CaseExpression,
|
|
497
|
-
SqlPrintTokenContainerType.SwitchCaseArgument,
|
|
498
|
-
SqlPrintTokenContainerType.CaseKeyValuePair,
|
|
499
|
-
SqlPrintTokenContainerType.SelectClause, // SELECT clauses have manual + automatic processing
|
|
500
|
-
SqlPrintTokenContainerType.LiteralValue,
|
|
501
|
-
SqlPrintTokenContainerType.IdentifierString,
|
|
502
|
-
SqlPrintTokenContainerType.DistinctOn,
|
|
503
|
-
SqlPrintTokenContainerType.SourceAliasExpression,
|
|
504
|
-
SqlPrintTokenContainerType.SimpleSelectQuery,
|
|
505
|
-
SqlPrintTokenContainerType.WhereClause // WHERE clauses also have duplication issues
|
|
506
|
-
];
|
|
507
|
-
if (token.containerType && componentsWithDuplicationIssues.includes(token.containerType)) {
|
|
508
|
-
component.positionedComments = null;
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
/**
|
|
512
|
-
* Adds comment tokens to a SqlPrintToken based on the comments array
|
|
513
|
-
*/
|
|
514
|
-
addCommentsToToken(token, comments) {
|
|
515
|
-
if (!(comments === null || comments === void 0 ? void 0 : comments.length)) {
|
|
516
|
-
return;
|
|
517
|
-
}
|
|
518
|
-
const commentBlocks = this.createCommentBlocks(comments);
|
|
519
|
-
this.insertCommentBlocksWithSpacing(token, commentBlocks);
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Creates inline comment sequence for multiple comments without newlines
|
|
523
|
-
*/
|
|
524
|
-
createInlineCommentSequence(comments) {
|
|
525
|
-
const commentTokens = [];
|
|
526
|
-
for (let i = 0; i < comments.length; i++) {
|
|
527
|
-
const comment = comments[i];
|
|
528
|
-
if (comment.trim()) {
|
|
529
|
-
// Add comment token directly
|
|
530
|
-
const commentToken = new SqlPrintToken(SqlPrintTokenType.comment, this.formatComment(comment));
|
|
531
|
-
commentTokens.push(commentToken);
|
|
532
|
-
// Add space between comments (except after last comment)
|
|
533
|
-
if (i < comments.length - 1) {
|
|
534
|
-
const spaceToken = new SqlPrintToken(SqlPrintTokenType.space, ' ');
|
|
535
|
-
commentTokens.push(spaceToken);
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
return commentTokens;
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* Creates CommentBlock containers for the given comments.
|
|
543
|
-
* Each CommentBlock contains: Comment -> CommentNewline -> Space.
|
|
544
|
-
* @param comments Raw comment strings to convert into CommentBlock tokens.
|
|
545
|
-
* @param isHeaderComment Marks the generated blocks as originating from header comments when true.
|
|
546
|
-
*/
|
|
547
|
-
createCommentBlocks(comments, isHeaderComment = false) {
|
|
548
|
-
// Create individual comment blocks for each comment entry
|
|
549
|
-
const commentBlocks = [];
|
|
550
|
-
for (const comment of comments) {
|
|
551
|
-
// Accept comments that have content after trim OR are separator lines OR are empty (for structure preservation)
|
|
552
|
-
const trimmed = comment.trim();
|
|
553
|
-
const isSeparatorLine = /^[-=_+*#]+$/.test(trimmed);
|
|
554
|
-
if (trimmed || isSeparatorLine || comment === '') {
|
|
555
|
-
commentBlocks.push(this.createSingleCommentBlock(comment, isHeaderComment));
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
return commentBlocks;
|
|
559
|
-
}
|
|
560
|
-
/**
|
|
561
|
-
* Determines if a comment should be merged with consecutive comments
|
|
562
|
-
*/
|
|
563
|
-
shouldMergeComment(trimmed) {
|
|
564
|
-
const isSeparatorLine = /^[-=_+*#]+$/.test(trimmed);
|
|
565
|
-
// Don't merge line comments unless they are separator-only lines
|
|
566
|
-
if (!isSeparatorLine && trimmed.startsWith('--')) {
|
|
567
|
-
return false;
|
|
568
|
-
}
|
|
569
|
-
// Don't merge if it's already a proper multi-line block comment
|
|
570
|
-
if (trimmed.startsWith('/*') && trimmed.endsWith('*/')) {
|
|
571
|
-
const inner = trimmed.slice(2, -2).trim();
|
|
572
|
-
if (!inner) {
|
|
573
|
-
return false;
|
|
574
|
-
}
|
|
575
|
-
if (trimmed.includes('\n')) {
|
|
576
|
-
return false;
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
// Merge all other content including separator lines, plain text, and single-line block comments
|
|
580
|
-
// Separator lines within comment blocks should be merged together
|
|
581
|
-
return true;
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Creates a multi-line block comment structure from consecutive comments
|
|
585
|
-
* Returns a CommentBlock containing multiple comment lines for proper LinePrinter integration
|
|
586
|
-
*/
|
|
587
|
-
/**
|
|
588
|
-
* Creates a single CommentBlock with the standard structure:
|
|
589
|
-
* Comment -> CommentNewline -> Space
|
|
590
|
-
*
|
|
591
|
-
* This structure supports both formatting modes:
|
|
592
|
-
* - Multiline mode: Comment + newline (space is filtered as leading space)
|
|
593
|
-
* - Oneliner mode: Comment + space (commentNewline is skipped)
|
|
594
|
-
*/
|
|
595
|
-
createSingleCommentBlock(comment, isHeaderComment = false) {
|
|
596
|
-
const commentBlock = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CommentBlock);
|
|
597
|
-
if (isHeaderComment) {
|
|
598
|
-
commentBlock.markAsHeaderComment();
|
|
599
|
-
}
|
|
600
|
-
// Add comment token - preserve original format for line comments
|
|
601
|
-
const commentToken = new SqlPrintToken(SqlPrintTokenType.comment, this.formatComment(comment));
|
|
602
|
-
commentBlock.innerTokens.push(commentToken);
|
|
603
|
-
// Add conditional newline token for multiline mode
|
|
604
|
-
const commentNewlineToken = new SqlPrintToken(SqlPrintTokenType.commentNewline, '');
|
|
605
|
-
commentBlock.innerTokens.push(commentNewlineToken);
|
|
606
|
-
// Add space token for oneliner mode spacing
|
|
607
|
-
const spaceToken = new SqlPrintToken(SqlPrintTokenType.space, ' ');
|
|
608
|
-
commentBlock.innerTokens.push(spaceToken);
|
|
609
|
-
return commentBlock;
|
|
610
|
-
}
|
|
611
|
-
/**
|
|
612
|
-
* Formats a comment, preserving line comment format for -- comments
|
|
613
|
-
* and converting others to block format for safety
|
|
614
|
-
*/
|
|
615
|
-
formatComment(comment) {
|
|
616
|
-
const trimmed = comment.trim();
|
|
617
|
-
if (!trimmed) {
|
|
618
|
-
return '/* */';
|
|
619
|
-
}
|
|
620
|
-
const isSeparatorLine = /^[-=_+*#]+$/.test(trimmed);
|
|
621
|
-
if (isSeparatorLine) {
|
|
622
|
-
return this.formatBlockComment(trimmed);
|
|
623
|
-
}
|
|
624
|
-
if (trimmed.startsWith('--')) {
|
|
625
|
-
return this.formatLineComment(trimmed.slice(2));
|
|
626
|
-
}
|
|
627
|
-
if (trimmed.startsWith('/*') && trimmed.endsWith('*/')) {
|
|
628
|
-
return this.formatBlockComment(trimmed);
|
|
629
|
-
}
|
|
630
|
-
return this.formatBlockComment(trimmed);
|
|
631
|
-
}
|
|
632
|
-
/**
|
|
633
|
-
* Inserts comment blocks into a token and handles spacing logic.
|
|
634
|
-
* Adds separator spaces for clause-level containers and manages duplicate space removal.
|
|
635
|
-
*/
|
|
636
|
-
insertCommentBlocksWithSpacing(token, commentBlocks) {
|
|
637
|
-
// For SelectItem, append comment blocks after ensuring spacing
|
|
638
|
-
if (token.containerType === SqlPrintTokenContainerType.SelectItem) {
|
|
639
|
-
if (token.innerTokens.length > 0) {
|
|
640
|
-
const lastToken = token.innerTokens[token.innerTokens.length - 1];
|
|
641
|
-
if (lastToken.type !== SqlPrintTokenType.space) {
|
|
642
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
token.innerTokens.push(...commentBlocks);
|
|
646
|
-
return;
|
|
647
|
-
}
|
|
648
|
-
// Special handling for SelectClause to add space between keyword and comment
|
|
649
|
-
if (token.containerType === SqlPrintTokenContainerType.SelectClause) {
|
|
650
|
-
// For SelectClause, comments need to be inserted after the keyword with a space separator
|
|
651
|
-
// Current structure: [keyword text, space, other tokens...]
|
|
652
|
-
// Desired structure: [keyword text, space, comments, space, other tokens...]
|
|
653
|
-
token.innerTokens.unshift(SqlPrintTokenParser.SPACE_TOKEN, ...commentBlocks);
|
|
654
|
-
return;
|
|
655
|
-
}
|
|
656
|
-
// Special handling for IdentifierString to add space before comment
|
|
657
|
-
if (token.containerType === SqlPrintTokenContainerType.IdentifierString) {
|
|
658
|
-
if (token.innerTokens.length > 0) {
|
|
659
|
-
const lastToken = token.innerTokens[token.innerTokens.length - 1];
|
|
660
|
-
if (lastToken.type !== SqlPrintTokenType.space) {
|
|
661
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
token.innerTokens.push(...commentBlocks);
|
|
665
|
-
return;
|
|
666
|
-
}
|
|
667
|
-
token.innerTokens.unshift(...commentBlocks);
|
|
668
|
-
// Add a separator space after comments only for certain container types
|
|
669
|
-
// where comments need to be separated from main content
|
|
670
|
-
const needsSeparatorSpace = this.shouldAddSeparatorSpace(token.containerType);
|
|
671
|
-
if (needsSeparatorSpace) {
|
|
672
|
-
const separatorSpace = new SqlPrintToken(SqlPrintTokenType.space, ' ');
|
|
673
|
-
token.innerTokens.splice(commentBlocks.length, 0, separatorSpace);
|
|
674
|
-
// Remove the original space token after our separator if it exists
|
|
675
|
-
// This prevents duplicate spaces when comments are added
|
|
676
|
-
if (token.innerTokens.length > commentBlocks.length + 1 &&
|
|
677
|
-
token.innerTokens[commentBlocks.length + 1].type === SqlPrintTokenType.space) {
|
|
678
|
-
token.innerTokens.splice(commentBlocks.length + 1, 1);
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
else {
|
|
682
|
-
// For containers that don't need separator space, still remove duplicate spaces
|
|
683
|
-
if (token.innerTokens.length > commentBlocks.length &&
|
|
684
|
-
token.innerTokens[commentBlocks.length].type === SqlPrintTokenType.space) {
|
|
685
|
-
token.innerTokens.splice(commentBlocks.length, 1);
|
|
686
|
-
}
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
/**
|
|
690
|
-
* Handles positioned comments for ParenExpression with special spacing rules.
|
|
691
|
-
* ParenExpression comments should be adjacent to parentheses without separator spaces.
|
|
692
|
-
*/
|
|
693
|
-
addPositionedCommentsToParenExpression(token, component) {
|
|
694
|
-
if (!component.positionedComments) {
|
|
695
|
-
return;
|
|
696
|
-
}
|
|
697
|
-
// For ParenExpression: (/* comment */ content /* comment */)
|
|
698
|
-
// Comments should be placed immediately after opening paren and before closing paren
|
|
699
|
-
// Handle 'before' comments - place after opening parenthesis without space
|
|
700
|
-
const beforeComments = component.getPositionedComments('before');
|
|
701
|
-
if (beforeComments.length > 0) {
|
|
702
|
-
const commentBlocks = this.createCommentBlocks(beforeComments);
|
|
703
|
-
// Insert after opening paren (index 1) without separator space
|
|
704
|
-
let insertIndex = 1;
|
|
705
|
-
for (const commentBlock of commentBlocks) {
|
|
706
|
-
token.innerTokens.splice(insertIndex, 0, commentBlock);
|
|
707
|
-
insertIndex++;
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
// Handle 'after' comments - place before closing parenthesis without space
|
|
711
|
-
const afterComments = component.getPositionedComments('after');
|
|
712
|
-
if (afterComments.length > 0) {
|
|
713
|
-
const commentBlocks = this.createCommentBlocks(afterComments);
|
|
714
|
-
const closingIndex = token.innerTokens.length - 1;
|
|
715
|
-
let insertIndex = closingIndex + 1;
|
|
716
|
-
for (const commentBlock of commentBlocks) {
|
|
717
|
-
token.innerTokens.splice(insertIndex, 0, SqlPrintTokenParser.SPACE_TOKEN, commentBlock);
|
|
718
|
-
insertIndex += 2;
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
}
|
|
722
|
-
/**
|
|
723
|
-
* Determines whether a separator space should be added after comments for the given container type.
|
|
724
|
-
*
|
|
725
|
-
* Clause-level containers (SELECT, FROM, WHERE, etc.) need separator spaces because:
|
|
726
|
-
* - Comments appear before the main clause content
|
|
727
|
-
* - A space is needed to separate comment block from SQL tokens
|
|
728
|
-
*
|
|
729
|
-
* Item-level containers (SelectItem, etc.) don't need separator spaces because:
|
|
730
|
-
* - Comments are inline with the item content
|
|
731
|
-
* - Spacing is handled by existing token structure
|
|
732
|
-
*/
|
|
733
|
-
shouldAddSeparatorSpace(containerType) {
|
|
734
|
-
return this.isClauseLevelContainer(containerType);
|
|
735
|
-
}
|
|
736
|
-
/**
|
|
737
|
-
* Checks if the container type represents a SQL clause (as opposed to an item within a clause).
|
|
738
|
-
*/
|
|
739
|
-
isClauseLevelContainer(containerType) {
|
|
740
|
-
switch (containerType) {
|
|
741
|
-
case SqlPrintTokenContainerType.SelectClause:
|
|
742
|
-
case SqlPrintTokenContainerType.FromClause:
|
|
743
|
-
case SqlPrintTokenContainerType.WhereClause:
|
|
744
|
-
case SqlPrintTokenContainerType.GroupByClause:
|
|
745
|
-
case SqlPrintTokenContainerType.HavingClause:
|
|
746
|
-
case SqlPrintTokenContainerType.OrderByClause:
|
|
747
|
-
case SqlPrintTokenContainerType.LimitClause:
|
|
748
|
-
case SqlPrintTokenContainerType.OffsetClause:
|
|
749
|
-
case SqlPrintTokenContainerType.WithClause:
|
|
750
|
-
case SqlPrintTokenContainerType.SimpleSelectQuery:
|
|
751
|
-
return true;
|
|
752
|
-
default:
|
|
753
|
-
return false;
|
|
754
|
-
}
|
|
755
|
-
}
|
|
756
|
-
/**
|
|
757
|
-
* Formats a comment string as a block comment with security sanitization.
|
|
758
|
-
* Prevents SQL injection by removing dangerous comment sequences.
|
|
759
|
-
*/
|
|
760
|
-
formatBlockComment(comment) {
|
|
761
|
-
const hasDelimiters = comment.startsWith('/*') && comment.endsWith('*/');
|
|
762
|
-
const rawContent = hasDelimiters ? comment.slice(2, -2) : comment;
|
|
763
|
-
const escapedContent = this.escapeCommentDelimiters(rawContent);
|
|
764
|
-
const normalized = escapedContent.replace(/\r?\n/g, '\n');
|
|
765
|
-
const lines = normalized
|
|
766
|
-
.split('\n')
|
|
767
|
-
.map(line => line.replace(/\s+/g, ' ').trim())
|
|
768
|
-
.filter(line => line.length > 0);
|
|
769
|
-
if (lines.length === 0) {
|
|
770
|
-
return '/* */';
|
|
771
|
-
}
|
|
772
|
-
const isSeparatorLine = lines.length === 1 && /^[-=_+*#]+$/.test(lines[0]);
|
|
773
|
-
if (!hasDelimiters) {
|
|
774
|
-
// Flatten free-form comments to a single block to avoid leaking multi-line structures.
|
|
775
|
-
if (isSeparatorLine) {
|
|
776
|
-
return `/* ${lines[0]} */`;
|
|
777
|
-
}
|
|
778
|
-
const flattened = lines.join(' ');
|
|
779
|
-
return `/* ${flattened} */`;
|
|
780
|
-
}
|
|
781
|
-
if (isSeparatorLine || lines.length === 1) {
|
|
782
|
-
return `/* ${lines[0]} */`;
|
|
783
|
-
}
|
|
784
|
-
const body = lines.map(line => ` ${line}`).join('\n');
|
|
785
|
-
return `/*\n${body}\n*/`;
|
|
786
|
-
}
|
|
787
|
-
shouldMergeHeaderComments(comments) {
|
|
788
|
-
if (comments.length <= 1) {
|
|
789
|
-
return false;
|
|
790
|
-
}
|
|
791
|
-
return comments.some(comment => {
|
|
792
|
-
const trimmed = comment.trim();
|
|
793
|
-
return /^[-=_+*#]{3,}$/.test(trimmed) || trimmed.startsWith('- ') || trimmed.startsWith('* ');
|
|
794
|
-
});
|
|
795
|
-
}
|
|
796
|
-
createHeaderMultiLineCommentBlock(headerComments) {
|
|
797
|
-
const commentBlock = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CommentBlock);
|
|
798
|
-
commentBlock.markAsHeaderComment();
|
|
799
|
-
if (headerComments.length === 0) {
|
|
800
|
-
const commentToken = new SqlPrintToken(SqlPrintTokenType.comment, '/* */');
|
|
801
|
-
commentBlock.innerTokens.push(commentToken);
|
|
802
|
-
}
|
|
803
|
-
else {
|
|
804
|
-
const openToken = new SqlPrintToken(SqlPrintTokenType.comment, '/*');
|
|
805
|
-
commentBlock.innerTokens.push(openToken);
|
|
806
|
-
commentBlock.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.commentNewline, ''));
|
|
807
|
-
for (const line of headerComments) {
|
|
808
|
-
const sanitized = this.escapeCommentDelimiters(line);
|
|
809
|
-
const lineToken = new SqlPrintToken(SqlPrintTokenType.comment, ` ${sanitized}`);
|
|
810
|
-
commentBlock.innerTokens.push(lineToken);
|
|
811
|
-
commentBlock.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.commentNewline, ''));
|
|
812
|
-
}
|
|
813
|
-
const closeToken = new SqlPrintToken(SqlPrintTokenType.comment, '*/');
|
|
814
|
-
commentBlock.innerTokens.push(closeToken);
|
|
815
|
-
}
|
|
816
|
-
commentBlock.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.commentNewline, ''));
|
|
817
|
-
commentBlock.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.space, ' '));
|
|
818
|
-
return commentBlock;
|
|
819
|
-
}
|
|
820
|
-
/**
|
|
821
|
-
* Formats text as a single-line comment while sanitizing unsafe sequences.
|
|
822
|
-
*/
|
|
823
|
-
formatLineComment(content) {
|
|
824
|
-
// Normalize content to a single line and remove dangerous sequences
|
|
825
|
-
const sanitized = this.sanitizeLineCommentContent(content);
|
|
826
|
-
if (!sanitized) {
|
|
827
|
-
return '--';
|
|
828
|
-
}
|
|
829
|
-
return `-- ${sanitized}`;
|
|
830
|
-
}
|
|
831
|
-
/**
|
|
832
|
-
* Sanitizes content intended for a single-line comment.
|
|
833
|
-
*/
|
|
834
|
-
sanitizeLineCommentContent(content) {
|
|
835
|
-
// Replace comment delimiters to avoid nested comment injection
|
|
836
|
-
let sanitized = this.escapeCommentDelimiters(content)
|
|
837
|
-
.replace(/\r?\n/g, ' ')
|
|
838
|
-
.replace(/\u2028|\u2029/g, ' ')
|
|
839
|
-
.replace(/\s+/g, ' ')
|
|
840
|
-
.trim();
|
|
841
|
-
if (sanitized.startsWith('--')) {
|
|
842
|
-
sanitized = sanitized.slice(2).trimStart();
|
|
843
|
-
}
|
|
844
|
-
return sanitized;
|
|
845
|
-
}
|
|
846
|
-
escapeCommentDelimiters(content) {
|
|
847
|
-
return content
|
|
848
|
-
.replace(/\/\*/g, '\\/\\*')
|
|
849
|
-
.replace(/\*\//g, '*\\/');
|
|
850
|
-
}
|
|
851
|
-
visitValueList(arg) {
|
|
852
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ValueList);
|
|
853
|
-
for (let i = 0; i < arg.values.length; i++) {
|
|
854
|
-
if (i > 0) {
|
|
855
|
-
token.innerTokens.push(...SqlPrintTokenParser.argumentCommaSpaceTokens());
|
|
856
|
-
}
|
|
857
|
-
token.innerTokens.push(this.visit(arg.values[i]));
|
|
858
|
-
}
|
|
859
|
-
return token;
|
|
860
|
-
}
|
|
861
|
-
visitColumnReference(arg) {
|
|
862
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ColumnReference);
|
|
863
|
-
token.innerTokens.push(arg.qualifiedName.accept(this));
|
|
864
|
-
this.addComponentComments(token, arg);
|
|
865
|
-
return token;
|
|
866
|
-
}
|
|
867
|
-
visitFunctionCall(arg) {
|
|
868
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.FunctionCall);
|
|
869
|
-
token.innerTokens.push(arg.qualifiedName.accept(this));
|
|
870
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
871
|
-
if (arg.argument) {
|
|
872
|
-
token.innerTokens.push(this.visit(arg.argument));
|
|
873
|
-
}
|
|
874
|
-
if (arg.internalOrderBy) {
|
|
875
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
876
|
-
token.innerTokens.push(this.visit(arg.internalOrderBy));
|
|
877
|
-
}
|
|
878
|
-
// Use FunctionCall comments if available, otherwise use static token
|
|
879
|
-
if (arg.comments && arg.comments.length > 0) {
|
|
880
|
-
const closingParenToken = new SqlPrintToken(SqlPrintTokenType.parenthesis, ')');
|
|
881
|
-
this.addCommentsToToken(closingParenToken, arg.comments);
|
|
882
|
-
token.innerTokens.push(closingParenToken);
|
|
883
|
-
// Clear the comments from arg to prevent duplicate output by the general comment handler
|
|
884
|
-
arg.comments = null;
|
|
885
|
-
}
|
|
886
|
-
else {
|
|
887
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
888
|
-
}
|
|
889
|
-
if (arg.withOrdinality) {
|
|
890
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
891
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'with ordinality'));
|
|
892
|
-
}
|
|
893
|
-
if (arg.over) {
|
|
894
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
895
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'over'));
|
|
896
|
-
if (arg.over instanceof IdentifierString) {
|
|
897
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
898
|
-
token.innerTokens.push(arg.over.accept(this));
|
|
899
|
-
}
|
|
900
|
-
else {
|
|
901
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
902
|
-
token.innerTokens.push(this.visit(arg.over));
|
|
903
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
904
|
-
}
|
|
905
|
-
}
|
|
906
|
-
this.addComponentComments(token, arg);
|
|
907
|
-
return token;
|
|
908
|
-
}
|
|
909
|
-
visitUnaryExpression(arg) {
|
|
910
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.UnaryExpression);
|
|
911
|
-
token.innerTokens.push(this.visit(arg.operator));
|
|
912
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
913
|
-
token.innerTokens.push(this.visit(arg.expression));
|
|
914
|
-
return token;
|
|
915
|
-
}
|
|
916
|
-
visitBinaryExpression(arg) {
|
|
917
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.BinaryExpression);
|
|
918
|
-
token.innerTokens.push(this.visit(arg.left));
|
|
919
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
920
|
-
// Visit the operator to handle its comments properly
|
|
921
|
-
const operatorToken = this.visit(arg.operator);
|
|
922
|
-
const operatorLower = operatorToken.text.toLowerCase();
|
|
923
|
-
if (operatorLower === 'and' || operatorLower === 'or') {
|
|
924
|
-
operatorToken.type = SqlPrintTokenType.operator;
|
|
925
|
-
}
|
|
926
|
-
token.innerTokens.push(operatorToken);
|
|
927
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
928
|
-
token.innerTokens.push(this.visit(arg.right));
|
|
929
|
-
return token;
|
|
930
|
-
}
|
|
931
|
-
visitLiteralValue(arg) {
|
|
932
|
-
let text;
|
|
933
|
-
if (arg.value === null) {
|
|
934
|
-
text = "null";
|
|
935
|
-
}
|
|
936
|
-
else if (arg.isStringLiteral) {
|
|
937
|
-
// For originally quoted string literals, preserve quotes
|
|
938
|
-
text = `'${arg.value.replace(/'/g, "''")}'`;
|
|
939
|
-
}
|
|
940
|
-
else if (typeof arg.value === "string") {
|
|
941
|
-
// For dollar-quoted strings or other string values, use as-is
|
|
942
|
-
text = arg.value;
|
|
943
|
-
}
|
|
944
|
-
else {
|
|
945
|
-
text = arg.value.toString();
|
|
946
|
-
}
|
|
947
|
-
const token = new SqlPrintToken(SqlPrintTokenType.value, text, SqlPrintTokenContainerType.LiteralValue);
|
|
948
|
-
// Handle positioned comments for LiteralValue
|
|
949
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
950
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
951
|
-
// Clear positioned comments to prevent duplicate processing
|
|
952
|
-
arg.positionedComments = null;
|
|
953
|
-
}
|
|
954
|
-
else if (arg.comments && arg.comments.length > 0) {
|
|
955
|
-
this.addCommentsToToken(token, arg.comments);
|
|
956
|
-
}
|
|
957
|
-
return token;
|
|
958
|
-
}
|
|
959
|
-
visitParameterExpression(arg) {
|
|
960
|
-
// Create a parameter token and decorate it using the parameterDecorator
|
|
961
|
-
arg.index = this.index;
|
|
962
|
-
const text = this.parameterDecorator.decorate(arg.name.value, arg.index);
|
|
963
|
-
const token = new SqlPrintToken(SqlPrintTokenType.parameter, text);
|
|
964
|
-
this.addComponentComments(token, arg);
|
|
965
|
-
this.index++;
|
|
966
|
-
return token;
|
|
967
|
-
}
|
|
968
|
-
visitSwitchCaseArgument(arg) {
|
|
969
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SwitchCaseArgument);
|
|
970
|
-
this.addComponentComments(token, arg);
|
|
971
|
-
// Add each WHEN/THEN clause
|
|
972
|
-
for (const kv of arg.cases) {
|
|
973
|
-
// Create a new line for each WHEN clause
|
|
974
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
975
|
-
token.innerTokens.push(kv.accept(this));
|
|
976
|
-
}
|
|
977
|
-
// Add ELSE clause if present
|
|
978
|
-
if (arg.elseValue) {
|
|
979
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
980
|
-
token.innerTokens.push(this.createElseToken(arg.elseValue, arg.comments));
|
|
981
|
-
}
|
|
982
|
-
// Add SwitchCaseArgument comments (END keyword) if present and no elseValue
|
|
983
|
-
else if (arg.comments && arg.comments.length > 0) {
|
|
984
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
985
|
-
const commentTokens = this.createInlineCommentSequence(arg.comments);
|
|
986
|
-
token.innerTokens.push(...commentTokens);
|
|
987
|
-
}
|
|
988
|
-
return token;
|
|
989
|
-
}
|
|
990
|
-
createElseToken(elseValue, switchCaseComments) {
|
|
991
|
-
// Creates a token for the ELSE clause in a CASE expression.
|
|
992
|
-
const elseToken = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ElseClause); // Add the ELSE keyword
|
|
993
|
-
elseToken.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'else'));
|
|
994
|
-
// Add ELSE and END keyword comments if present
|
|
995
|
-
// The switchCaseComments contains both ELSE and END comments in order ['e1', 'end']
|
|
996
|
-
if (switchCaseComments && switchCaseComments.length > 0) {
|
|
997
|
-
elseToken.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
998
|
-
const commentTokens = this.createInlineCommentSequence(switchCaseComments);
|
|
999
|
-
elseToken.innerTokens.push(...commentTokens);
|
|
1000
|
-
}
|
|
1001
|
-
// Create a container for the ELSE value to enable proper indentation
|
|
1002
|
-
elseToken.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1003
|
-
const elseValueContainer = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CaseElseValue);
|
|
1004
|
-
elseValueContainer.innerTokens.push(this.visit(elseValue));
|
|
1005
|
-
elseToken.innerTokens.push(elseValueContainer);
|
|
1006
|
-
return elseToken;
|
|
1007
|
-
}
|
|
1008
|
-
visitCaseKeyValuePair(arg) {
|
|
1009
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CaseKeyValuePair);
|
|
1010
|
-
// Handle positioned comments for CaseKeyValuePair
|
|
1011
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
1012
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
1013
|
-
// Clear positioned comments to prevent duplicate processing
|
|
1014
|
-
arg.positionedComments = null;
|
|
1015
|
-
}
|
|
1016
|
-
// Create WHEN clause
|
|
1017
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'when'));
|
|
1018
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1019
|
-
token.innerTokens.push(this.visit(arg.key)); // Create THEN clause
|
|
1020
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1021
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'then'));
|
|
1022
|
-
// Add THEN keyword comments if present
|
|
1023
|
-
if (arg.comments && arg.comments.length > 0) {
|
|
1024
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1025
|
-
const commentTokens = this.createInlineCommentSequence(arg.comments);
|
|
1026
|
-
token.innerTokens.push(...commentTokens);
|
|
1027
|
-
}
|
|
1028
|
-
// Create a container for the THEN value to enable proper indentation
|
|
1029
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1030
|
-
const thenValueContainer = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CaseThenValue);
|
|
1031
|
-
thenValueContainer.innerTokens.push(this.visit(arg.value));
|
|
1032
|
-
token.innerTokens.push(thenValueContainer);
|
|
1033
|
-
return token;
|
|
1034
|
-
}
|
|
1035
|
-
visitRawString(arg) {
|
|
1036
|
-
// Even for non-container tokens, set the container type for context
|
|
1037
|
-
return new SqlPrintToken(SqlPrintTokenType.value, arg.value, SqlPrintTokenContainerType.RawString);
|
|
1038
|
-
}
|
|
1039
|
-
visitIdentifierString(arg) {
|
|
1040
|
-
// Create an identifier token and decorate it using the identifierDecorator
|
|
1041
|
-
const text = arg.name === "*" ? arg.name : this.identifierDecorator.decorate(arg.name);
|
|
1042
|
-
// Handle positioned comments for IdentifierString
|
|
1043
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
1044
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.IdentifierString);
|
|
1045
|
-
// Add positioned comments
|
|
1046
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
1047
|
-
// Clear positioned comments to prevent duplicate processing
|
|
1048
|
-
arg.positionedComments = null;
|
|
1049
|
-
// Add the identifier text as the main token
|
|
1050
|
-
const valueToken = new SqlPrintToken(SqlPrintTokenType.value, text);
|
|
1051
|
-
token.innerTokens.push(valueToken);
|
|
1052
|
-
return token;
|
|
1053
|
-
}
|
|
1054
|
-
// If there are legacy comments, create a container instead of a simple value token
|
|
1055
|
-
if (arg.comments && arg.comments.length > 0) {
|
|
1056
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.IdentifierString);
|
|
1057
|
-
// Add the identifier text as the main token
|
|
1058
|
-
const valueToken = new SqlPrintToken(SqlPrintTokenType.value, text);
|
|
1059
|
-
token.innerTokens.push(valueToken);
|
|
1060
|
-
// Add legacy comments to the token
|
|
1061
|
-
this.addComponentComments(token, arg);
|
|
1062
|
-
return token;
|
|
1063
|
-
}
|
|
1064
|
-
const token = new SqlPrintToken(SqlPrintTokenType.value, text, SqlPrintTokenContainerType.IdentifierString);
|
|
1065
|
-
return token;
|
|
1066
|
-
}
|
|
1067
|
-
visitParenExpression(arg) {
|
|
1068
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ParenExpression);
|
|
1069
|
-
// Handle positioned comments for ParenExpression - check both self and inner expression
|
|
1070
|
-
const hasOwnComments = arg.positionedComments && arg.positionedComments.length > 0;
|
|
1071
|
-
const hasInnerComments = arg.expression.positionedComments && arg.expression.positionedComments.length > 0;
|
|
1072
|
-
// Store inner comments for later processing and clear to prevent duplicate processing
|
|
1073
|
-
let innerBeforeComments = [];
|
|
1074
|
-
let innerAfterComments = [];
|
|
1075
|
-
if (hasInnerComments) {
|
|
1076
|
-
innerBeforeComments = arg.expression.getPositionedComments('before');
|
|
1077
|
-
innerAfterComments = arg.expression.getPositionedComments('after');
|
|
1078
|
-
arg.expression.positionedComments = null;
|
|
1079
|
-
}
|
|
1080
|
-
// Build basic structure first
|
|
1081
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1082
|
-
token.innerTokens.push(this.visit(arg.expression));
|
|
1083
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1084
|
-
// Now add positioned comments in the correct positions manually
|
|
1085
|
-
if (innerBeforeComments.length > 0) {
|
|
1086
|
-
const commentBlocks = this.createCommentBlocks(innerBeforeComments);
|
|
1087
|
-
// Insert after opening paren (index 1) without separator space
|
|
1088
|
-
let insertIndex = 1;
|
|
1089
|
-
for (const commentBlock of commentBlocks) {
|
|
1090
|
-
token.innerTokens.splice(insertIndex, 0, commentBlock);
|
|
1091
|
-
insertIndex++;
|
|
1092
|
-
}
|
|
1093
|
-
}
|
|
1094
|
-
if (innerAfterComments.length > 0) {
|
|
1095
|
-
const commentBlocks = this.createCommentBlocks(innerAfterComments);
|
|
1096
|
-
// Insert before closing paren (last position) without separator space
|
|
1097
|
-
const insertIndex = token.innerTokens.length;
|
|
1098
|
-
for (const commentBlock of commentBlocks) {
|
|
1099
|
-
token.innerTokens.splice(insertIndex - 1, 0, commentBlock);
|
|
1100
|
-
}
|
|
1101
|
-
}
|
|
1102
|
-
if (hasOwnComments) {
|
|
1103
|
-
this.addPositionedCommentsToParenExpression(token, arg);
|
|
1104
|
-
// Clear positioned comments to prevent duplicate processing in parent containers
|
|
1105
|
-
arg.positionedComments = null;
|
|
1106
|
-
}
|
|
1107
|
-
return token;
|
|
1108
|
-
}
|
|
1109
|
-
visitCastExpression(arg) {
|
|
1110
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CastExpression);
|
|
1111
|
-
// Use PostgreSQL-specific :: casts only when the preset explicitly opts in.
|
|
1112
|
-
if (this.castStyle === 'postgres') {
|
|
1113
|
-
token.innerTokens.push(this.visit(arg.input));
|
|
1114
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.operator, '::'));
|
|
1115
|
-
token.innerTokens.push(this.visit(arg.castType));
|
|
1116
|
-
return token;
|
|
1117
|
-
}
|
|
1118
|
-
// Default to ANSI-compliant CAST(expression AS type) syntax for broader compatibility.
|
|
1119
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'cast'));
|
|
1120
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1121
|
-
token.innerTokens.push(this.visit(arg.input));
|
|
1122
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1123
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
|
|
1124
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1125
|
-
token.innerTokens.push(this.visit(arg.castType));
|
|
1126
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1127
|
-
return token;
|
|
1128
|
-
}
|
|
1129
|
-
visitCaseExpression(arg) {
|
|
1130
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CaseExpression);
|
|
1131
|
-
// Handle positioned comments for CaseExpression (unified spec: positioned comments only)
|
|
1132
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
1133
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
1134
|
-
// Clear positioned comments to prevent duplicate processing
|
|
1135
|
-
arg.positionedComments = null;
|
|
1136
|
-
}
|
|
1137
|
-
const promotedComments = [];
|
|
1138
|
-
const trailingSwitchComments = this.extractSwitchAfterComments(arg.switchCase);
|
|
1139
|
-
let conditionToken = null;
|
|
1140
|
-
if (arg.condition) {
|
|
1141
|
-
conditionToken = this.visit(arg.condition);
|
|
1142
|
-
promotedComments.push(...this.collectCaseLeadingCommentBlocks(conditionToken));
|
|
1143
|
-
}
|
|
1144
|
-
const switchToken = this.visit(arg.switchCase);
|
|
1145
|
-
promotedComments.push(...this.collectCaseLeadingCommentsFromSwitch(switchToken));
|
|
1146
|
-
if (promotedComments.length > 0) {
|
|
1147
|
-
token.innerTokens.push(...promotedComments);
|
|
1148
|
-
}
|
|
1149
|
-
// Add the CASE keyword
|
|
1150
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'case'));
|
|
1151
|
-
// Add the condition if exists
|
|
1152
|
-
if (conditionToken) {
|
|
1153
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1154
|
-
token.innerTokens.push(conditionToken);
|
|
1155
|
-
}
|
|
1156
|
-
// Add the WHEN/THEN pairs and ELSE
|
|
1157
|
-
token.innerTokens.push(switchToken);
|
|
1158
|
-
// Add the END keyword
|
|
1159
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1160
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'end'));
|
|
1161
|
-
if (trailingSwitchComments.length > 0) {
|
|
1162
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.commentNewline, ''));
|
|
1163
|
-
const trailingBlocks = this.createCommentBlocks(trailingSwitchComments);
|
|
1164
|
-
token.innerTokens.push(...trailingBlocks);
|
|
1165
|
-
}
|
|
1166
|
-
return token;
|
|
1167
|
-
}
|
|
1168
|
-
extractSwitchAfterComments(arg) {
|
|
1169
|
-
if (!arg.positionedComments || arg.positionedComments.length === 0) {
|
|
1170
|
-
return [];
|
|
1171
|
-
}
|
|
1172
|
-
const trailing = [];
|
|
1173
|
-
const retained = [];
|
|
1174
|
-
for (const entry of arg.positionedComments) {
|
|
1175
|
-
if (entry.position === 'after') {
|
|
1176
|
-
trailing.push(...entry.comments);
|
|
1177
|
-
}
|
|
1178
|
-
else {
|
|
1179
|
-
retained.push(entry);
|
|
1180
|
-
}
|
|
1181
|
-
}
|
|
1182
|
-
arg.positionedComments = retained.length > 0 ? retained : null;
|
|
1183
|
-
return trailing;
|
|
1184
|
-
}
|
|
1185
|
-
collectCaseLeadingCommentsFromSwitch(token) {
|
|
1186
|
-
if (!token.innerTokens || token.innerTokens.length === 0) {
|
|
1187
|
-
return [];
|
|
1188
|
-
}
|
|
1189
|
-
const pairToken = token.innerTokens.find(child => child.containerType === SqlPrintTokenContainerType.CaseKeyValuePair);
|
|
1190
|
-
if (!pairToken) {
|
|
1191
|
-
return [];
|
|
1192
|
-
}
|
|
1193
|
-
const keyToken = this.findCaseKeyToken(pairToken);
|
|
1194
|
-
if (!keyToken) {
|
|
1195
|
-
return [];
|
|
1196
|
-
}
|
|
1197
|
-
return this.collectCaseLeadingCommentBlocks(keyToken);
|
|
1198
|
-
}
|
|
1199
|
-
findCaseKeyToken(pairToken) {
|
|
1200
|
-
for (const child of pairToken.innerTokens) {
|
|
1201
|
-
if (child.containerType === SqlPrintTokenContainerType.CommentBlock) {
|
|
1202
|
-
continue;
|
|
1203
|
-
}
|
|
1204
|
-
if (child.type === SqlPrintTokenType.space) {
|
|
1205
|
-
continue;
|
|
1206
|
-
}
|
|
1207
|
-
if (child.type === SqlPrintTokenType.keyword) {
|
|
1208
|
-
continue;
|
|
1209
|
-
}
|
|
1210
|
-
if (child.containerType === SqlPrintTokenContainerType.CaseThenValue) {
|
|
1211
|
-
continue;
|
|
1212
|
-
}
|
|
1213
|
-
return child;
|
|
1214
|
-
}
|
|
1215
|
-
return undefined;
|
|
1216
|
-
}
|
|
1217
|
-
collectCaseLeadingCommentBlocks(token) {
|
|
1218
|
-
if (!token.innerTokens || token.innerTokens.length === 0) {
|
|
1219
|
-
return [];
|
|
1220
|
-
}
|
|
1221
|
-
const collected = [];
|
|
1222
|
-
this.collectCaseLeadingCommentBlocksRecursive(token, collected, new Set(), 0);
|
|
1223
|
-
return collected;
|
|
1224
|
-
}
|
|
1225
|
-
collectCaseLeadingCommentBlocksRecursive(token, collected, seen, depth) {
|
|
1226
|
-
if (!token.innerTokens || token.innerTokens.length === 0) {
|
|
1227
|
-
return;
|
|
1228
|
-
}
|
|
1229
|
-
let removedAny = false;
|
|
1230
|
-
while (token.innerTokens.length > 0) {
|
|
1231
|
-
const first = token.innerTokens[0];
|
|
1232
|
-
if (first.containerType === SqlPrintTokenContainerType.CommentBlock) {
|
|
1233
|
-
token.innerTokens.shift();
|
|
1234
|
-
const signature = this.commentBlockSignature(first);
|
|
1235
|
-
if (!(depth > 0 && seen.has(signature))) {
|
|
1236
|
-
collected.push(first);
|
|
1237
|
-
seen.add(signature);
|
|
1238
|
-
}
|
|
1239
|
-
removedAny = true;
|
|
1240
|
-
continue;
|
|
1241
|
-
}
|
|
1242
|
-
if (!removedAny && first.type === SqlPrintTokenType.space) {
|
|
1243
|
-
return;
|
|
1244
|
-
}
|
|
1245
|
-
break;
|
|
1246
|
-
}
|
|
1247
|
-
if (!token.innerTokens || token.innerTokens.length === 0) {
|
|
1248
|
-
return;
|
|
1249
|
-
}
|
|
1250
|
-
const firstChild = token.innerTokens[0];
|
|
1251
|
-
if (this.isTransparentCaseWrapper(firstChild)) {
|
|
1252
|
-
this.collectCaseLeadingCommentBlocksRecursive(firstChild, collected, seen, depth + 1);
|
|
1253
|
-
}
|
|
1254
|
-
}
|
|
1255
|
-
isTransparentCaseWrapper(token) {
|
|
1256
|
-
if (!token) {
|
|
1257
|
-
return false;
|
|
1258
|
-
}
|
|
1259
|
-
const transparentContainers = [
|
|
1260
|
-
SqlPrintTokenContainerType.ColumnReference,
|
|
1261
|
-
SqlPrintTokenContainerType.QualifiedName,
|
|
1262
|
-
SqlPrintTokenContainerType.IdentifierString,
|
|
1263
|
-
SqlPrintTokenContainerType.RawString,
|
|
1264
|
-
SqlPrintTokenContainerType.LiteralValue,
|
|
1265
|
-
SqlPrintTokenContainerType.ParenExpression,
|
|
1266
|
-
SqlPrintTokenContainerType.UnaryExpression,
|
|
1267
|
-
];
|
|
1268
|
-
return transparentContainers.includes(token.containerType);
|
|
1269
|
-
}
|
|
1270
|
-
commentBlockSignature(commentBlock) {
|
|
1271
|
-
if (!commentBlock.innerTokens || commentBlock.innerTokens.length === 0) {
|
|
1272
|
-
return '';
|
|
1273
|
-
}
|
|
1274
|
-
return commentBlock.innerTokens
|
|
1275
|
-
.filter(inner => inner.text !== '')
|
|
1276
|
-
.map(inner => inner.text)
|
|
1277
|
-
.join('|');
|
|
1278
|
-
}
|
|
1279
|
-
visitArrayExpression(arg) {
|
|
1280
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ArrayExpression);
|
|
1281
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'array'));
|
|
1282
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.parenthesis, '['));
|
|
1283
|
-
token.innerTokens.push(this.visit(arg.expression));
|
|
1284
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.parenthesis, ']'));
|
|
1285
|
-
return token;
|
|
1286
|
-
}
|
|
1287
|
-
visitArrayQueryExpression(arg) {
|
|
1288
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ArrayExpression);
|
|
1289
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'array'));
|
|
1290
|
-
// ARRAY(SELECT ...)
|
|
1291
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.parenthesis, '('));
|
|
1292
|
-
token.innerTokens.push(this.visit(arg.query));
|
|
1293
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.parenthesis, ')'));
|
|
1294
|
-
return token;
|
|
1295
|
-
}
|
|
1296
|
-
visitArraySliceExpression(arg) {
|
|
1297
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ArrayExpression);
|
|
1298
|
-
// array expression
|
|
1299
|
-
token.innerTokens.push(this.visit(arg.array));
|
|
1300
|
-
// opening bracket
|
|
1301
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.parenthesis, '['));
|
|
1302
|
-
// start index (optional)
|
|
1303
|
-
if (arg.startIndex) {
|
|
1304
|
-
token.innerTokens.push(this.visit(arg.startIndex));
|
|
1305
|
-
}
|
|
1306
|
-
// colon separator
|
|
1307
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.operator, ':'));
|
|
1308
|
-
// end index (optional)
|
|
1309
|
-
if (arg.endIndex) {
|
|
1310
|
-
token.innerTokens.push(this.visit(arg.endIndex));
|
|
1311
|
-
}
|
|
1312
|
-
// closing bracket
|
|
1313
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.parenthesis, ']'));
|
|
1314
|
-
return token;
|
|
1315
|
-
}
|
|
1316
|
-
visitArrayIndexExpression(arg) {
|
|
1317
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ArrayExpression);
|
|
1318
|
-
// array expression
|
|
1319
|
-
token.innerTokens.push(this.visit(arg.array));
|
|
1320
|
-
// opening bracket
|
|
1321
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.parenthesis, '['));
|
|
1322
|
-
// index
|
|
1323
|
-
token.innerTokens.push(this.visit(arg.index));
|
|
1324
|
-
// closing bracket
|
|
1325
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.parenthesis, ']'));
|
|
1326
|
-
return token;
|
|
1327
|
-
}
|
|
1328
|
-
visitBetweenExpression(arg) {
|
|
1329
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.BetweenExpression);
|
|
1330
|
-
token.innerTokens.push(this.visit(arg.expression));
|
|
1331
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1332
|
-
if (arg.negated) {
|
|
1333
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'not'));
|
|
1334
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1335
|
-
}
|
|
1336
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'between'));
|
|
1337
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1338
|
-
token.innerTokens.push(this.visit(arg.lower));
|
|
1339
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1340
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'and'));
|
|
1341
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1342
|
-
token.innerTokens.push(this.visit(arg.upper));
|
|
1343
|
-
return token;
|
|
1344
|
-
}
|
|
1345
|
-
visitStringSpecifierExpression(arg) {
|
|
1346
|
-
// Combine specifier and value into a single token
|
|
1347
|
-
const specifier = arg.specifier.accept(this).text;
|
|
1348
|
-
const value = arg.value.accept(this).text;
|
|
1349
|
-
return new SqlPrintToken(SqlPrintTokenType.value, specifier + value, SqlPrintTokenContainerType.StringSpecifierExpression);
|
|
1350
|
-
}
|
|
1351
|
-
visitTypeValue(arg) {
|
|
1352
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.TypeValue);
|
|
1353
|
-
this.addComponentComments(token, arg);
|
|
1354
|
-
token.innerTokens.push(arg.qualifiedName.accept(this));
|
|
1355
|
-
if (arg.argument) {
|
|
1356
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1357
|
-
token.innerTokens.push(this.visit(arg.argument));
|
|
1358
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1359
|
-
}
|
|
1360
|
-
return token;
|
|
1361
|
-
}
|
|
1362
|
-
visitTupleExpression(arg) {
|
|
1363
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.TupleExpression);
|
|
1364
|
-
const requiresMultiline = this.tupleRequiresMultiline(arg);
|
|
1365
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1366
|
-
for (let i = 0; i < arg.values.length; i++) {
|
|
1367
|
-
if (i > 0) {
|
|
1368
|
-
token.innerTokens.push(...SqlPrintTokenParser.argumentCommaSpaceTokens());
|
|
1369
|
-
}
|
|
1370
|
-
token.innerTokens.push(this.visit(arg.values[i]));
|
|
1371
|
-
}
|
|
1372
|
-
if (requiresMultiline) {
|
|
1373
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.commentNewline, '', SqlPrintTokenContainerType.TupleExpression));
|
|
1374
|
-
}
|
|
1375
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1376
|
-
return token;
|
|
1377
|
-
}
|
|
1378
|
-
tupleRequiresMultiline(tuple) {
|
|
1379
|
-
for (const value of tuple.values) {
|
|
1380
|
-
if (this.hasInlineComments(value)) {
|
|
1381
|
-
return true;
|
|
1382
|
-
}
|
|
1383
|
-
}
|
|
1384
|
-
return false;
|
|
1385
|
-
}
|
|
1386
|
-
hasInlineComments(component) {
|
|
1387
|
-
if (this.hasLeadingComments(component)) {
|
|
1388
|
-
return true;
|
|
1389
|
-
}
|
|
1390
|
-
if (component instanceof TupleExpression) {
|
|
1391
|
-
return this.tupleRequiresMultiline(component);
|
|
1392
|
-
}
|
|
1393
|
-
return false;
|
|
1394
|
-
}
|
|
1395
|
-
hasLeadingComments(component) {
|
|
1396
|
-
var _a;
|
|
1397
|
-
const positioned = (_a = component.positionedComments) !== null && _a !== void 0 ? _a : [];
|
|
1398
|
-
const before = positioned.find(pc => pc.position === 'before');
|
|
1399
|
-
if (before && before.comments.some(comment => comment.trim().length > 0)) {
|
|
1400
|
-
return true;
|
|
1401
|
-
}
|
|
1402
|
-
return false;
|
|
1403
|
-
}
|
|
1404
|
-
visitWindowFrameExpression(arg) {
|
|
1405
|
-
// Compose window frame expression: over(partition by ... order by ... rows ...)
|
|
1406
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.WindowFrameExpression);
|
|
1407
|
-
let first = true;
|
|
1408
|
-
if (arg.partition) {
|
|
1409
|
-
token.innerTokens.push(this.visit(arg.partition));
|
|
1410
|
-
first = false;
|
|
1411
|
-
}
|
|
1412
|
-
if (arg.order) {
|
|
1413
|
-
if (!first) {
|
|
1414
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1415
|
-
}
|
|
1416
|
-
else {
|
|
1417
|
-
first = false;
|
|
1418
|
-
}
|
|
1419
|
-
token.innerTokens.push(this.visit(arg.order));
|
|
1420
|
-
}
|
|
1421
|
-
if (arg.frameSpec) {
|
|
1422
|
-
if (!first) {
|
|
1423
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1424
|
-
}
|
|
1425
|
-
else {
|
|
1426
|
-
first = false;
|
|
1427
|
-
}
|
|
1428
|
-
token.innerTokens.push(this.visit(arg.frameSpec));
|
|
1429
|
-
}
|
|
1430
|
-
return token;
|
|
1431
|
-
}
|
|
1432
|
-
visitWindowFrameSpec(arg) {
|
|
1433
|
-
// This method prints a window frame specification, such as "rows between ... and ..." or "range ...".
|
|
1434
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.WindowFrameSpec);
|
|
1435
|
-
// Add frame type (e.g., "rows", "range", "groups")
|
|
1436
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.frameType));
|
|
1437
|
-
if (arg.endBound === null) {
|
|
1438
|
-
// Only start bound: e.g., "rows unbounded preceding"
|
|
1439
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1440
|
-
token.innerTokens.push(arg.startBound.accept(this));
|
|
1441
|
-
}
|
|
1442
|
-
else {
|
|
1443
|
-
// Between: e.g., "rows between unbounded preceding and current row"
|
|
1444
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1445
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'between'));
|
|
1446
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1447
|
-
token.innerTokens.push(arg.startBound.accept(this));
|
|
1448
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1449
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'and'));
|
|
1450
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1451
|
-
token.innerTokens.push(arg.endBound.accept(this));
|
|
1452
|
-
}
|
|
1453
|
-
return token;
|
|
1454
|
-
}
|
|
1455
|
-
/**
|
|
1456
|
-
* Prints a window frame boundary value, such as "5 preceding" or "3 following".
|
|
1457
|
-
* @param arg WindowFrameBoundaryValue
|
|
1458
|
-
*/
|
|
1459
|
-
visitWindowFrameBoundaryValue(arg) {
|
|
1460
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.WindowFrameBoundaryValue);
|
|
1461
|
-
token.innerTokens.push(arg.value.accept(this));
|
|
1462
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1463
|
-
// true for "FOLLOWING", false for "PRECEDING"
|
|
1464
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.isFollowing ? 'following' : 'preceding'));
|
|
1465
|
-
return token;
|
|
1466
|
-
}
|
|
1467
|
-
/**
|
|
1468
|
-
* Prints a static window frame bound, such as "unbounded preceding", "current row", or "unbounded following".
|
|
1469
|
-
* @param arg WindowFrameBoundStatic
|
|
1470
|
-
*/
|
|
1471
|
-
visitWindowFrameBoundStatic(arg) {
|
|
1472
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, arg.bound);
|
|
1473
|
-
return token;
|
|
1474
|
-
}
|
|
1475
|
-
visitSelectItem(arg) {
|
|
1476
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SelectItem);
|
|
1477
|
-
// Preserve original positioned comments to avoid mutating the source object
|
|
1478
|
-
const originalSelectItemPositionedComments = arg.positionedComments;
|
|
1479
|
-
const originalValuePositionedComments = arg.value.positionedComments;
|
|
1480
|
-
const isParenExpression = arg.value instanceof ParenExpression;
|
|
1481
|
-
// Clear positioned comments from the value to avoid duplication when SelectItem itself renders them.
|
|
1482
|
-
// ParenExpression handles trailing comments internally, so we must keep its metadata intact.
|
|
1483
|
-
if (!isParenExpression) {
|
|
1484
|
-
arg.value.positionedComments = null;
|
|
1485
|
-
}
|
|
1486
|
-
// Add positioned comments in recorded order
|
|
1487
|
-
const beforeComments = arg.getPositionedComments('before');
|
|
1488
|
-
const afterComments = arg.getPositionedComments('after');
|
|
1489
|
-
if (beforeComments.length > 0) {
|
|
1490
|
-
const commentTokens = this.createInlineCommentSequence(beforeComments);
|
|
1491
|
-
token.innerTokens.push(...commentTokens);
|
|
1492
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1493
|
-
}
|
|
1494
|
-
token.innerTokens.push(this.visit(arg.value));
|
|
1495
|
-
if (afterComments.length > 0 && !isParenExpression) {
|
|
1496
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1497
|
-
const commentTokens = this.createInlineCommentSequence(afterComments);
|
|
1498
|
-
token.innerTokens.push(...commentTokens);
|
|
1499
|
-
}
|
|
1500
|
-
// Restore original positioned comments to avoid side effects
|
|
1501
|
-
arg.positionedComments = originalSelectItemPositionedComments;
|
|
1502
|
-
arg.value.positionedComments = originalValuePositionedComments;
|
|
1503
|
-
if (!arg.identifier) {
|
|
1504
|
-
return token;
|
|
1505
|
-
}
|
|
1506
|
-
// No alias needed if it matches the default name
|
|
1507
|
-
if (arg.value instanceof ColumnReference) {
|
|
1508
|
-
const defaultName = arg.value.column.name;
|
|
1509
|
-
if (arg.identifier.name === defaultName) {
|
|
1510
|
-
return token;
|
|
1511
|
-
}
|
|
1512
|
-
}
|
|
1513
|
-
// Add alias if it is different from the default name
|
|
1514
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1515
|
-
// Handle AS keyword positioned comments (before AS)
|
|
1516
|
-
const asKeywordPositionedComments = 'asKeywordPositionedComments' in arg ? arg.asKeywordPositionedComments : null;
|
|
1517
|
-
if (asKeywordPositionedComments) {
|
|
1518
|
-
const beforeComments = asKeywordPositionedComments.filter((pc) => pc.position === 'before');
|
|
1519
|
-
if (beforeComments.length > 0) {
|
|
1520
|
-
for (const posComment of beforeComments) {
|
|
1521
|
-
const commentTokens = this.createInlineCommentSequence(posComment.comments);
|
|
1522
|
-
token.innerTokens.push(...commentTokens);
|
|
1523
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1524
|
-
}
|
|
1525
|
-
}
|
|
1526
|
-
}
|
|
1527
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
|
|
1528
|
-
// Handle AS keyword positioned comments (after AS)
|
|
1529
|
-
if (asKeywordPositionedComments) {
|
|
1530
|
-
const afterComments = asKeywordPositionedComments.filter((pc) => pc.position === 'after');
|
|
1531
|
-
if (afterComments.length > 0) {
|
|
1532
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1533
|
-
for (const posComment of afterComments) {
|
|
1534
|
-
const commentTokens = this.createInlineCommentSequence(posComment.comments);
|
|
1535
|
-
token.innerTokens.push(...commentTokens);
|
|
1536
|
-
}
|
|
1537
|
-
}
|
|
1538
|
-
}
|
|
1539
|
-
// Fallback: Add AS keyword legacy comments if present
|
|
1540
|
-
const asKeywordComments = 'asKeywordComments' in arg ? arg.asKeywordComments : null;
|
|
1541
|
-
if (asKeywordComments && asKeywordComments.length > 0) {
|
|
1542
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1543
|
-
const commentTokens = this.createInlineCommentSequence(asKeywordComments);
|
|
1544
|
-
token.innerTokens.push(...commentTokens);
|
|
1545
|
-
}
|
|
1546
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1547
|
-
// Visit identifier to get alias with proper spacing
|
|
1548
|
-
const identifierToken = this.visit(arg.identifier);
|
|
1549
|
-
token.innerTokens.push(identifierToken);
|
|
1550
|
-
// Handle alias positioned comments (after alias)
|
|
1551
|
-
const aliasPositionedComments = 'aliasPositionedComments' in arg ? arg.aliasPositionedComments : null;
|
|
1552
|
-
if (aliasPositionedComments) {
|
|
1553
|
-
const afterComments = aliasPositionedComments.filter((pc) => pc.position === 'after');
|
|
1554
|
-
if (afterComments.length > 0) {
|
|
1555
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1556
|
-
for (const posComment of afterComments) {
|
|
1557
|
-
const commentTokens = this.createInlineCommentSequence(posComment.comments);
|
|
1558
|
-
token.innerTokens.push(...commentTokens);
|
|
1559
|
-
}
|
|
1560
|
-
}
|
|
1561
|
-
}
|
|
1562
|
-
// Fallback: Add alias legacy comments if present
|
|
1563
|
-
const aliasComments = arg.aliasComments;
|
|
1564
|
-
if (aliasComments && aliasComments.length > 0) {
|
|
1565
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1566
|
-
const commentTokens = this.createInlineCommentSequence(aliasComments);
|
|
1567
|
-
token.innerTokens.push(...commentTokens);
|
|
1568
|
-
}
|
|
1569
|
-
return token;
|
|
1570
|
-
}
|
|
1571
|
-
visitSelectClause(arg) {
|
|
1572
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'select', SqlPrintTokenContainerType.SelectClause);
|
|
1573
|
-
// Handle positioned comments for SelectClause (unified spec)
|
|
1574
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
1575
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
1576
|
-
// Clear positioned comments to prevent duplicate processing
|
|
1577
|
-
arg.positionedComments = null;
|
|
1578
|
-
}
|
|
1579
|
-
// Handle hints and DISTINCT as part of the keyword line
|
|
1580
|
-
let selectKeywordText = 'select';
|
|
1581
|
-
// Add hint clauses immediately after SELECT (before DISTINCT)
|
|
1582
|
-
for (const hint of arg.hints) {
|
|
1583
|
-
selectKeywordText += ' ' + this.visit(hint).text;
|
|
1584
|
-
}
|
|
1585
|
-
// Add DISTINCT after hints (if present)
|
|
1586
|
-
if (arg.distinct) {
|
|
1587
|
-
const distinctToken = arg.distinct.accept(this);
|
|
1588
|
-
if (distinctToken.innerTokens && distinctToken.innerTokens.length > 0) {
|
|
1589
|
-
// For compound DISTINCT tokens (like DISTINCT ON), concatenate all parts
|
|
1590
|
-
let distinctText = distinctToken.text;
|
|
1591
|
-
for (const innerToken of distinctToken.innerTokens) {
|
|
1592
|
-
distinctText += this.flattenTokenText(innerToken);
|
|
1593
|
-
}
|
|
1594
|
-
selectKeywordText += ' ' + distinctText;
|
|
1595
|
-
}
|
|
1596
|
-
else {
|
|
1597
|
-
selectKeywordText += ' ' + distinctToken.text;
|
|
1598
|
-
}
|
|
1599
|
-
}
|
|
1600
|
-
// Update the token text to include hints and DISTINCT
|
|
1601
|
-
token.text = selectKeywordText;
|
|
1602
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1603
|
-
for (let i = 0; i < arg.items.length; i++) {
|
|
1604
|
-
if (i > 0) {
|
|
1605
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
1606
|
-
}
|
|
1607
|
-
token.innerTokens.push(this.visit(arg.items[i]));
|
|
1608
|
-
}
|
|
1609
|
-
return token;
|
|
1610
|
-
}
|
|
1611
|
-
flattenTokenText(token) {
|
|
1612
|
-
let result = token.text;
|
|
1613
|
-
if (token.innerTokens) {
|
|
1614
|
-
for (const innerToken of token.innerTokens) {
|
|
1615
|
-
result += this.flattenTokenText(innerToken);
|
|
1616
|
-
}
|
|
1617
|
-
}
|
|
1618
|
-
return result;
|
|
1619
|
-
}
|
|
1620
|
-
visitHintClause(arg) {
|
|
1621
|
-
const token = new SqlPrintToken(SqlPrintTokenType.value, arg.getFullHint());
|
|
1622
|
-
return token;
|
|
1623
|
-
}
|
|
1624
|
-
visitDistinct(arg) {
|
|
1625
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'distinct');
|
|
1626
|
-
// Handle positioned comments for Distinct (unified spec)
|
|
1627
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
1628
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
1629
|
-
// Clear positioned comments to prevent duplicate processing
|
|
1630
|
-
arg.positionedComments = null;
|
|
1631
|
-
}
|
|
1632
|
-
return token;
|
|
1633
|
-
}
|
|
1634
|
-
visitDistinctOn(arg) {
|
|
1635
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.DistinctOn);
|
|
1636
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'distinct on'));
|
|
1637
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1638
|
-
token.innerTokens.push(arg.value.accept(this));
|
|
1639
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1640
|
-
return token;
|
|
1641
|
-
}
|
|
1642
|
-
visitTableSource(arg) {
|
|
1643
|
-
// Print table name with optional namespaces and alias
|
|
1644
|
-
let fullName = '';
|
|
1645
|
-
if (Array.isArray(arg.namespaces) && arg.namespaces.length > 0) {
|
|
1646
|
-
fullName = arg.namespaces.map(ns => ns.accept(this).text).join('.') + '.';
|
|
1647
|
-
}
|
|
1648
|
-
fullName += arg.table.accept(this).text;
|
|
1649
|
-
const token = new SqlPrintToken(SqlPrintTokenType.value, fullName);
|
|
1650
|
-
this.addComponentComments(token, arg);
|
|
1651
|
-
// alias (if present and different from table name)
|
|
1652
|
-
if (arg.identifier && arg.identifier.name !== arg.table.name) {
|
|
1653
|
-
}
|
|
1654
|
-
return token;
|
|
1655
|
-
}
|
|
1656
|
-
visitSourceExpression(arg) {
|
|
1657
|
-
// Print source expression (e.g. "table", "table as t", "schema.table t")
|
|
1658
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SourceExpression);
|
|
1659
|
-
token.innerTokens.push(arg.datasource.accept(this));
|
|
1660
|
-
if (!arg.aliasExpression) {
|
|
1661
|
-
return token;
|
|
1662
|
-
}
|
|
1663
|
-
if (arg.datasource instanceof TableSource) {
|
|
1664
|
-
// No alias needed if it matches the default name
|
|
1665
|
-
const defaultName = arg.datasource.table.name;
|
|
1666
|
-
if (arg.aliasExpression.table.name === defaultName) {
|
|
1667
|
-
return token;
|
|
1668
|
-
}
|
|
1669
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1670
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
|
|
1671
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1672
|
-
// exclude column aliases
|
|
1673
|
-
token.innerTokens.push(arg.aliasExpression.accept(this));
|
|
1674
|
-
return token;
|
|
1675
|
-
}
|
|
1676
|
-
else {
|
|
1677
|
-
// For other source types, just print the alias
|
|
1678
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1679
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
|
|
1680
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1681
|
-
// included column aliases
|
|
1682
|
-
token.innerTokens.push(arg.aliasExpression.accept(this));
|
|
1683
|
-
return token;
|
|
1684
|
-
}
|
|
1685
|
-
}
|
|
1686
|
-
visitFromClause(arg) {
|
|
1687
|
-
// Build a declaration order map so JOIN ON operands can be normalized later.
|
|
1688
|
-
let contextPushed = false;
|
|
1689
|
-
if (this.normalizeJoinConditionOrder) {
|
|
1690
|
-
const aliasOrder = this.buildJoinAliasOrder(arg);
|
|
1691
|
-
if (aliasOrder.size > 0) {
|
|
1692
|
-
this.joinConditionContexts.push({ aliasOrder });
|
|
1693
|
-
contextPushed = true;
|
|
1694
|
-
}
|
|
1695
|
-
}
|
|
1696
|
-
try {
|
|
1697
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'from', SqlPrintTokenContainerType.FromClause);
|
|
1698
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1699
|
-
token.innerTokens.push(this.visit(arg.source));
|
|
1700
|
-
if (arg.joins) {
|
|
1701
|
-
for (let i = 0; i < arg.joins.length; i++) {
|
|
1702
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1703
|
-
token.innerTokens.push(this.visit(arg.joins[i]));
|
|
1704
|
-
}
|
|
1705
|
-
}
|
|
1706
|
-
return token;
|
|
1707
|
-
}
|
|
1708
|
-
finally {
|
|
1709
|
-
if (contextPushed) {
|
|
1710
|
-
this.joinConditionContexts.pop();
|
|
1711
|
-
}
|
|
1712
|
-
}
|
|
1713
|
-
}
|
|
1714
|
-
visitJoinClause(arg) {
|
|
1715
|
-
// Print join clause: [joinType] [lateral] [source] [on/using ...]
|
|
1716
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.JoinClause);
|
|
1717
|
-
// Handle JOIN keyword positioned comments (before JOIN)
|
|
1718
|
-
const joinKeywordPositionedComments = arg.joinKeywordPositionedComments;
|
|
1719
|
-
if (joinKeywordPositionedComments) {
|
|
1720
|
-
const beforeComments = joinKeywordPositionedComments.filter((pc) => pc.position === 'before');
|
|
1721
|
-
if (beforeComments.length > 0) {
|
|
1722
|
-
for (const posComment of beforeComments) {
|
|
1723
|
-
const commentTokens = this.createInlineCommentSequence(posComment.comments);
|
|
1724
|
-
token.innerTokens.push(...commentTokens);
|
|
1725
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1726
|
-
}
|
|
1727
|
-
}
|
|
1728
|
-
}
|
|
1729
|
-
// join type (e.g. inner join, left join, etc)
|
|
1730
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.joinType.value));
|
|
1731
|
-
// Handle JOIN keyword positioned comments (after JOIN)
|
|
1732
|
-
if (joinKeywordPositionedComments) {
|
|
1733
|
-
const afterComments = joinKeywordPositionedComments.filter((pc) => pc.position === 'after');
|
|
1734
|
-
if (afterComments.length > 0) {
|
|
1735
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1736
|
-
for (const posComment of afterComments) {
|
|
1737
|
-
const commentTokens = this.createInlineCommentSequence(posComment.comments);
|
|
1738
|
-
token.innerTokens.push(...commentTokens);
|
|
1739
|
-
}
|
|
1740
|
-
}
|
|
1741
|
-
}
|
|
1742
|
-
// Fallback: Add JOIN keyword legacy comments if present
|
|
1743
|
-
const joinKeywordComments = arg.joinKeywordComments;
|
|
1744
|
-
if (joinKeywordComments && joinKeywordComments.length > 0) {
|
|
1745
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1746
|
-
const commentTokens = this.createInlineCommentSequence(joinKeywordComments);
|
|
1747
|
-
token.innerTokens.push(...commentTokens);
|
|
1748
|
-
}
|
|
1749
|
-
if (arg.lateral) {
|
|
1750
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1751
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'lateral'));
|
|
1752
|
-
}
|
|
1753
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1754
|
-
token.innerTokens.push(this.visit(arg.source));
|
|
1755
|
-
if (arg.condition) {
|
|
1756
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1757
|
-
token.innerTokens.push(this.visit(arg.condition));
|
|
1758
|
-
}
|
|
1759
|
-
return token;
|
|
1760
|
-
}
|
|
1761
|
-
visitJoinOnClause(arg) {
|
|
1762
|
-
// Normalize JOIN ON predicate columns to follow declaration order when enabled.
|
|
1763
|
-
if (this.normalizeJoinConditionOrder) {
|
|
1764
|
-
const aliasOrder = this.getCurrentJoinAliasOrder();
|
|
1765
|
-
if (aliasOrder) {
|
|
1766
|
-
this.normalizeJoinConditionValue(arg.condition, aliasOrder);
|
|
1767
|
-
}
|
|
1768
|
-
}
|
|
1769
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.JoinOnClause);
|
|
1770
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'on'));
|
|
1771
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1772
|
-
token.innerTokens.push(this.visit(arg.condition));
|
|
1773
|
-
return token;
|
|
1774
|
-
}
|
|
1775
|
-
getCurrentJoinAliasOrder() {
|
|
1776
|
-
if (this.joinConditionContexts.length === 0) {
|
|
1777
|
-
return null;
|
|
1778
|
-
}
|
|
1779
|
-
return this.joinConditionContexts[this.joinConditionContexts.length - 1].aliasOrder;
|
|
1780
|
-
}
|
|
1781
|
-
buildJoinAliasOrder(fromClause) {
|
|
1782
|
-
const aliasOrder = new Map();
|
|
1783
|
-
let nextIndex = 0;
|
|
1784
|
-
const registerSource = (source) => {
|
|
1785
|
-
const identifiers = this.collectSourceIdentifiers(source);
|
|
1786
|
-
if (identifiers.length === 0) {
|
|
1787
|
-
return;
|
|
1788
|
-
}
|
|
1789
|
-
// Track the earliest declaration index for each identifier found in the FROM clause.
|
|
1790
|
-
for (const identifier of identifiers) {
|
|
1791
|
-
const key = identifier.toLowerCase();
|
|
1792
|
-
if (!aliasOrder.has(key)) {
|
|
1793
|
-
aliasOrder.set(key, nextIndex);
|
|
1794
|
-
}
|
|
1795
|
-
}
|
|
1796
|
-
nextIndex++;
|
|
1797
|
-
};
|
|
1798
|
-
registerSource(fromClause.source);
|
|
1799
|
-
if (fromClause.joins) {
|
|
1800
|
-
for (const joinClause of fromClause.joins) {
|
|
1801
|
-
registerSource(joinClause.source);
|
|
1802
|
-
}
|
|
1803
|
-
}
|
|
1804
|
-
return aliasOrder;
|
|
1805
|
-
}
|
|
1806
|
-
collectSourceIdentifiers(source) {
|
|
1807
|
-
const identifiers = [];
|
|
1808
|
-
const aliasName = source.getAliasName();
|
|
1809
|
-
if (aliasName) {
|
|
1810
|
-
identifiers.push(aliasName);
|
|
1811
|
-
}
|
|
1812
|
-
// Capture table identifiers so unaliased tables can still be matched.
|
|
1813
|
-
if (source.datasource instanceof TableSource) {
|
|
1814
|
-
const tableComponent = source.datasource.table.name;
|
|
1815
|
-
identifiers.push(tableComponent);
|
|
1816
|
-
const fullName = source.datasource.getSourceName();
|
|
1817
|
-
if (fullName && fullName !== tableComponent) {
|
|
1818
|
-
identifiers.push(fullName);
|
|
1819
|
-
}
|
|
1820
|
-
}
|
|
1821
|
-
return identifiers;
|
|
1822
|
-
}
|
|
1823
|
-
normalizeJoinConditionValue(condition, aliasOrder) {
|
|
1824
|
-
// Walk the value tree so every comparison within the JOIN predicate is inspected.
|
|
1825
|
-
const kind = condition.getKind();
|
|
1826
|
-
if (kind === ParenExpression.kind) {
|
|
1827
|
-
const paren = condition;
|
|
1828
|
-
this.normalizeJoinConditionValue(paren.expression, aliasOrder);
|
|
1829
|
-
return;
|
|
1830
|
-
}
|
|
1831
|
-
if (kind === BinaryExpression.kind) {
|
|
1832
|
-
const binary = condition;
|
|
1833
|
-
this.normalizeJoinConditionValue(binary.left, aliasOrder);
|
|
1834
|
-
this.normalizeJoinConditionValue(binary.right, aliasOrder);
|
|
1835
|
-
this.normalizeBinaryEquality(binary, aliasOrder);
|
|
1836
|
-
}
|
|
1837
|
-
}
|
|
1838
|
-
normalizeBinaryEquality(binary, aliasOrder) {
|
|
1839
|
-
// Only normalize simple equality comparisons, leaving other operators untouched.
|
|
1840
|
-
const operatorValue = binary.operator.value.toLowerCase();
|
|
1841
|
-
if (operatorValue !== '=') {
|
|
1842
|
-
return;
|
|
1843
|
-
}
|
|
1844
|
-
const leftOwner = this.resolveColumnOwner(binary.left);
|
|
1845
|
-
const rightOwner = this.resolveColumnOwner(binary.right);
|
|
1846
|
-
if (!leftOwner || !rightOwner || leftOwner === rightOwner) {
|
|
1847
|
-
return;
|
|
1848
|
-
}
|
|
1849
|
-
const leftOrder = aliasOrder.get(leftOwner);
|
|
1850
|
-
const rightOrder = aliasOrder.get(rightOwner);
|
|
1851
|
-
if (leftOrder === undefined || rightOrder === undefined) {
|
|
1852
|
-
return;
|
|
1853
|
-
}
|
|
1854
|
-
if (leftOrder > rightOrder) {
|
|
1855
|
-
// Swap operands so the earlier declared table appears on the left.
|
|
1856
|
-
const originalLeft = binary.left;
|
|
1857
|
-
binary.left = binary.right;
|
|
1858
|
-
binary.right = originalLeft;
|
|
1859
|
-
}
|
|
1860
|
-
}
|
|
1861
|
-
resolveColumnOwner(value) {
|
|
1862
|
-
var _a;
|
|
1863
|
-
const kind = value.getKind();
|
|
1864
|
-
if (kind === ColumnReference.kind) {
|
|
1865
|
-
// Column references expose their qualifier namespace, which we normalize for lookups.
|
|
1866
|
-
const columnRef = value;
|
|
1867
|
-
const namespace = columnRef.getNamespace();
|
|
1868
|
-
if (!namespace) {
|
|
1869
|
-
return null;
|
|
1870
|
-
}
|
|
1871
|
-
const qualifier = namespace.includes('.') ? (_a = namespace.split('.').pop()) !== null && _a !== void 0 ? _a : '' : namespace;
|
|
1872
|
-
return qualifier.toLowerCase();
|
|
1873
|
-
}
|
|
1874
|
-
if (kind === ParenExpression.kind) {
|
|
1875
|
-
return this.resolveColumnOwner(value.expression);
|
|
1876
|
-
}
|
|
1877
|
-
return null;
|
|
1878
|
-
}
|
|
1879
|
-
visitJoinUsingClause(arg) {
|
|
1880
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.JoinUsingClause);
|
|
1881
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'using'));
|
|
1882
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1883
|
-
token.innerTokens.push(this.visit(arg.condition));
|
|
1884
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1885
|
-
return token;
|
|
1886
|
-
}
|
|
1887
|
-
visitFunctionSource(arg) {
|
|
1888
|
-
// Print function source: [functionName]([args])
|
|
1889
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.FunctionSource);
|
|
1890
|
-
token.innerTokens.push(arg.qualifiedName.accept(this));
|
|
1891
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1892
|
-
if (arg.argument) {
|
|
1893
|
-
token.innerTokens.push(this.visit(arg.argument));
|
|
1894
|
-
}
|
|
1895
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1896
|
-
return token;
|
|
1897
|
-
}
|
|
1898
|
-
visitSourceAliasExpression(arg) {
|
|
1899
|
-
// Print source alias expression: [source] as [alias]
|
|
1900
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SourceAliasExpression);
|
|
1901
|
-
token.innerTokens.push(this.visit(arg.table));
|
|
1902
|
-
if (arg.columns) {
|
|
1903
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1904
|
-
for (let i = 0; i < arg.columns.length; i++) {
|
|
1905
|
-
if (i > 0) {
|
|
1906
|
-
token.innerTokens.push(...SqlPrintTokenParser.argumentCommaSpaceTokens());
|
|
1907
|
-
}
|
|
1908
|
-
token.innerTokens.push(this.visit(arg.columns[i]));
|
|
1909
|
-
}
|
|
1910
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1911
|
-
}
|
|
1912
|
-
// Handle positioned comments for SourceAliasExpression (alias name comments)
|
|
1913
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
1914
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
1915
|
-
// Clear positioned comments to prevent duplicate processing
|
|
1916
|
-
arg.positionedComments = null;
|
|
1917
|
-
}
|
|
1918
|
-
else if (arg.comments && arg.comments.length > 0) {
|
|
1919
|
-
this.addCommentsToToken(token, arg.comments);
|
|
1920
|
-
}
|
|
1921
|
-
return token;
|
|
1922
|
-
}
|
|
1923
|
-
visitWhereClause(arg) {
|
|
1924
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'where', SqlPrintTokenContainerType.WhereClause);
|
|
1925
|
-
this.addComponentComments(token, arg);
|
|
1926
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1927
|
-
token.innerTokens.push(this.visit(arg.condition));
|
|
1928
|
-
return token;
|
|
1929
|
-
}
|
|
1930
|
-
visitGroupByClause(arg) {
|
|
1931
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'group by', SqlPrintTokenContainerType.GroupByClause);
|
|
1932
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1933
|
-
for (let i = 0; i < arg.grouping.length; i++) {
|
|
1934
|
-
if (i > 0) {
|
|
1935
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
1936
|
-
}
|
|
1937
|
-
token.innerTokens.push(this.visit(arg.grouping[i]));
|
|
1938
|
-
}
|
|
1939
|
-
return token;
|
|
1940
|
-
}
|
|
1941
|
-
visitHavingClause(arg) {
|
|
1942
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'having', SqlPrintTokenContainerType.HavingClause);
|
|
1943
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1944
|
-
token.innerTokens.push(this.visit(arg.condition));
|
|
1945
|
-
return token;
|
|
1946
|
-
}
|
|
1947
|
-
visitWindowClause(arg) {
|
|
1948
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'window', SqlPrintTokenContainerType.WindowClause);
|
|
1949
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1950
|
-
for (let i = 0; i < arg.windows.length; i++) {
|
|
1951
|
-
if (i > 0) {
|
|
1952
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
1953
|
-
}
|
|
1954
|
-
token.innerTokens.push(this.visit(arg.windows[i]));
|
|
1955
|
-
}
|
|
1956
|
-
return token;
|
|
1957
|
-
}
|
|
1958
|
-
visitWindowFrameClause(arg) {
|
|
1959
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.WindowFrameClause);
|
|
1960
|
-
token.innerTokens.push(arg.name.accept(this));
|
|
1961
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1962
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
|
|
1963
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1964
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
1965
|
-
token.innerTokens.push(this.visit(arg.expression));
|
|
1966
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
1967
|
-
return token;
|
|
1968
|
-
}
|
|
1969
|
-
visitLimitClause(arg) {
|
|
1970
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'limit', SqlPrintTokenContainerType.LimitClause);
|
|
1971
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1972
|
-
token.innerTokens.push(this.visit(arg.value));
|
|
1973
|
-
return token;
|
|
1974
|
-
}
|
|
1975
|
-
visitOffsetClause(arg) {
|
|
1976
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'offset', SqlPrintTokenContainerType.OffsetClause);
|
|
1977
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1978
|
-
token.innerTokens.push(this.visit(arg.value));
|
|
1979
|
-
return token;
|
|
1980
|
-
}
|
|
1981
|
-
visitFetchClause(arg) {
|
|
1982
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'fetch', SqlPrintTokenContainerType.FetchClause);
|
|
1983
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1984
|
-
token.innerTokens.push(this.visit(arg.expression));
|
|
1985
|
-
return token;
|
|
1986
|
-
}
|
|
1987
|
-
visitFetchExpression(arg) {
|
|
1988
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.FetchExpression);
|
|
1989
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.type));
|
|
1990
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1991
|
-
token.innerTokens.push(arg.count.accept(this));
|
|
1992
|
-
if (arg.unit) {
|
|
1993
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
1994
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.unit));
|
|
1995
|
-
}
|
|
1996
|
-
return token;
|
|
1997
|
-
}
|
|
1998
|
-
visitForClause(arg) {
|
|
1999
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'for', SqlPrintTokenContainerType.ForClause);
|
|
2000
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2001
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.lockMode));
|
|
2002
|
-
return token;
|
|
2003
|
-
}
|
|
2004
|
-
visitWithClause(arg) {
|
|
2005
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'with', SqlPrintTokenContainerType.WithClause);
|
|
2006
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2007
|
-
if (arg.recursive) {
|
|
2008
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'recursive'));
|
|
2009
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2010
|
-
}
|
|
2011
|
-
for (let i = 0; i < arg.tables.length; i++) {
|
|
2012
|
-
if (i > 0) {
|
|
2013
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2014
|
-
}
|
|
2015
|
-
token.innerTokens.push(arg.tables[i].accept(this));
|
|
2016
|
-
}
|
|
2017
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2018
|
-
this.addComponentComments(token, arg);
|
|
2019
|
-
return token;
|
|
2020
|
-
}
|
|
2021
|
-
visitCommonTable(arg) {
|
|
2022
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CommonTable);
|
|
2023
|
-
// Handle positioned comments for CommonTable (avoid duplication)
|
|
2024
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
2025
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
2026
|
-
// Clear positioned comments to prevent duplicate processing
|
|
2027
|
-
arg.positionedComments = null;
|
|
2028
|
-
}
|
|
2029
|
-
else if (arg.comments && arg.comments.length > 0) {
|
|
2030
|
-
this.addCommentsToToken(token, arg.comments);
|
|
2031
|
-
}
|
|
2032
|
-
token.innerTokens.push(arg.aliasExpression.accept(this));
|
|
2033
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2034
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
|
|
2035
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2036
|
-
if (arg.materialized !== null) {
|
|
2037
|
-
if (arg.materialized) {
|
|
2038
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'materialized'));
|
|
2039
|
-
}
|
|
2040
|
-
else {
|
|
2041
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'not materialized'));
|
|
2042
|
-
}
|
|
2043
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2044
|
-
}
|
|
2045
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2046
|
-
const query = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SubQuerySource);
|
|
2047
|
-
query.innerTokens.push(arg.query.accept(this));
|
|
2048
|
-
token.innerTokens.push(query);
|
|
2049
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2050
|
-
return token;
|
|
2051
|
-
}
|
|
2052
|
-
// query
|
|
2053
|
-
visitSimpleQuery(arg) {
|
|
2054
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SimpleSelectQuery);
|
|
2055
|
-
// Handle positioned comments for SimpleSelectQuery (unified spec)
|
|
2056
|
-
if (arg.headerComments && arg.headerComments.length > 0) {
|
|
2057
|
-
if (this.shouldMergeHeaderComments(arg.headerComments)) {
|
|
2058
|
-
const mergedHeaderComment = this.createHeaderMultiLineCommentBlock(arg.headerComments);
|
|
2059
|
-
token.innerTokens.push(mergedHeaderComment);
|
|
2060
|
-
}
|
|
2061
|
-
else {
|
|
2062
|
-
const headerCommentBlocks = this.createCommentBlocks(arg.headerComments, true);
|
|
2063
|
-
token.innerTokens.push(...headerCommentBlocks);
|
|
2064
|
-
}
|
|
2065
|
-
if (arg.withClause) {
|
|
2066
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2067
|
-
}
|
|
2068
|
-
}
|
|
2069
|
-
if (arg.positionedComments && arg.positionedComments.length > 0) {
|
|
2070
|
-
this.addPositionedCommentsToToken(token, arg);
|
|
2071
|
-
// Clear positioned comments to prevent duplicate processing
|
|
2072
|
-
arg.positionedComments = null;
|
|
2073
|
-
}
|
|
2074
|
-
if (arg.withClause) {
|
|
2075
|
-
token.innerTokens.push(arg.withClause.accept(this));
|
|
2076
|
-
}
|
|
2077
|
-
// Add regular comments between WITH clause and SELECT clause if they exist
|
|
2078
|
-
if (arg.comments && arg.comments.length > 0) {
|
|
2079
|
-
const commentBlocks = this.createCommentBlocks(arg.comments);
|
|
2080
|
-
token.innerTokens.push(...commentBlocks);
|
|
2081
|
-
// Add a space separator after comments if there are more tokens coming
|
|
2082
|
-
if (arg.selectClause) {
|
|
2083
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2084
|
-
}
|
|
2085
|
-
}
|
|
2086
|
-
token.innerTokens.push(arg.selectClause.accept(this));
|
|
2087
|
-
if (!arg.fromClause) {
|
|
2088
|
-
return token;
|
|
2089
|
-
}
|
|
2090
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2091
|
-
token.innerTokens.push(arg.fromClause.accept(this));
|
|
2092
|
-
if (arg.whereClause) {
|
|
2093
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2094
|
-
token.innerTokens.push(arg.whereClause.accept(this));
|
|
2095
|
-
}
|
|
2096
|
-
if (arg.groupByClause) {
|
|
2097
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2098
|
-
token.innerTokens.push(arg.groupByClause.accept(this));
|
|
2099
|
-
}
|
|
2100
|
-
if (arg.havingClause) {
|
|
2101
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2102
|
-
token.innerTokens.push(arg.havingClause.accept(this));
|
|
2103
|
-
}
|
|
2104
|
-
if (arg.orderByClause) {
|
|
2105
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2106
|
-
token.innerTokens.push(arg.orderByClause.accept(this));
|
|
2107
|
-
}
|
|
2108
|
-
if (arg.windowClause) {
|
|
2109
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2110
|
-
token.innerTokens.push(arg.windowClause.accept(this));
|
|
2111
|
-
}
|
|
2112
|
-
if (arg.limitClause) {
|
|
2113
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2114
|
-
token.innerTokens.push(arg.limitClause.accept(this));
|
|
2115
|
-
}
|
|
2116
|
-
if (arg.offsetClause) {
|
|
2117
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2118
|
-
token.innerTokens.push(arg.offsetClause.accept(this));
|
|
2119
|
-
}
|
|
2120
|
-
if (arg.fetchClause) {
|
|
2121
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2122
|
-
token.innerTokens.push(arg.fetchClause.accept(this));
|
|
2123
|
-
}
|
|
2124
|
-
if (arg.forClause) {
|
|
2125
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2126
|
-
token.innerTokens.push(arg.forClause.accept(this));
|
|
2127
|
-
}
|
|
2128
|
-
return token;
|
|
2129
|
-
}
|
|
2130
|
-
visitSubQuerySource(arg) {
|
|
2131
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '');
|
|
2132
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2133
|
-
const subQuery = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SubQuerySource);
|
|
2134
|
-
subQuery.innerTokens.push(arg.query.accept(this));
|
|
2135
|
-
token.innerTokens.push(subQuery);
|
|
2136
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2137
|
-
return token;
|
|
2138
|
-
}
|
|
2139
|
-
visitValuesQuery(arg) {
|
|
2140
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'values', SqlPrintTokenContainerType.ValuesQuery);
|
|
2141
|
-
// Add headerComments before VALUES keyword
|
|
2142
|
-
if (arg.headerComments && arg.headerComments.length > 0) {
|
|
2143
|
-
if (this.shouldMergeHeaderComments(arg.headerComments)) {
|
|
2144
|
-
const mergedHeaderComment = this.createHeaderMultiLineCommentBlock(arg.headerComments);
|
|
2145
|
-
token.innerTokens.push(mergedHeaderComment);
|
|
2146
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2147
|
-
}
|
|
2148
|
-
else {
|
|
2149
|
-
const headerCommentBlocks = this.createCommentBlocks(arg.headerComments, true);
|
|
2150
|
-
for (const commentBlock of headerCommentBlocks) {
|
|
2151
|
-
token.innerTokens.push(commentBlock);
|
|
2152
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2153
|
-
}
|
|
2154
|
-
}
|
|
2155
|
-
}
|
|
2156
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2157
|
-
const values = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.Values);
|
|
2158
|
-
for (let i = 0; i < arg.tuples.length; i++) {
|
|
2159
|
-
if (i > 0) {
|
|
2160
|
-
values.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2161
|
-
}
|
|
2162
|
-
values.innerTokens.push(arg.tuples[i].accept(this));
|
|
2163
|
-
}
|
|
2164
|
-
token.innerTokens.push(values);
|
|
2165
|
-
// Add regular comments to the token
|
|
2166
|
-
this.addCommentsToToken(token, arg.comments);
|
|
2167
|
-
return token;
|
|
2168
|
-
}
|
|
2169
|
-
visitInlineQuery(arg) {
|
|
2170
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '');
|
|
2171
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2172
|
-
const queryToken = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.InlineQuery);
|
|
2173
|
-
queryToken.innerTokens.push(arg.selectQuery.accept(this));
|
|
2174
|
-
token.innerTokens.push(queryToken);
|
|
2175
|
-
// Add comments from the InlineQuery to the closing parenthesis
|
|
2176
|
-
if (arg.comments && arg.comments.length > 0) {
|
|
2177
|
-
const closingParenToken = new SqlPrintToken(SqlPrintTokenType.parenthesis, ')');
|
|
2178
|
-
this.addCommentsToToken(closingParenToken, arg.comments);
|
|
2179
|
-
token.innerTokens.push(closingParenToken);
|
|
2180
|
-
// Clear the comments from arg to prevent duplicate output by the general comment handler
|
|
2181
|
-
arg.comments = null;
|
|
2182
|
-
}
|
|
2183
|
-
else {
|
|
2184
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2185
|
-
}
|
|
2186
|
-
return token;
|
|
2187
|
-
}
|
|
2188
|
-
visitInsertQuery(arg) {
|
|
2189
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.InsertQuery);
|
|
2190
|
-
if (arg.withClause) {
|
|
2191
|
-
token.innerTokens.push(arg.withClause.accept(this));
|
|
2192
|
-
}
|
|
2193
|
-
token.innerTokens.push(this.visit(arg.insertClause));
|
|
2194
|
-
// Process the select query if present
|
|
2195
|
-
if (arg.selectQuery) {
|
|
2196
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2197
|
-
token.innerTokens.push(this.visit(arg.selectQuery));
|
|
2198
|
-
}
|
|
2199
|
-
if (arg.returningClause) {
|
|
2200
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2201
|
-
token.innerTokens.push(arg.returningClause.accept(this));
|
|
2202
|
-
}
|
|
2203
|
-
return token;
|
|
2204
|
-
}
|
|
2205
|
-
visitInsertClause(arg) {
|
|
2206
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.InsertClause);
|
|
2207
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'insert into'));
|
|
2208
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2209
|
-
token.innerTokens.push(arg.source.accept(this));
|
|
2210
|
-
if (arg.columns && arg.columns.length > 0) {
|
|
2211
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2212
|
-
for (let i = 0; i < arg.columns.length; i++) {
|
|
2213
|
-
if (i > 0) {
|
|
2214
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2215
|
-
}
|
|
2216
|
-
token.innerTokens.push(arg.columns[i].accept(this));
|
|
2217
|
-
}
|
|
2218
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2219
|
-
}
|
|
2220
|
-
return token;
|
|
2221
|
-
}
|
|
2222
|
-
visitDeleteQuery(arg) {
|
|
2223
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.DeleteQuery);
|
|
2224
|
-
// Attach WITH clause tokens when present before the DELETE command.
|
|
2225
|
-
if (arg.withClause) {
|
|
2226
|
-
token.innerTokens.push(arg.withClause.accept(this));
|
|
2227
|
-
}
|
|
2228
|
-
token.innerTokens.push(arg.deleteClause.accept(this));
|
|
2229
|
-
// Append USING clause when the DELETE references additional sources.
|
|
2230
|
-
if (arg.usingClause) {
|
|
2231
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2232
|
-
token.innerTokens.push(arg.usingClause.accept(this));
|
|
2233
|
-
}
|
|
2234
|
-
// Append WHERE clause to restrict affected rows.
|
|
2235
|
-
if (arg.whereClause) {
|
|
2236
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2237
|
-
token.innerTokens.push(arg.whereClause.accept(this));
|
|
2238
|
-
}
|
|
2239
|
-
// Append RETURNING clause when the DELETE yields output columns.
|
|
2240
|
-
if (arg.returningClause) {
|
|
2241
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2242
|
-
token.innerTokens.push(arg.returningClause.accept(this));
|
|
2243
|
-
}
|
|
2244
|
-
return token;
|
|
2245
|
-
}
|
|
2246
|
-
visitDeleteClause(arg) {
|
|
2247
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'delete from', SqlPrintTokenContainerType.DeleteClause);
|
|
2248
|
-
// Render the target relation immediately after the DELETE FROM keyword.
|
|
2249
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2250
|
-
token.innerTokens.push(arg.source.accept(this));
|
|
2251
|
-
return token;
|
|
2252
|
-
}
|
|
2253
|
-
visitUsingClause(arg) {
|
|
2254
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'using', SqlPrintTokenContainerType.UsingClause);
|
|
2255
|
-
if (arg.sources.length > 0) {
|
|
2256
|
-
// Attach the first USING source directly after the keyword.
|
|
2257
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2258
|
-
for (let i = 0; i < arg.sources.length; i++) {
|
|
2259
|
-
if (i > 0) {
|
|
2260
|
-
// Separate subsequent sources with comma and space for clarity.
|
|
2261
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2262
|
-
}
|
|
2263
|
-
token.innerTokens.push(this.visit(arg.sources[i]));
|
|
2264
|
-
}
|
|
2265
|
-
}
|
|
2266
|
-
return token;
|
|
2267
|
-
}
|
|
2268
|
-
visitMergeQuery(arg) {
|
|
2269
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.MergeQuery);
|
|
2270
|
-
if (arg.withClause) {
|
|
2271
|
-
token.innerTokens.push(arg.withClause.accept(this));
|
|
2272
|
-
}
|
|
2273
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'merge into'));
|
|
2274
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2275
|
-
token.innerTokens.push(arg.target.accept(this));
|
|
2276
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2277
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'using'));
|
|
2278
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2279
|
-
token.innerTokens.push(arg.source.accept(this));
|
|
2280
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2281
|
-
const onClauseToken = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.JoinOnClause);
|
|
2282
|
-
onClauseToken.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'on'));
|
|
2283
|
-
onClauseToken.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2284
|
-
onClauseToken.innerTokens.push(arg.onCondition.accept(this));
|
|
2285
|
-
token.innerTokens.push(onClauseToken);
|
|
2286
|
-
for (const clause of arg.whenClauses) {
|
|
2287
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2288
|
-
token.innerTokens.push(clause.accept(this));
|
|
2289
|
-
}
|
|
2290
|
-
return token;
|
|
2291
|
-
}
|
|
2292
|
-
visitMergeWhenClause(arg) {
|
|
2293
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.MergeWhenClause);
|
|
2294
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, this.mergeMatchTypeToKeyword(arg.matchType)));
|
|
2295
|
-
if (arg.condition) {
|
|
2296
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2297
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'and'));
|
|
2298
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2299
|
-
token.innerTokens.push(arg.condition.accept(this));
|
|
2300
|
-
}
|
|
2301
|
-
const thenLeadingComments = arg.getThenLeadingComments();
|
|
2302
|
-
const thenKeywordToken = new SqlPrintToken(SqlPrintTokenType.keyword, 'then');
|
|
2303
|
-
if (thenLeadingComments.length > 0) {
|
|
2304
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2305
|
-
const commentBlocks = this.createCommentBlocks(thenLeadingComments);
|
|
2306
|
-
token.innerTokens.push(...commentBlocks);
|
|
2307
|
-
token.innerTokens.push(thenKeywordToken);
|
|
2308
|
-
}
|
|
2309
|
-
else {
|
|
2310
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2311
|
-
token.innerTokens.push(thenKeywordToken);
|
|
2312
|
-
}
|
|
2313
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2314
|
-
token.innerTokens.push(arg.action.accept(this));
|
|
2315
|
-
return token;
|
|
2316
|
-
}
|
|
2317
|
-
visitMergeUpdateAction(arg) {
|
|
2318
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.MergeUpdateAction);
|
|
2319
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'update'));
|
|
2320
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2321
|
-
token.innerTokens.push(arg.setClause.accept(this));
|
|
2322
|
-
if (arg.whereClause) {
|
|
2323
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2324
|
-
token.innerTokens.push(arg.whereClause.accept(this));
|
|
2325
|
-
}
|
|
2326
|
-
return token;
|
|
2327
|
-
}
|
|
2328
|
-
visitMergeDeleteAction(arg) {
|
|
2329
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.MergeDeleteAction);
|
|
2330
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'delete'));
|
|
2331
|
-
if (arg.whereClause) {
|
|
2332
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2333
|
-
token.innerTokens.push(arg.whereClause.accept(this));
|
|
2334
|
-
}
|
|
2335
|
-
return token;
|
|
2336
|
-
}
|
|
2337
|
-
visitMergeInsertAction(arg) {
|
|
2338
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.MergeInsertAction);
|
|
2339
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'insert'));
|
|
2340
|
-
if (arg.columns && arg.columns.length > 0) {
|
|
2341
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2342
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2343
|
-
for (let i = 0; i < arg.columns.length; i++) {
|
|
2344
|
-
if (i > 0) {
|
|
2345
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2346
|
-
}
|
|
2347
|
-
token.innerTokens.push(arg.columns[i].accept(this));
|
|
2348
|
-
}
|
|
2349
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2350
|
-
}
|
|
2351
|
-
if (arg.defaultValues) {
|
|
2352
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2353
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'default values'));
|
|
2354
|
-
return token;
|
|
2355
|
-
}
|
|
2356
|
-
if (arg.values) {
|
|
2357
|
-
const leadingValuesComments = arg.getValuesLeadingComments();
|
|
2358
|
-
if (leadingValuesComments.length > 0) {
|
|
2359
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.commentNewline, ''));
|
|
2360
|
-
const commentBlocks = this.createCommentBlocks(leadingValuesComments);
|
|
2361
|
-
token.innerTokens.push(...commentBlocks);
|
|
2362
|
-
}
|
|
2363
|
-
else {
|
|
2364
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2365
|
-
}
|
|
2366
|
-
const valuesKeywordToken = new SqlPrintToken(SqlPrintTokenType.keyword, 'values');
|
|
2367
|
-
token.innerTokens.push(valuesKeywordToken);
|
|
2368
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2369
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2370
|
-
token.innerTokens.push(arg.values.accept(this));
|
|
2371
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2372
|
-
}
|
|
2373
|
-
return token;
|
|
2374
|
-
}
|
|
2375
|
-
visitMergeDoNothingAction(_) {
|
|
2376
|
-
return new SqlPrintToken(SqlPrintTokenType.keyword, 'do nothing', SqlPrintTokenContainerType.MergeDoNothingAction);
|
|
2377
|
-
}
|
|
2378
|
-
mergeMatchTypeToKeyword(matchType) {
|
|
2379
|
-
switch (matchType) {
|
|
2380
|
-
case 'matched':
|
|
2381
|
-
return 'when matched';
|
|
2382
|
-
case 'not_matched':
|
|
2383
|
-
return 'when not matched';
|
|
2384
|
-
case 'not_matched_by_source':
|
|
2385
|
-
return 'when not matched by source';
|
|
2386
|
-
case 'not_matched_by_target':
|
|
2387
|
-
return 'when not matched by target';
|
|
2388
|
-
default:
|
|
2389
|
-
return 'when';
|
|
2390
|
-
}
|
|
2391
|
-
}
|
|
2392
|
-
visitUpdateQuery(arg) {
|
|
2393
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.UpdateQuery);
|
|
2394
|
-
if (arg.withClause) {
|
|
2395
|
-
token.innerTokens.push(arg.withClause.accept(this));
|
|
2396
|
-
}
|
|
2397
|
-
token.innerTokens.push(arg.updateClause.accept(this));
|
|
2398
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2399
|
-
token.innerTokens.push(arg.setClause.accept(this));
|
|
2400
|
-
if (arg.fromClause) {
|
|
2401
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2402
|
-
token.innerTokens.push(arg.fromClause.accept(this));
|
|
2403
|
-
}
|
|
2404
|
-
if (arg.whereClause) {
|
|
2405
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2406
|
-
token.innerTokens.push(arg.whereClause.accept(this));
|
|
2407
|
-
}
|
|
2408
|
-
if (arg.returningClause) {
|
|
2409
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2410
|
-
token.innerTokens.push(arg.returningClause.accept(this));
|
|
2411
|
-
}
|
|
2412
|
-
return token;
|
|
2413
|
-
}
|
|
2414
|
-
visitUpdateClause(arg) {
|
|
2415
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'update', SqlPrintTokenContainerType.UpdateClause);
|
|
2416
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2417
|
-
token.innerTokens.push(arg.source.accept(this));
|
|
2418
|
-
return token;
|
|
2419
|
-
}
|
|
2420
|
-
visitSetClause(arg) {
|
|
2421
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'set', SqlPrintTokenContainerType.SetClause);
|
|
2422
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2423
|
-
for (let i = 0; i < arg.items.length; i++) {
|
|
2424
|
-
if (i > 0) {
|
|
2425
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2426
|
-
}
|
|
2427
|
-
token.innerTokens.push(this.visit(arg.items[i]));
|
|
2428
|
-
}
|
|
2429
|
-
return token;
|
|
2430
|
-
}
|
|
2431
|
-
visitSetClauseItem(arg) {
|
|
2432
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SetClauseItem);
|
|
2433
|
-
token.innerTokens.push(arg.column.accept(this));
|
|
2434
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2435
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.operator, '='));
|
|
2436
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2437
|
-
token.innerTokens.push(arg.value.accept(this));
|
|
2438
|
-
return token;
|
|
2439
|
-
}
|
|
2440
|
-
visitReturningClause(arg) {
|
|
2441
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'returning', SqlPrintTokenContainerType.ReturningClause);
|
|
2442
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2443
|
-
for (let i = 0; i < arg.columns.length; i++) {
|
|
2444
|
-
if (i > 0) {
|
|
2445
|
-
token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2446
|
-
}
|
|
2447
|
-
token.innerTokens.push(this.visit(arg.columns[i]));
|
|
2448
|
-
}
|
|
2449
|
-
return token;
|
|
2450
|
-
}
|
|
2451
|
-
visitCreateTableQuery(arg) {
|
|
2452
|
-
var _a;
|
|
2453
|
-
const baseKeyword = arg.isTemporary ? 'create temporary table' : 'create table';
|
|
2454
|
-
let keywordText = arg.ifNotExists ? `${baseKeyword} if not exists` : baseKeyword;
|
|
2455
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, keywordText, SqlPrintTokenContainerType.CreateTableQuery);
|
|
2456
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2457
|
-
const qualifiedName = new QualifiedName((_a = arg.namespaces) !== null && _a !== void 0 ? _a : null, arg.tableName);
|
|
2458
|
-
token.innerTokens.push(qualifiedName.accept(this));
|
|
2459
|
-
const definitionEntries = [...arg.columns, ...arg.tableConstraints];
|
|
2460
|
-
if (definitionEntries.length > 0) {
|
|
2461
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2462
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2463
|
-
const definitionToken = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CreateTableDefinition);
|
|
2464
|
-
for (let i = 0; i < definitionEntries.length; i++) {
|
|
2465
|
-
if (i > 0) {
|
|
2466
|
-
definitionToken.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2467
|
-
}
|
|
2468
|
-
definitionToken.innerTokens.push(definitionEntries[i].accept(this));
|
|
2469
|
-
}
|
|
2470
|
-
token.innerTokens.push(definitionToken);
|
|
2471
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2472
|
-
}
|
|
2473
|
-
if (arg.tableOptions) {
|
|
2474
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2475
|
-
token.innerTokens.push(arg.tableOptions.accept(this));
|
|
2476
|
-
}
|
|
2477
|
-
if (arg.asSelectQuery) {
|
|
2478
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2479
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
|
|
2480
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2481
|
-
token.innerTokens.push(arg.asSelectQuery.accept(this));
|
|
2482
|
-
}
|
|
2483
|
-
if (arg.withDataOption) {
|
|
2484
|
-
// Reconstruct WITH [NO] DATA clause to mirror PostgreSQL CREATE TABLE semantics.
|
|
2485
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2486
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'with'));
|
|
2487
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2488
|
-
if (arg.withDataOption === 'with-no-data') {
|
|
2489
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'no'));
|
|
2490
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2491
|
-
}
|
|
2492
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'data'));
|
|
2493
|
-
}
|
|
2494
|
-
return token;
|
|
2495
|
-
}
|
|
2496
|
-
visitTableColumnDefinition(arg) {
|
|
2497
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.TableColumnDefinition);
|
|
2498
|
-
token.innerTokens.push(arg.name.accept(this));
|
|
2499
|
-
if (arg.dataType) {
|
|
2500
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2501
|
-
token.innerTokens.push(arg.dataType.accept(this));
|
|
2502
|
-
}
|
|
2503
|
-
for (const constraint of arg.constraints) {
|
|
2504
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2505
|
-
token.innerTokens.push(constraint.accept(this));
|
|
2506
|
-
}
|
|
2507
|
-
return token;
|
|
2508
|
-
}
|
|
2509
|
-
visitColumnConstraintDefinition(arg) {
|
|
2510
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ColumnConstraintDefinition);
|
|
2511
|
-
if (arg.constraintName) {
|
|
2512
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'constraint'));
|
|
2513
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2514
|
-
token.innerTokens.push(arg.constraintName.accept(this));
|
|
2515
|
-
}
|
|
2516
|
-
const appendKeyword = (text) => {
|
|
2517
|
-
if (token.innerTokens.length > 0) {
|
|
2518
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2519
|
-
}
|
|
2520
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, text));
|
|
2521
|
-
};
|
|
2522
|
-
const appendComponent = (component) => {
|
|
2523
|
-
if (token.innerTokens.length > 0) {
|
|
2524
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2525
|
-
}
|
|
2526
|
-
token.innerTokens.push(component.accept(this));
|
|
2527
|
-
};
|
|
2528
|
-
switch (arg.kind) {
|
|
2529
|
-
case 'not-null':
|
|
2530
|
-
appendKeyword('not null');
|
|
2531
|
-
break;
|
|
2532
|
-
case 'null':
|
|
2533
|
-
appendKeyword('null');
|
|
2534
|
-
break;
|
|
2535
|
-
case 'default':
|
|
2536
|
-
appendKeyword('default');
|
|
2537
|
-
if (arg.defaultValue) {
|
|
2538
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2539
|
-
token.innerTokens.push(arg.defaultValue.accept(this));
|
|
2540
|
-
}
|
|
2541
|
-
break;
|
|
2542
|
-
case 'primary-key':
|
|
2543
|
-
appendKeyword('primary key');
|
|
2544
|
-
break;
|
|
2545
|
-
case 'unique':
|
|
2546
|
-
appendKeyword('unique');
|
|
2547
|
-
break;
|
|
2548
|
-
case 'references':
|
|
2549
|
-
if (arg.reference) {
|
|
2550
|
-
appendComponent(arg.reference);
|
|
2551
|
-
}
|
|
2552
|
-
break;
|
|
2553
|
-
case 'check':
|
|
2554
|
-
if (arg.checkExpression) {
|
|
2555
|
-
appendKeyword('check');
|
|
2556
|
-
token.innerTokens.push(this.wrapWithParenExpression(arg.checkExpression));
|
|
2557
|
-
}
|
|
2558
|
-
break;
|
|
2559
|
-
case 'generated-always-identity':
|
|
2560
|
-
case 'generated-by-default-identity':
|
|
2561
|
-
case 'raw':
|
|
2562
|
-
if (arg.rawClause) {
|
|
2563
|
-
appendComponent(arg.rawClause);
|
|
2564
|
-
}
|
|
2565
|
-
break;
|
|
2566
|
-
}
|
|
2567
|
-
return token;
|
|
2568
|
-
}
|
|
2569
|
-
visitTableConstraintDefinition(arg) {
|
|
2570
|
-
var _a, _b, _c;
|
|
2571
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.TableConstraintDefinition);
|
|
2572
|
-
const appendKeyword = (text) => {
|
|
2573
|
-
if (token.innerTokens.length > 0) {
|
|
2574
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2575
|
-
}
|
|
2576
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, text));
|
|
2577
|
-
};
|
|
2578
|
-
const appendComponent = (component) => {
|
|
2579
|
-
if (token.innerTokens.length > 0) {
|
|
2580
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2581
|
-
}
|
|
2582
|
-
token.innerTokens.push(component.accept(this));
|
|
2583
|
-
};
|
|
2584
|
-
const appendColumns = (columns) => {
|
|
2585
|
-
if (!columns || columns.length === 0) {
|
|
2586
|
-
return;
|
|
2587
|
-
}
|
|
2588
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2589
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2590
|
-
const listToken = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ValueList);
|
|
2591
|
-
for (let i = 0; i < columns.length; i++) {
|
|
2592
|
-
if (i > 0) {
|
|
2593
|
-
listToken.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2594
|
-
}
|
|
2595
|
-
listToken.innerTokens.push(columns[i].accept(this));
|
|
2596
|
-
}
|
|
2597
|
-
token.innerTokens.push(listToken);
|
|
2598
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2599
|
-
};
|
|
2600
|
-
const useMysqlConstraintStyle = this.constraintStyle === 'mysql';
|
|
2601
|
-
const inlineNameKinds = new Set(['primary-key', 'unique', 'foreign-key']);
|
|
2602
|
-
const shouldInlineConstraintName = useMysqlConstraintStyle && !!arg.constraintName && inlineNameKinds.has(arg.kind);
|
|
2603
|
-
if (arg.constraintName && !shouldInlineConstraintName) {
|
|
2604
|
-
appendKeyword('constraint');
|
|
2605
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2606
|
-
token.innerTokens.push(arg.constraintName.accept(this));
|
|
2607
|
-
}
|
|
2608
|
-
switch (arg.kind) {
|
|
2609
|
-
case 'primary-key':
|
|
2610
|
-
appendKeyword('primary key');
|
|
2611
|
-
if (shouldInlineConstraintName && arg.constraintName) {
|
|
2612
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2613
|
-
token.innerTokens.push(arg.constraintName.accept(this));
|
|
2614
|
-
}
|
|
2615
|
-
appendColumns((_a = arg.columns) !== null && _a !== void 0 ? _a : []);
|
|
2616
|
-
break;
|
|
2617
|
-
case 'unique':
|
|
2618
|
-
if (useMysqlConstraintStyle) {
|
|
2619
|
-
appendKeyword('unique key');
|
|
2620
|
-
if (shouldInlineConstraintName && arg.constraintName) {
|
|
2621
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2622
|
-
token.innerTokens.push(arg.constraintName.accept(this));
|
|
2623
|
-
}
|
|
2624
|
-
}
|
|
2625
|
-
else {
|
|
2626
|
-
appendKeyword('unique');
|
|
2627
|
-
}
|
|
2628
|
-
appendColumns((_b = arg.columns) !== null && _b !== void 0 ? _b : []);
|
|
2629
|
-
break;
|
|
2630
|
-
case 'foreign-key':
|
|
2631
|
-
appendKeyword('foreign key');
|
|
2632
|
-
if (shouldInlineConstraintName && arg.constraintName) {
|
|
2633
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2634
|
-
token.innerTokens.push(arg.constraintName.accept(this));
|
|
2635
|
-
}
|
|
2636
|
-
appendColumns((_c = arg.columns) !== null && _c !== void 0 ? _c : []);
|
|
2637
|
-
if (arg.reference) {
|
|
2638
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2639
|
-
token.innerTokens.push(arg.reference.accept(this));
|
|
2640
|
-
}
|
|
2641
|
-
break;
|
|
2642
|
-
case 'check':
|
|
2643
|
-
if (arg.checkExpression) {
|
|
2644
|
-
appendKeyword('check');
|
|
2645
|
-
token.innerTokens.push(this.wrapWithParenExpression(arg.checkExpression));
|
|
2646
|
-
}
|
|
2647
|
-
break;
|
|
2648
|
-
case 'raw':
|
|
2649
|
-
if (arg.rawClause) {
|
|
2650
|
-
appendComponent(arg.rawClause);
|
|
2651
|
-
}
|
|
2652
|
-
break;
|
|
2653
|
-
}
|
|
2654
|
-
return token;
|
|
2655
|
-
}
|
|
2656
|
-
wrapWithParenExpression(expression) {
|
|
2657
|
-
// Reuse existing parentheses groups to avoid double-wrapping when callers already provided them.
|
|
2658
|
-
if (expression instanceof ParenExpression) {
|
|
2659
|
-
return this.visit(expression);
|
|
2660
|
-
}
|
|
2661
|
-
// Synthesize a ParenExpression wrapper so nested boolean groups render with consistent indentation.
|
|
2662
|
-
const synthetic = new ParenExpression(expression);
|
|
2663
|
-
return this.visit(synthetic);
|
|
2664
|
-
}
|
|
2665
|
-
visitReferenceDefinition(arg) {
|
|
2666
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ReferenceDefinition);
|
|
2667
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'references'));
|
|
2668
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2669
|
-
token.innerTokens.push(arg.targetTable.accept(this));
|
|
2670
|
-
if (arg.columns && arg.columns.length > 0) {
|
|
2671
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2672
|
-
const columnList = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ValueList);
|
|
2673
|
-
for (let i = 0; i < arg.columns.length; i++) {
|
|
2674
|
-
if (i > 0) {
|
|
2675
|
-
columnList.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2676
|
-
}
|
|
2677
|
-
columnList.innerTokens.push(arg.columns[i].accept(this));
|
|
2678
|
-
}
|
|
2679
|
-
token.innerTokens.push(columnList);
|
|
2680
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2681
|
-
}
|
|
2682
|
-
if (arg.matchType) {
|
|
2683
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2684
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, `match ${arg.matchType}`));
|
|
2685
|
-
}
|
|
2686
|
-
if (arg.onDelete) {
|
|
2687
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2688
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'on delete'));
|
|
2689
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2690
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.onDelete));
|
|
2691
|
-
}
|
|
2692
|
-
if (arg.onUpdate) {
|
|
2693
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2694
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'on update'));
|
|
2695
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2696
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.onUpdate));
|
|
2697
|
-
}
|
|
2698
|
-
if (arg.deferrable === 'deferrable') {
|
|
2699
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2700
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'deferrable'));
|
|
2701
|
-
}
|
|
2702
|
-
else if (arg.deferrable === 'not deferrable') {
|
|
2703
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2704
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'not deferrable'));
|
|
2705
|
-
}
|
|
2706
|
-
if (arg.initially === 'immediate') {
|
|
2707
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2708
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'initially immediate'));
|
|
2709
|
-
}
|
|
2710
|
-
else if (arg.initially === 'deferred') {
|
|
2711
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2712
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'initially deferred'));
|
|
2713
|
-
}
|
|
2714
|
-
return token;
|
|
2715
|
-
}
|
|
2716
|
-
visitCreateIndexStatement(arg) {
|
|
2717
|
-
const keywordParts = ['create'];
|
|
2718
|
-
if (arg.unique) {
|
|
2719
|
-
keywordParts.push('unique');
|
|
2720
|
-
}
|
|
2721
|
-
keywordParts.push('index');
|
|
2722
|
-
if (arg.concurrently) {
|
|
2723
|
-
keywordParts.push('concurrently');
|
|
2724
|
-
}
|
|
2725
|
-
if (arg.ifNotExists) {
|
|
2726
|
-
keywordParts.push('if not exists');
|
|
2727
|
-
}
|
|
2728
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, keywordParts.join(' '), SqlPrintTokenContainerType.CreateIndexStatement);
|
|
2729
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2730
|
-
token.innerTokens.push(arg.indexName.accept(this));
|
|
2731
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2732
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'on'));
|
|
2733
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2734
|
-
token.innerTokens.push(arg.tableName.accept(this));
|
|
2735
|
-
if (arg.usingMethod) {
|
|
2736
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2737
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'using'));
|
|
2738
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2739
|
-
token.innerTokens.push(arg.usingMethod.accept(this));
|
|
2740
|
-
}
|
|
2741
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2742
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2743
|
-
const columnList = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.IndexColumnList);
|
|
2744
|
-
for (let i = 0; i < arg.columns.length; i++) {
|
|
2745
|
-
if (i > 0) {
|
|
2746
|
-
columnList.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2747
|
-
}
|
|
2748
|
-
columnList.innerTokens.push(arg.columns[i].accept(this));
|
|
2749
|
-
}
|
|
2750
|
-
token.innerTokens.push(columnList);
|
|
2751
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2752
|
-
if (arg.include && arg.include.length > 0) {
|
|
2753
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2754
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'include'));
|
|
2755
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2756
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2757
|
-
const includeList = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ValueList);
|
|
2758
|
-
for (let i = 0; i < arg.include.length; i++) {
|
|
2759
|
-
if (i > 0) {
|
|
2760
|
-
includeList.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2761
|
-
}
|
|
2762
|
-
includeList.innerTokens.push(arg.include[i].accept(this));
|
|
2763
|
-
}
|
|
2764
|
-
token.innerTokens.push(includeList);
|
|
2765
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2766
|
-
}
|
|
2767
|
-
if (arg.withOptions) {
|
|
2768
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2769
|
-
token.innerTokens.push(arg.withOptions.accept(this));
|
|
2770
|
-
}
|
|
2771
|
-
if (arg.tablespace) {
|
|
2772
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2773
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'tablespace'));
|
|
2774
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2775
|
-
token.innerTokens.push(arg.tablespace.accept(this));
|
|
2776
|
-
}
|
|
2777
|
-
if (arg.where) {
|
|
2778
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2779
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'where'));
|
|
2780
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2781
|
-
token.innerTokens.push(this.visit(arg.where));
|
|
2782
|
-
}
|
|
2783
|
-
return token;
|
|
2784
|
-
}
|
|
2785
|
-
visitIndexColumnDefinition(arg) {
|
|
2786
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.IndexColumnDefinition);
|
|
2787
|
-
token.innerTokens.push(this.visit(arg.expression));
|
|
2788
|
-
if (arg.collation) {
|
|
2789
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2790
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'collate'));
|
|
2791
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2792
|
-
token.innerTokens.push(arg.collation.accept(this));
|
|
2793
|
-
}
|
|
2794
|
-
if (arg.operatorClass) {
|
|
2795
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2796
|
-
token.innerTokens.push(arg.operatorClass.accept(this));
|
|
2797
|
-
}
|
|
2798
|
-
if (arg.sortOrder) {
|
|
2799
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2800
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.sortOrder));
|
|
2801
|
-
}
|
|
2802
|
-
if (arg.nullsOrder) {
|
|
2803
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2804
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, `nulls ${arg.nullsOrder}`));
|
|
2805
|
-
}
|
|
2806
|
-
return token;
|
|
2807
|
-
}
|
|
2808
|
-
visitDropTableStatement(arg) {
|
|
2809
|
-
const keyword = arg.ifExists ? 'drop table if exists' : 'drop table';
|
|
2810
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, keyword, SqlPrintTokenContainerType.DropTableStatement);
|
|
2811
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2812
|
-
const tableList = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ValueList);
|
|
2813
|
-
for (let i = 0; i < arg.tables.length; i++) {
|
|
2814
|
-
if (i > 0) {
|
|
2815
|
-
tableList.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2816
|
-
}
|
|
2817
|
-
tableList.innerTokens.push(arg.tables[i].accept(this));
|
|
2818
|
-
}
|
|
2819
|
-
token.innerTokens.push(tableList);
|
|
2820
|
-
if (arg.behavior) {
|
|
2821
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2822
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.behavior));
|
|
2823
|
-
}
|
|
2824
|
-
return token;
|
|
2825
|
-
}
|
|
2826
|
-
visitDropIndexStatement(arg) {
|
|
2827
|
-
const keywordParts = ['drop', 'index'];
|
|
2828
|
-
if (arg.concurrently) {
|
|
2829
|
-
keywordParts.push('concurrently');
|
|
2830
|
-
}
|
|
2831
|
-
if (arg.ifExists) {
|
|
2832
|
-
keywordParts.push('if exists');
|
|
2833
|
-
}
|
|
2834
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, keywordParts.join(' '), SqlPrintTokenContainerType.DropIndexStatement);
|
|
2835
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2836
|
-
const indexList = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ValueList);
|
|
2837
|
-
for (let i = 0; i < arg.indexNames.length; i++) {
|
|
2838
|
-
if (i > 0) {
|
|
2839
|
-
indexList.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
|
|
2840
|
-
}
|
|
2841
|
-
indexList.innerTokens.push(arg.indexNames[i].accept(this));
|
|
2842
|
-
}
|
|
2843
|
-
token.innerTokens.push(indexList);
|
|
2844
|
-
if (arg.behavior) {
|
|
2845
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2846
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.behavior));
|
|
2847
|
-
}
|
|
2848
|
-
return token;
|
|
2849
|
-
}
|
|
2850
|
-
visitAlterTableStatement(arg) {
|
|
2851
|
-
const keywordParts = ['alter', 'table'];
|
|
2852
|
-
if (arg.ifExists) {
|
|
2853
|
-
keywordParts.push('if exists');
|
|
2854
|
-
}
|
|
2855
|
-
if (arg.only) {
|
|
2856
|
-
keywordParts.push('only');
|
|
2857
|
-
}
|
|
2858
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, keywordParts.join(' '), SqlPrintTokenContainerType.AlterTableStatement);
|
|
2859
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2860
|
-
token.innerTokens.push(arg.table.accept(this));
|
|
2861
|
-
for (let i = 0; i < arg.actions.length; i++) {
|
|
2862
|
-
if (i === 0) {
|
|
2863
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2864
|
-
}
|
|
2865
|
-
else {
|
|
2866
|
-
token.innerTokens.push(SqlPrintTokenParser.COMMA_TOKEN);
|
|
2867
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2868
|
-
}
|
|
2869
|
-
token.innerTokens.push(arg.actions[i].accept(this));
|
|
2870
|
-
}
|
|
2871
|
-
return token;
|
|
2872
|
-
}
|
|
2873
|
-
visitAlterTableAddConstraint(arg) {
|
|
2874
|
-
const keyword = arg.ifNotExists ? 'add if not exists' : 'add';
|
|
2875
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.AlterTableAddConstraint);
|
|
2876
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, keyword));
|
|
2877
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2878
|
-
token.innerTokens.push(arg.constraint.accept(this));
|
|
2879
|
-
if (arg.notValid) {
|
|
2880
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2881
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'not valid'));
|
|
2882
|
-
}
|
|
2883
|
-
return token;
|
|
2884
|
-
}
|
|
2885
|
-
visitAlterTableDropConstraint(arg) {
|
|
2886
|
-
let keyword = 'drop constraint';
|
|
2887
|
-
if (arg.ifExists) {
|
|
2888
|
-
keyword += ' if exists';
|
|
2889
|
-
}
|
|
2890
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.AlterTableDropConstraint);
|
|
2891
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, keyword));
|
|
2892
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2893
|
-
token.innerTokens.push(arg.constraintName.accept(this));
|
|
2894
|
-
if (arg.behavior) {
|
|
2895
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2896
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.behavior));
|
|
2897
|
-
}
|
|
2898
|
-
return token;
|
|
2899
|
-
}
|
|
2900
|
-
visitAlterTableDropColumn(arg) {
|
|
2901
|
-
let keyword = 'drop column';
|
|
2902
|
-
if (arg.ifExists) {
|
|
2903
|
-
keyword += ' if exists';
|
|
2904
|
-
}
|
|
2905
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.AlterTableDropColumn);
|
|
2906
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, keyword));
|
|
2907
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2908
|
-
token.innerTokens.push(arg.columnName.accept(this));
|
|
2909
|
-
if (arg.behavior) {
|
|
2910
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2911
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.behavior));
|
|
2912
|
-
}
|
|
2913
|
-
return token;
|
|
2914
|
-
}
|
|
2915
|
-
visitDropConstraintStatement(arg) {
|
|
2916
|
-
let keyword = 'drop constraint';
|
|
2917
|
-
if (arg.ifExists) {
|
|
2918
|
-
keyword += ' if exists';
|
|
2919
|
-
}
|
|
2920
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, keyword, SqlPrintTokenContainerType.DropConstraintStatement);
|
|
2921
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2922
|
-
token.innerTokens.push(arg.constraintName.accept(this));
|
|
2923
|
-
if (arg.behavior) {
|
|
2924
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2925
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.behavior));
|
|
2926
|
-
}
|
|
2927
|
-
return token;
|
|
2928
|
-
}
|
|
2929
|
-
visitExplainStatement(arg) {
|
|
2930
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ExplainStatement);
|
|
2931
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'explain'));
|
|
2932
|
-
const inlineFlags = [];
|
|
2933
|
-
const optionList = [];
|
|
2934
|
-
if (arg.options) {
|
|
2935
|
-
for (const option of arg.options) {
|
|
2936
|
-
if (this.isExplainLegacyFlag(option) && this.isExplainBooleanTrue(option.value)) {
|
|
2937
|
-
inlineFlags.push(option);
|
|
2938
|
-
}
|
|
2939
|
-
else {
|
|
2940
|
-
optionList.push(option);
|
|
2941
|
-
}
|
|
2942
|
-
}
|
|
2943
|
-
}
|
|
2944
|
-
for (const flag of inlineFlags) {
|
|
2945
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2946
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, flag.name.name.toLowerCase()));
|
|
2947
|
-
}
|
|
2948
|
-
if (optionList.length > 0) {
|
|
2949
|
-
// Keep the option list immediately after EXPLAIN without an extra space.
|
|
2950
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2951
|
-
for (let i = 0; i < optionList.length; i++) {
|
|
2952
|
-
if (i > 0) {
|
|
2953
|
-
token.innerTokens.push(SqlPrintTokenParser.COMMA_TOKEN);
|
|
2954
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2955
|
-
}
|
|
2956
|
-
token.innerTokens.push(this.renderExplainOption(optionList[i]));
|
|
2957
|
-
}
|
|
2958
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2959
|
-
}
|
|
2960
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2961
|
-
token.innerTokens.push(arg.statement.accept(this));
|
|
2962
|
-
return token;
|
|
2963
|
-
}
|
|
2964
|
-
visitAnalyzeStatement(arg) {
|
|
2965
|
-
const keywordParts = ['analyze'];
|
|
2966
|
-
if (arg.verbose) {
|
|
2967
|
-
keywordParts.push('verbose');
|
|
2968
|
-
}
|
|
2969
|
-
const token = new SqlPrintToken(SqlPrintTokenType.keyword, keywordParts.join(' '), SqlPrintTokenContainerType.AnalyzeStatement);
|
|
2970
|
-
// Render relation target when provided.
|
|
2971
|
-
if (arg.target) {
|
|
2972
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2973
|
-
token.innerTokens.push(this.renderQualifiedNameInline(arg.target));
|
|
2974
|
-
// Render column list inline (comma space) when present.
|
|
2975
|
-
if (arg.columns && arg.columns.length > 0) {
|
|
2976
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2977
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
|
2978
|
-
for (let i = 0; i < arg.columns.length; i++) {
|
|
2979
|
-
if (i > 0) {
|
|
2980
|
-
token.innerTokens.push(SqlPrintTokenParser.COMMA_TOKEN);
|
|
2981
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2982
|
-
}
|
|
2983
|
-
token.innerTokens.push(this.renderIdentifierInline(arg.columns[i]));
|
|
2984
|
-
}
|
|
2985
|
-
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
|
2986
|
-
}
|
|
2987
|
-
}
|
|
2988
|
-
return token;
|
|
2989
|
-
}
|
|
2990
|
-
renderExplainOption(option) {
|
|
2991
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ExplainOption);
|
|
2992
|
-
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, option.name.name.toLowerCase()));
|
|
2993
|
-
if (option.value && !this.isExplainBooleanTrue(option.value)) {
|
|
2994
|
-
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
|
2995
|
-
token.innerTokens.push(option.value.accept(this));
|
|
2996
|
-
}
|
|
2997
|
-
return token;
|
|
2998
|
-
}
|
|
2999
|
-
isExplainLegacyFlag(option) {
|
|
3000
|
-
const name = option.name.name.toLowerCase();
|
|
3001
|
-
return name === 'analyze' || name === 'verbose';
|
|
3002
|
-
}
|
|
3003
|
-
isExplainBooleanTrue(value) {
|
|
3004
|
-
if (!value) {
|
|
3005
|
-
return false;
|
|
3006
|
-
}
|
|
3007
|
-
if (value instanceof RawString) {
|
|
3008
|
-
const normalized = value.value.toLowerCase();
|
|
3009
|
-
return normalized === 'true' || normalized === 't' || normalized === 'on' || normalized === 'yes' || normalized === '1';
|
|
3010
|
-
}
|
|
3011
|
-
if (value instanceof LiteralValue) {
|
|
3012
|
-
if (typeof value.value === 'boolean') {
|
|
3013
|
-
return value.value;
|
|
3014
|
-
}
|
|
3015
|
-
if (typeof value.value === 'number') {
|
|
3016
|
-
return value.value !== 0;
|
|
3017
|
-
}
|
|
3018
|
-
if (typeof value.value === 'string') {
|
|
3019
|
-
const normalized = value.value.toLowerCase();
|
|
3020
|
-
return normalized === 'true' || normalized === 't' || normalized === 'on' || normalized === 'yes' || normalized === '1';
|
|
3021
|
-
}
|
|
3022
|
-
}
|
|
3023
|
-
return false;
|
|
3024
|
-
}
|
|
3025
|
-
renderQualifiedNameInline(arg) {
|
|
3026
|
-
const parts = [];
|
|
3027
|
-
if (arg.namespaces && arg.namespaces.length > 0) {
|
|
3028
|
-
for (const ns of arg.namespaces) {
|
|
3029
|
-
parts.push(this.renderIdentifierText(ns));
|
|
3030
|
-
}
|
|
3031
|
-
}
|
|
3032
|
-
parts.push(this.renderIdentifierText(arg.name));
|
|
3033
|
-
return new SqlPrintToken(SqlPrintTokenType.value, parts.join('.'), SqlPrintTokenContainerType.QualifiedName);
|
|
3034
|
-
}
|
|
3035
|
-
renderIdentifierInline(component) {
|
|
3036
|
-
return new SqlPrintToken(SqlPrintTokenType.value, this.renderIdentifierText(component), SqlPrintTokenContainerType.IdentifierString);
|
|
3037
|
-
}
|
|
3038
|
-
renderIdentifierText(component) {
|
|
3039
|
-
if (component instanceof IdentifierString) {
|
|
3040
|
-
if (component.name === '*') {
|
|
3041
|
-
return component.name;
|
|
3042
|
-
}
|
|
3043
|
-
return this.identifierDecorator.decorate(component.name);
|
|
3044
|
-
}
|
|
3045
|
-
return component.value;
|
|
3046
|
-
}
|
|
3047
|
-
}
|
|
3048
|
-
// Static tokens for common symbols
|
|
3049
|
-
SqlPrintTokenParser.SPACE_TOKEN = new SqlPrintToken(SqlPrintTokenType.space, ' ');
|
|
3050
|
-
SqlPrintTokenParser.COMMA_TOKEN = new SqlPrintToken(SqlPrintTokenType.comma, ',');
|
|
3051
|
-
SqlPrintTokenParser.ARGUMENT_SPLIT_COMMA_TOKEN = new SqlPrintToken(SqlPrintTokenType.argumentSplitter, ',');
|
|
3052
|
-
SqlPrintTokenParser.PAREN_OPEN_TOKEN = new SqlPrintToken(SqlPrintTokenType.parenthesis, '(');
|
|
3053
|
-
SqlPrintTokenParser.PAREN_CLOSE_TOKEN = new SqlPrintToken(SqlPrintTokenType.parenthesis, ')');
|
|
3054
|
-
SqlPrintTokenParser.DOT_TOKEN = new SqlPrintToken(SqlPrintTokenType.dot, '.');
|
|
3055
|
-
// Set of component kinds that handle their own positioned comments
|
|
3056
|
-
// Note: Cannot use static readonly due to circular dependency issues with class initialization
|
|
3057
|
-
SqlPrintTokenParser._selfHandlingComponentTypes = null;
|
|
3058
|
-
//# sourceMappingURL=SqlPrintTokenParser.js.map
|