rawsql-ts 0.1.0-beta.9 → 0.1.1-beta.2
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/README.md +214 -176
- package/dist/esm/index.js +17 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/models/BinarySelectQuery.js +137 -0
- package/dist/esm/models/BinarySelectQuery.js.map +1 -0
- package/dist/esm/models/Clause.js +289 -0
- package/dist/esm/models/Clause.js.map +1 -0
- package/dist/esm/models/KeywordTrie.js +48 -0
- package/dist/esm/models/KeywordTrie.js.map +1 -0
- package/dist/esm/models/Lexeme.js +18 -0
- package/dist/esm/models/Lexeme.js.map +1 -0
- package/dist/esm/models/SelectQuery.js +5 -0
- package/dist/esm/models/SelectQuery.js.map +1 -0
- package/dist/esm/models/SimpleSelectQuery.js +288 -0
- package/dist/esm/models/SimpleSelectQuery.js.map +1 -0
- package/dist/esm/models/SqlComponent.js +22 -0
- package/dist/esm/models/SqlComponent.js.map +1 -0
- package/dist/esm/models/ValueComponent.js +223 -0
- package/dist/esm/models/ValueComponent.js.map +1 -0
- package/dist/esm/models/ValuesQuery.js +12 -0
- package/dist/esm/models/ValuesQuery.js.map +1 -0
- package/dist/esm/parsers/CommandExpressionParser.js +120 -0
- package/dist/esm/parsers/CommandExpressionParser.js.map +1 -0
- package/dist/esm/parsers/CommonTableParser.js +58 -0
- package/dist/esm/parsers/CommonTableParser.js.map +1 -0
- package/dist/esm/parsers/ForClauseParser.js +54 -0
- package/dist/esm/parsers/ForClauseParser.js.map +1 -0
- package/dist/esm/parsers/FromClauseParser.js +43 -0
- package/dist/esm/parsers/FromClauseParser.js.map +1 -0
- package/dist/esm/parsers/FunctionExpressionParser.js +174 -0
- package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -0
- package/dist/esm/parsers/GroupByParser.js +54 -0
- package/dist/esm/parsers/GroupByParser.js.map +1 -0
- package/dist/esm/parsers/HavingParser.js +32 -0
- package/dist/esm/parsers/HavingParser.js.map +1 -0
- package/dist/esm/parsers/IdentifierParser.js +35 -0
- package/dist/esm/parsers/IdentifierParser.js.map +1 -0
- package/dist/esm/parsers/JoinClauseParser.js +101 -0
- package/dist/esm/parsers/JoinClauseParser.js.map +1 -0
- package/dist/esm/parsers/KeywordParser.js +87 -0
- package/dist/esm/parsers/KeywordParser.js.map +1 -0
- package/dist/esm/parsers/LimitClauseParser.js +46 -0
- package/dist/esm/parsers/LimitClauseParser.js.map +1 -0
- package/dist/esm/parsers/LiteralParser.js +34 -0
- package/dist/esm/parsers/LiteralParser.js.map +1 -0
- package/dist/esm/parsers/OrderByClauseParser.js +73 -0
- package/dist/esm/parsers/OrderByClauseParser.js.map +1 -0
- package/dist/esm/parsers/OverExpressionParser.js +40 -0
- package/dist/esm/parsers/OverExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ParameterExpressionParser.js +11 -0
- package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ParenExpressionParser.js +29 -0
- package/dist/esm/parsers/ParenExpressionParser.js.map +1 -0
- package/dist/esm/parsers/PartitionByParser.js +49 -0
- package/dist/esm/parsers/PartitionByParser.js.map +1 -0
- package/dist/esm/parsers/SelectClauseParser.js +80 -0
- package/dist/esm/parsers/SelectClauseParser.js.map +1 -0
- package/dist/esm/parsers/SelectQueryParser.js +149 -0
- package/dist/esm/parsers/SelectQueryParser.js.map +1 -0
- package/dist/esm/parsers/SourceAliasExpressionParser.js +45 -0
- package/dist/esm/parsers/SourceAliasExpressionParser.js.map +1 -0
- package/dist/esm/parsers/SourceExpressionParser.js +31 -0
- package/dist/esm/parsers/SourceExpressionParser.js.map +1 -0
- package/dist/esm/parsers/SourceParser.js +115 -0
- package/dist/esm/parsers/SourceParser.js.map +1 -0
- package/dist/esm/parsers/SqlTokenizer.js +170 -0
- package/dist/esm/parsers/SqlTokenizer.js.map +1 -0
- package/dist/esm/parsers/StringSpecifierExpressionParser.js +18 -0
- package/dist/esm/parsers/StringSpecifierExpressionParser.js.map +1 -0
- package/dist/esm/parsers/UnaryExpressionParser.js +26 -0
- package/dist/esm/parsers/UnaryExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ValueParser.js +132 -0
- package/dist/esm/parsers/ValueParser.js.map +1 -0
- package/dist/esm/parsers/ValuesQueryParser.js +82 -0
- package/dist/esm/parsers/ValuesQueryParser.js.map +1 -0
- package/dist/esm/parsers/WhereClauseParser.js +32 -0
- package/dist/esm/parsers/WhereClauseParser.js.map +1 -0
- package/dist/esm/parsers/WindowClauseParser.js +41 -0
- package/dist/esm/parsers/WindowClauseParser.js.map +1 -0
- package/dist/esm/parsers/WindowExpressionParser.js +159 -0
- package/dist/esm/parsers/WindowExpressionParser.js.map +1 -0
- package/dist/esm/parsers/WithClauseParser.js +53 -0
- package/dist/esm/parsers/WithClauseParser.js.map +1 -0
- package/dist/esm/tokenReaders/BaseTokenReader.js +78 -0
- package/dist/esm/tokenReaders/BaseTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/CommandTokenReader.js +141 -0
- package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/FunctionTokenReader.js +41 -0
- package/dist/esm/tokenReaders/FunctionTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/IdentifierTokenReader.js +66 -0
- package/dist/esm/tokenReaders/IdentifierTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/LiteralTokenReader.js +185 -0
- package/dist/esm/tokenReaders/LiteralTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/OperatorTokenReader.js +94 -0
- package/dist/esm/tokenReaders/OperatorTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/ParameterTokenReader.js +40 -0
- package/dist/esm/tokenReaders/ParameterTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/StringSpecifierTokenReader.js +27 -0
- package/dist/esm/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/SymbolTokenReader.js +31 -0
- package/dist/esm/tokenReaders/SymbolTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/TokenReaderManager.js +106 -0
- package/dist/esm/tokenReaders/TokenReaderManager.js.map +1 -0
- package/dist/esm/tokenReaders/TypeTokenReader.js +55 -0
- package/dist/esm/tokenReaders/TypeTokenReader.js.map +1 -0
- package/dist/esm/transformers/CTEBuilder.js +184 -0
- package/dist/esm/transformers/CTEBuilder.js.map +1 -0
- package/dist/esm/transformers/CTECollector.js +384 -0
- package/dist/esm/transformers/CTECollector.js.map +1 -0
- package/dist/esm/transformers/CTEDisabler.js +321 -0
- package/dist/esm/transformers/CTEDisabler.js.map +1 -0
- package/dist/esm/transformers/CTEInjector.js +79 -0
- package/dist/esm/transformers/CTEInjector.js.map +1 -0
- package/dist/esm/transformers/CTENormalizer.js +42 -0
- package/dist/esm/transformers/CTENormalizer.js.map +1 -0
- package/dist/esm/transformers/Formatter.js +463 -0
- package/dist/esm/transformers/Formatter.js.map +1 -0
- package/dist/esm/transformers/QueryConverter.js +115 -0
- package/dist/esm/transformers/QueryConverter.js.map +1 -0
- package/dist/esm/transformers/SelectValueCollector.js +245 -0
- package/dist/esm/transformers/SelectValueCollector.js.map +1 -0
- package/dist/esm/transformers/SelectableColumnCollector.js +318 -0
- package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -0
- package/dist/esm/transformers/TableColumnResolver.js +2 -0
- package/dist/esm/transformers/TableColumnResolver.js.map +1 -0
- package/dist/esm/transformers/TableSourceCollector.js +380 -0
- package/dist/esm/transformers/TableSourceCollector.js.map +1 -0
- package/dist/esm/transformers/UpstreamSelectQueryFinder.js +125 -0
- package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -0
- package/dist/esm/types/index.d.ts +14 -0
- package/dist/esm/types/models/BinarySelectQuery.d.ts +91 -0
- package/dist/esm/types/models/Clause.d.ts +189 -0
- package/dist/esm/types/models/KeywordTrie.d.ts +11 -0
- package/dist/esm/types/models/Lexeme.d.ts +25 -0
- package/dist/esm/types/models/SelectQuery.d.ts +5 -0
- package/dist/esm/types/models/SimpleSelectQuery.d.ts +167 -0
- package/dist/esm/types/models/SqlComponent.d.ts +18 -0
- package/dist/esm/types/models/ValueComponent.d.ts +158 -0
- package/dist/esm/types/models/ValuesQuery.d.ts +10 -0
- package/dist/esm/types/parsers/CommandExpressionParser.d.ts +15 -0
- package/dist/esm/types/parsers/CommonTableParser.d.ts +9 -0
- package/dist/esm/types/parsers/ForClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/FromClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/FunctionExpressionParser.d.ts +22 -0
- package/dist/esm/types/parsers/GroupByParser.d.ts +10 -0
- package/dist/esm/types/parsers/HavingParser.d.ts +9 -0
- package/dist/esm/types/parsers/IdentifierParser.d.ts +8 -0
- package/dist/esm/types/parsers/JoinClauseParser.d.ts +14 -0
- package/dist/esm/types/parsers/KeywordParser.d.ts +17 -0
- package/dist/esm/types/parsers/LimitClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/LiteralParser.d.ts +8 -0
- package/dist/esm/types/parsers/OrderByClauseParser.d.ts +10 -0
- package/dist/esm/types/parsers/OverExpressionParser.d.ts +9 -0
- package/dist/esm/types/parsers/ParameterExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/ParenExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/PartitionByParser.d.ts +9 -0
- package/dist/esm/types/parsers/SelectClauseParser.d.ts +10 -0
- package/dist/esm/types/parsers/SelectQueryParser.d.ts +13 -0
- package/dist/esm/types/parsers/SourceAliasExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/SourceExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/SourceParser.d.ts +13 -0
- package/dist/esm/types/parsers/SqlTokenizer.d.ts +64 -0
- package/dist/esm/types/parsers/StringSpecifierExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/UnaryExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/ValueParser.d.ts +14 -0
- package/dist/esm/types/parsers/ValuesQueryParser.d.ts +10 -0
- package/dist/esm/types/parsers/WhereClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/WindowClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/WindowExpressionParser.d.ts +12 -0
- package/dist/esm/types/parsers/WithClauseParser.d.ts +9 -0
- package/dist/esm/types/tokenReaders/BaseTokenReader.d.ts +43 -0
- package/dist/esm/types/tokenReaders/CommandTokenReader.d.ts +7 -0
- package/dist/esm/types/tokenReaders/FunctionTokenReader.d.ts +11 -0
- package/dist/esm/types/tokenReaders/IdentifierTokenReader.d.ts +15 -0
- package/dist/esm/types/tokenReaders/LiteralTokenReader.d.ts +23 -0
- package/dist/esm/types/tokenReaders/OperatorTokenReader.d.ts +5 -0
- package/dist/esm/types/tokenReaders/ParameterTokenReader.d.ts +11 -0
- package/dist/esm/types/tokenReaders/StringSpecifierTokenReader.d.ts +8 -0
- package/dist/esm/types/tokenReaders/SymbolTokenReader.d.ts +12 -0
- package/dist/esm/types/tokenReaders/TokenReaderManager.d.ts +53 -0
- package/dist/esm/types/tokenReaders/TypeTokenReader.d.ts +11 -0
- package/dist/esm/types/transformers/CTEBuilder.d.ts +52 -0
- package/dist/esm/types/transformers/CTECollector.d.ts +82 -0
- package/dist/esm/types/transformers/CTEDisabler.d.ts +77 -0
- package/dist/esm/types/transformers/CTEInjector.d.ts +40 -0
- package/dist/esm/types/transformers/CTENormalizer.d.ts +25 -0
- package/dist/esm/types/transformers/Formatter.d.ts +82 -0
- package/dist/esm/types/transformers/QueryConverter.d.ts +41 -0
- package/dist/esm/types/transformers/SelectValueCollector.d.ts +60 -0
- package/dist/esm/types/transformers/SelectableColumnCollector.d.ts +72 -0
- package/dist/esm/types/transformers/TableColumnResolver.d.ts +10 -0
- package/dist/esm/types/transformers/TableSourceCollector.d.ts +92 -0
- package/dist/esm/types/transformers/UpstreamSelectQueryFinder.d.ts +27 -0
- package/dist/esm/types/utils/charLookupTable.d.ts +11 -0
- package/dist/esm/types/utils/stringUtils.d.ts +43 -0
- package/dist/esm/utils/charLookupTable.js +69 -0
- package/dist/esm/utils/charLookupTable.js.map +1 -0
- package/dist/esm/utils/stringUtils.js +164 -0
- package/dist/esm/utils/stringUtils.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/transformers/CTECollector.d.ts +2 -1
- package/dist/transformers/CTECollector.js +5 -1
- package/dist/transformers/CTECollector.js.map +1 -1
- package/dist/transformers/CTEDisabler.js +1 -1
- package/dist/transformers/CTEDisabler.js.map +1 -1
- package/dist/transformers/Formatter.js +1 -1
- package/dist/transformers/Formatter.js.map +1 -1
- package/dist/transformers/SelectValueCollector.d.ts +2 -4
- package/dist/transformers/SelectValueCollector.js.map +1 -1
- package/dist/transformers/SelectableColumnCollector.d.ts +2 -0
- package/dist/transformers/SelectableColumnCollector.js +17 -3
- package/dist/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/transformers/TableColumnResolver.d.ts +10 -0
- package/dist/transformers/TableColumnResolver.js +3 -0
- package/dist/transformers/TableColumnResolver.js.map +1 -0
- package/package.json +15 -2
@@ -0,0 +1,321 @@
|
|
1
|
+
import { ForClause, FromClause, GroupByClause, HavingClause, JoinClause, JoinOnClause, JoinUsingClause, LimitClause, OrderByClause, OrderByItem, ParenSource, SelectClause, SelectItem, SourceExpression, SubQuerySource, TableSource, WhereClause, WindowFrameClause } from "../models/Clause";
|
2
|
+
import { BinarySelectQuery, SimpleSelectQuery, ValuesQuery } from "../models/SelectQuery";
|
3
|
+
import { ArrayExpression, BetweenExpression, BinaryExpression, CaseExpression, CaseKeyValuePair, CastExpression, ColumnReference, FunctionCall, InlineQuery, ParenExpression, ParameterExpression, SwitchCaseArgument, TupleExpression, UnaryExpression, WindowFrameExpression, IdentifierString, RawString, WindowFrameSpec, LiteralValue, TypeValue } from "../models/ValueComponent";
|
4
|
+
/**
|
5
|
+
* A visitor that disables all WITH clauses in a SQL query structure.
|
6
|
+
* This processes and removes WITH clauses from:
|
7
|
+
* - Simple SELECT queries
|
8
|
+
* - Binary queries (UNION, EXCEPT, etc.)
|
9
|
+
* - Subqueries
|
10
|
+
* - Inline queries
|
11
|
+
*
|
12
|
+
* It maintains the CTE queries themselves but restructures the query to not use
|
13
|
+
* the WITH clause syntactical construct.
|
14
|
+
*/
|
15
|
+
export class CTEDisabler {
|
16
|
+
constructor() {
|
17
|
+
this.visitedNodes = new Set();
|
18
|
+
this.isRootVisit = true;
|
19
|
+
this.handlers = new Map();
|
20
|
+
// Setup handlers for all component types that might contain WITH clauses
|
21
|
+
// SelectQuery types
|
22
|
+
this.handlers.set(SimpleSelectQuery.kind, (expr) => this.visitSimpleSelectQuery(expr));
|
23
|
+
this.handlers.set(BinarySelectQuery.kind, (expr) => this.visitBinarySelectQuery(expr));
|
24
|
+
this.handlers.set(ValuesQuery.kind, (expr) => this.visitValuesQuery(expr));
|
25
|
+
// SelectComponent types
|
26
|
+
this.handlers.set(SelectItem.kind, (expr) => this.visitSelectItem(expr));
|
27
|
+
// Identifiers and raw strings
|
28
|
+
this.handlers.set(IdentifierString.kind, (expr) => this.visitIdentifierString(expr));
|
29
|
+
this.handlers.set(RawString.kind, (expr) => this.visitRawString(expr));
|
30
|
+
this.handlers.set(ColumnReference.kind, (expr) => this.visitColumnReference(expr));
|
31
|
+
this.handlers.set(ParameterExpression.kind, (expr) => this.visitParameterExpression(expr));
|
32
|
+
this.handlers.set(LiteralValue.kind, (expr) => this.visitLiteralValue(expr));
|
33
|
+
// Source components
|
34
|
+
this.handlers.set(SourceExpression.kind, (expr) => this.visitSourceExpression(expr));
|
35
|
+
this.handlers.set(TableSource.kind, (expr) => this.visitTableSource(expr));
|
36
|
+
this.handlers.set(ParenSource.kind, (expr) => this.visitParenSource(expr));
|
37
|
+
// Subqueries and inline queries
|
38
|
+
this.handlers.set(SubQuerySource.kind, (expr) => this.visitSubQuerySource(expr));
|
39
|
+
this.handlers.set(InlineQuery.kind, (expr) => this.visitInlineQuery(expr));
|
40
|
+
// FROM and JOIN clauses
|
41
|
+
this.handlers.set(FromClause.kind, (expr) => this.visitFromClause(expr));
|
42
|
+
this.handlers.set(JoinClause.kind, (expr) => this.visitJoinClause(expr));
|
43
|
+
this.handlers.set(JoinOnClause.kind, (expr) => this.visitJoinOnClause(expr));
|
44
|
+
this.handlers.set(JoinUsingClause.kind, (expr) => this.visitJoinUsingClause(expr));
|
45
|
+
// WHERE clause
|
46
|
+
this.handlers.set(WhereClause.kind, (expr) => this.visitWhereClause(expr));
|
47
|
+
// Value components that might contain subqueries
|
48
|
+
this.handlers.set(ParenExpression.kind, (expr) => this.visitParenExpression(expr));
|
49
|
+
this.handlers.set(BinaryExpression.kind, (expr) => this.visitBinaryExpression(expr));
|
50
|
+
this.handlers.set(UnaryExpression.kind, (expr) => this.visitUnaryExpression(expr));
|
51
|
+
this.handlers.set(CaseExpression.kind, (expr) => this.visitCaseExpression(expr));
|
52
|
+
this.handlers.set(CaseKeyValuePair.kind, (expr) => this.visitCaseKeyValuePair(expr));
|
53
|
+
this.handlers.set(SwitchCaseArgument.kind, (expr) => this.visitSwitchCaseArgument(expr));
|
54
|
+
this.handlers.set(BetweenExpression.kind, (expr) => this.visitBetweenExpression(expr));
|
55
|
+
this.handlers.set(FunctionCall.kind, (expr) => this.visitFunctionCall(expr));
|
56
|
+
this.handlers.set(ArrayExpression.kind, (expr) => this.visitArrayExpression(expr));
|
57
|
+
this.handlers.set(TupleExpression.kind, (expr) => this.visitTupleExpression(expr));
|
58
|
+
this.handlers.set(CastExpression.kind, (expr) => this.visitCastExpression(expr));
|
59
|
+
this.handlers.set(WindowFrameExpression.kind, (expr) => this.visitWindowFrameExpression(expr));
|
60
|
+
this.handlers.set(WindowFrameSpec.kind, (expr) => this.visitWindowFrameSpec(expr));
|
61
|
+
this.handlers.set(TypeValue.kind, (expr) => this.visitTypeValue(expr));
|
62
|
+
// Add handlers for other clause types
|
63
|
+
this.handlers.set(SelectClause.kind, (expr) => this.visitSelectClause(expr));
|
64
|
+
this.handlers.set(GroupByClause.kind, (expr) => this.visitGroupByClause(expr));
|
65
|
+
this.handlers.set(HavingClause.kind, (expr) => this.visitHavingClause(expr));
|
66
|
+
this.handlers.set(OrderByClause.kind, (expr) => this.visitOrderByClause(expr));
|
67
|
+
this.handlers.set(WindowFrameClause.kind, (expr) => this.visitWindowFrameClause(expr));
|
68
|
+
this.handlers.set(LimitClause.kind, (expr) => this.visitLimitClause(expr));
|
69
|
+
this.handlers.set(ForClause.kind, (expr) => this.visitForClause(expr));
|
70
|
+
this.handlers.set(OrderByItem.kind, (expr) => this.visitOrderByItem(expr));
|
71
|
+
}
|
72
|
+
/**
|
73
|
+
* Reset the visited nodes tracking
|
74
|
+
*/
|
75
|
+
reset() {
|
76
|
+
this.visitedNodes.clear();
|
77
|
+
}
|
78
|
+
execute(arg) {
|
79
|
+
// Reset the visited nodes before starting the visit
|
80
|
+
this.reset();
|
81
|
+
return this.visit(arg);
|
82
|
+
}
|
83
|
+
/**
|
84
|
+
* Main entry point for the visitor pattern.
|
85
|
+
* Implements the shallow visit pattern to distinguish between root and recursive visits.
|
86
|
+
*/
|
87
|
+
visit(arg) {
|
88
|
+
// If not a root visit, just visit the node and return
|
89
|
+
if (!this.isRootVisit) {
|
90
|
+
return this.visitNode(arg);
|
91
|
+
}
|
92
|
+
// If this is a root visit, we need to reset the state
|
93
|
+
this.reset();
|
94
|
+
this.isRootVisit = false;
|
95
|
+
try {
|
96
|
+
return this.visitNode(arg);
|
97
|
+
}
|
98
|
+
finally {
|
99
|
+
// Regardless of success or failure, reset the root visit flag
|
100
|
+
this.isRootVisit = true;
|
101
|
+
}
|
102
|
+
}
|
103
|
+
/**
|
104
|
+
* Internal visit method used for all nodes.
|
105
|
+
* This separates the visit flag management from the actual node visitation logic.
|
106
|
+
*/
|
107
|
+
visitNode(arg) {
|
108
|
+
var _a, _b;
|
109
|
+
// Check for circular references - if node already visited, return as is
|
110
|
+
if (this.visitedNodes.has(arg)) {
|
111
|
+
return arg;
|
112
|
+
}
|
113
|
+
// Mark as visited node
|
114
|
+
this.visitedNodes.add(arg);
|
115
|
+
const handler = this.handlers.get(arg.getKind());
|
116
|
+
if (handler) {
|
117
|
+
return handler(arg);
|
118
|
+
}
|
119
|
+
// Provide more detailed error message
|
120
|
+
const kindSymbol = ((_a = arg.getKind()) === null || _a === void 0 ? void 0 : _a.toString()) || 'unknown';
|
121
|
+
const constructor = ((_b = arg.constructor) === null || _b === void 0 ? void 0 : _b.name) || 'unknown';
|
122
|
+
throw new Error(`[CTEDisabler] No handler for ${constructor} with kind ${kindSymbol}.`);
|
123
|
+
}
|
124
|
+
visitSimpleSelectQuery(arg) {
|
125
|
+
if (arg.WithClause) {
|
126
|
+
arg.WithClause.tables.forEach(table => {
|
127
|
+
this.visit(table.query);
|
128
|
+
});
|
129
|
+
}
|
130
|
+
arg.WithClause = null; // Explicitly remove WITH clause
|
131
|
+
// Visit the components of the SimpleSelectQuery
|
132
|
+
arg.selectClause = this.visit(arg.selectClause);
|
133
|
+
arg.fromClause = arg.fromClause ? this.visit(arg.fromClause) : null;
|
134
|
+
arg.whereClause = arg.whereClause ? this.visit(arg.whereClause) : null;
|
135
|
+
arg.groupByClause = arg.groupByClause ? this.visit(arg.groupByClause) : null;
|
136
|
+
arg.havingClause = arg.havingClause ? this.visit(arg.havingClause) : null;
|
137
|
+
arg.orderByClause = arg.orderByClause ? this.visit(arg.orderByClause) : null;
|
138
|
+
arg.windowFrameClause = arg.windowFrameClause ? this.visit(arg.windowFrameClause) : null;
|
139
|
+
arg.rowLimitClause = arg.rowLimitClause ? this.visit(arg.rowLimitClause) : null;
|
140
|
+
arg.forClause = arg.forClause ? this.visit(arg.forClause) : null;
|
141
|
+
return arg;
|
142
|
+
}
|
143
|
+
visitBinarySelectQuery(query) {
|
144
|
+
query.left = this.visit(query.left);
|
145
|
+
query.right = this.visit(query.right);
|
146
|
+
return query;
|
147
|
+
}
|
148
|
+
visitValuesQuery(query) {
|
149
|
+
const newTuples = query.tuples.map(tuple => this.visit(tuple));
|
150
|
+
return new ValuesQuery(newTuples);
|
151
|
+
}
|
152
|
+
visitSelectClause(clause) {
|
153
|
+
const newItems = clause.items.map(item => {
|
154
|
+
return this.visit(item);
|
155
|
+
});
|
156
|
+
return new SelectClause(newItems, clause.distinct);
|
157
|
+
}
|
158
|
+
visitFromClause(clause) {
|
159
|
+
const newSource = this.visit(clause.source);
|
160
|
+
const newJoins = clause.joins ? clause.joins.map(join => this.visit(join)) : null;
|
161
|
+
return new FromClause(newSource, newJoins);
|
162
|
+
}
|
163
|
+
visitSubQuerySource(subQuery) {
|
164
|
+
const newQuery = this.visit(subQuery.query);
|
165
|
+
return new SubQuerySource(newQuery);
|
166
|
+
}
|
167
|
+
visitInlineQuery(inlineQuery) {
|
168
|
+
const newQuery = this.visit(inlineQuery.selectQuery);
|
169
|
+
return new InlineQuery(newQuery);
|
170
|
+
}
|
171
|
+
visitJoinClause(joinClause) {
|
172
|
+
const newSource = this.visit(joinClause.source);
|
173
|
+
const newCondition = joinClause.condition ? this.visit(joinClause.condition) : null;
|
174
|
+
return new JoinClause(joinClause.joinType.value, newSource, newCondition, joinClause.lateral);
|
175
|
+
}
|
176
|
+
visitJoinOnClause(joinOn) {
|
177
|
+
const newCondition = this.visit(joinOn.condition);
|
178
|
+
return new JoinOnClause(newCondition);
|
179
|
+
}
|
180
|
+
visitJoinUsingClause(joinUsing) {
|
181
|
+
const newCondition = this.visit(joinUsing.condition);
|
182
|
+
return new JoinUsingClause(newCondition);
|
183
|
+
}
|
184
|
+
visitWhereClause(whereClause) {
|
185
|
+
const newCondition = this.visit(whereClause.condition);
|
186
|
+
return new WhereClause(newCondition);
|
187
|
+
}
|
188
|
+
visitGroupByClause(clause) {
|
189
|
+
const newGrouping = clause.grouping.map(item => this.visit(item));
|
190
|
+
return new GroupByClause(newGrouping);
|
191
|
+
}
|
192
|
+
visitHavingClause(clause) {
|
193
|
+
const newCondition = this.visit(clause.condition);
|
194
|
+
return new HavingClause(newCondition);
|
195
|
+
}
|
196
|
+
visitOrderByClause(clause) {
|
197
|
+
const newOrder = clause.order.map(item => this.visit(item));
|
198
|
+
return new OrderByClause(newOrder);
|
199
|
+
}
|
200
|
+
visitWindowFrameClause(clause) {
|
201
|
+
const newExpression = this.visit(clause.expression);
|
202
|
+
return new WindowFrameClause(clause.name.name, newExpression);
|
203
|
+
}
|
204
|
+
visitLimitClause(clause) {
|
205
|
+
const newLimit = this.visit(clause.limit);
|
206
|
+
const newOffset = clause.offset ? this.visit(clause.offset) : null;
|
207
|
+
return new LimitClause(newLimit, newOffset);
|
208
|
+
}
|
209
|
+
visitForClause(clause) {
|
210
|
+
return new ForClause(clause.lockMode);
|
211
|
+
}
|
212
|
+
visitParenExpression(expr) {
|
213
|
+
const newExpression = this.visit(expr.expression);
|
214
|
+
return new ParenExpression(newExpression);
|
215
|
+
}
|
216
|
+
visitBinaryExpression(expr) {
|
217
|
+
const newLeft = this.visit(expr.left);
|
218
|
+
const newRight = this.visit(expr.right);
|
219
|
+
return new BinaryExpression(newLeft, expr.operator.value, newRight);
|
220
|
+
}
|
221
|
+
visitUnaryExpression(expr) {
|
222
|
+
const newExpression = this.visit(expr.expression);
|
223
|
+
return new UnaryExpression(expr.operator.value, newExpression);
|
224
|
+
}
|
225
|
+
visitCaseExpression(expr) {
|
226
|
+
const newCondition = expr.condition ? this.visit(expr.condition) : null;
|
227
|
+
const newSwitchCase = this.visit(expr.switchCase);
|
228
|
+
return new CaseExpression(newCondition, newSwitchCase);
|
229
|
+
}
|
230
|
+
visitSwitchCaseArgument(switchCase) {
|
231
|
+
const newCases = switchCase.cases.map(caseItem => this.visit(caseItem));
|
232
|
+
const newElseValue = switchCase.elseValue ? this.visit(switchCase.elseValue) : null;
|
233
|
+
return new SwitchCaseArgument(newCases, newElseValue);
|
234
|
+
}
|
235
|
+
visitCaseKeyValuePair(pair) {
|
236
|
+
const newKey = this.visit(pair.key);
|
237
|
+
const newValue = this.visit(pair.value);
|
238
|
+
return new CaseKeyValuePair(newKey, newValue);
|
239
|
+
}
|
240
|
+
visitBetweenExpression(expr) {
|
241
|
+
const newExpression = this.visit(expr.expression);
|
242
|
+
const newLower = this.visit(expr.lower);
|
243
|
+
const newUpper = this.visit(expr.upper);
|
244
|
+
return new BetweenExpression(newExpression, newLower, newUpper, expr.negated);
|
245
|
+
}
|
246
|
+
visitFunctionCall(func) {
|
247
|
+
const newArgument = func.argument ? this.visit(func.argument) : null;
|
248
|
+
const newOver = func.over ? this.visit(func.over) : null;
|
249
|
+
return new FunctionCall(func.name.value, newArgument, newOver);
|
250
|
+
}
|
251
|
+
visitArrayExpression(expr) {
|
252
|
+
const newExpression = this.visit(expr.expression);
|
253
|
+
return new ArrayExpression(newExpression);
|
254
|
+
}
|
255
|
+
visitTupleExpression(expr) {
|
256
|
+
const newValues = expr.values.map(value => this.visit(value));
|
257
|
+
return new TupleExpression(newValues);
|
258
|
+
}
|
259
|
+
visitCastExpression(expr) {
|
260
|
+
const newInput = this.visit(expr.input);
|
261
|
+
const newCastType = this.visit(expr.castType);
|
262
|
+
return new CastExpression(newInput, newCastType);
|
263
|
+
}
|
264
|
+
visitTypeValue(typeValue) {
|
265
|
+
const newArgument = typeValue.argument ? this.visit(typeValue.argument) : null;
|
266
|
+
return new TypeValue(typeValue.type.value, newArgument);
|
267
|
+
}
|
268
|
+
visitSelectItem(item) {
|
269
|
+
const newValue = this.visit(item.value);
|
270
|
+
return new SelectItem(newValue, item.identifier.name);
|
271
|
+
}
|
272
|
+
visitIdentifierString(ident) {
|
273
|
+
// Identifiers don't have child components, so just return as-is
|
274
|
+
return ident;
|
275
|
+
}
|
276
|
+
visitRawString(raw) {
|
277
|
+
// Raw strings don't have child components, so just return as-is
|
278
|
+
return raw;
|
279
|
+
}
|
280
|
+
visitColumnReference(column) {
|
281
|
+
// Column references don't have subqueries, so just return as-is
|
282
|
+
return column;
|
283
|
+
}
|
284
|
+
visitSourceExpression(source) {
|
285
|
+
const newSource = this.visit(source.datasource);
|
286
|
+
// SourceAliasEpression don't contain subqueries, so just return as-is
|
287
|
+
const newAlias = source.aliasExpression;
|
288
|
+
return new SourceExpression(newSource, newAlias);
|
289
|
+
}
|
290
|
+
visitTableSource(source) {
|
291
|
+
// Table sources don't contain subqueries, so just return as-is
|
292
|
+
return source;
|
293
|
+
}
|
294
|
+
visitParenSource(source) {
|
295
|
+
const newSource = this.visit(source.source);
|
296
|
+
return new ParenSource(newSource);
|
297
|
+
}
|
298
|
+
visitParameterExpression(param) {
|
299
|
+
// Parameter expressions don't have child components, so just return as-is
|
300
|
+
return param;
|
301
|
+
}
|
302
|
+
visitWindowFrameExpression(expr) {
|
303
|
+
const newPartition = expr.partition ? this.visit(expr.partition) : null;
|
304
|
+
const newOrder = expr.order ? this.visit(expr.order) : null;
|
305
|
+
const newFrameSpec = expr.frameSpec ? this.visit(expr.frameSpec) : null;
|
306
|
+
return new WindowFrameExpression(newPartition, newOrder, newFrameSpec);
|
307
|
+
}
|
308
|
+
visitWindowFrameSpec(spec) {
|
309
|
+
// WindowFrameSpec is a simple value object, so return as-is
|
310
|
+
return spec;
|
311
|
+
}
|
312
|
+
visitLiteralValue(value) {
|
313
|
+
// Literal values are returned as-is
|
314
|
+
return value;
|
315
|
+
}
|
316
|
+
visitOrderByItem(item) {
|
317
|
+
const newValue = this.visit(item.value);
|
318
|
+
return new OrderByItem(newValue, item.sortDirection, item.nullsPosition);
|
319
|
+
}
|
320
|
+
}
|
321
|
+
//# sourceMappingURL=CTEDisabler.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CTEDisabler.js","sourceRoot":"","sources":["../../../src/transformers/CTEDisabler.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import { BinarySelectQuery, SimpleSelectQuery } from "../models/SelectQuery";
|
2
|
+
import { CTECollector } from "./CTECollector";
|
3
|
+
import { CTEBuilder } from "./CTEBuilder";
|
4
|
+
/**
|
5
|
+
* CTEInjector accepts a SelectQuery object and an array of CommonTables,
|
6
|
+
* and inserts Common Table Expressions into the query.
|
7
|
+
* For BinarySelectQuery, CTEs are inserted into the left query.
|
8
|
+
*
|
9
|
+
* Uses CTENameConflictResolver to resolve naming conflicts between CTEs.
|
10
|
+
*/
|
11
|
+
export class CTEInjector {
|
12
|
+
constructor() {
|
13
|
+
this.nameConflictResolver = new CTEBuilder();
|
14
|
+
this.cteCollector = new CTECollector();
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* Inserts Common Table Expressions into a SelectQuery object.
|
18
|
+
*
|
19
|
+
* @param query The query to inject CTEs into
|
20
|
+
* @param commonTables Array of CommonTables to be inserted
|
21
|
+
* @returns A new query with the injected CTEs
|
22
|
+
*/
|
23
|
+
inject(query, commonTables) {
|
24
|
+
// If the array is empty, return the query as is
|
25
|
+
if (commonTables.length === 0) {
|
26
|
+
return query;
|
27
|
+
}
|
28
|
+
// Collect CTEs from the query
|
29
|
+
commonTables.push(...this.cteCollector.collect(query));
|
30
|
+
// Use CTENameConflictResolver to resolve duplicates and sort in appropriate order
|
31
|
+
const resolvedWithCaluse = this.nameConflictResolver.build(commonTables);
|
32
|
+
// Process based on query type
|
33
|
+
if (query instanceof SimpleSelectQuery) {
|
34
|
+
return this.injectIntoSimpleQuery(query, resolvedWithCaluse);
|
35
|
+
}
|
36
|
+
else if (query instanceof BinarySelectQuery) {
|
37
|
+
return this.injectIntoBinaryQuery(query, resolvedWithCaluse);
|
38
|
+
}
|
39
|
+
// Unsupported query type
|
40
|
+
throw new Error("Unsupported query type");
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* Inserts Common Table Expressions into a SimpleSelectQuery.
|
44
|
+
*
|
45
|
+
* @param query The SimpleSelectQuery to inject CTEs into
|
46
|
+
* @param commonTables Array of CommonTables to be inserted
|
47
|
+
* @param needRecursive Boolean indicating if recursive WITH clause is needed
|
48
|
+
* @returns A new SimpleSelectQuery with the injected CTEs
|
49
|
+
*/
|
50
|
+
injectIntoSimpleQuery(query, withClause) {
|
51
|
+
if (query.WithClause) {
|
52
|
+
throw new Error("The query already has a WITH clause. Please remove it before injecting new CTEs.");
|
53
|
+
}
|
54
|
+
// If the query doesn't have a WITH clause, set the new one
|
55
|
+
query.WithClause = withClause;
|
56
|
+
return query;
|
57
|
+
}
|
58
|
+
/**
|
59
|
+
* Inserts Common Table Expressions into the left query of a BinarySelectQuery.
|
60
|
+
*
|
61
|
+
* @param query The BinarySelectQuery to inject CTEs into
|
62
|
+
* @param commonTables Array of CommonTables to be inserted
|
63
|
+
* @param needRecursive Boolean indicating if recursive WITH clause is needed
|
64
|
+
* @returns A new BinarySelectQuery with the injected CTEs
|
65
|
+
*/
|
66
|
+
injectIntoBinaryQuery(query, withClause) {
|
67
|
+
// Insert CTEs into the left query
|
68
|
+
if (query.left instanceof SimpleSelectQuery) {
|
69
|
+
this.injectIntoSimpleQuery(query.left, withClause);
|
70
|
+
return query;
|
71
|
+
}
|
72
|
+
else if (query.left instanceof BinarySelectQuery) {
|
73
|
+
this.injectIntoBinaryQuery(query.left, withClause);
|
74
|
+
return query;
|
75
|
+
}
|
76
|
+
throw new Error("Unsupported query type for BinarySelectQuery left side");
|
77
|
+
}
|
78
|
+
}
|
79
|
+
//# sourceMappingURL=CTEInjector.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CTEInjector.js","sourceRoot":"","sources":["../../../src/transformers/CTEInjector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAe,iBAAiB,EAAe,MAAM,uBAAuB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IAIpB;QACI,IAAI,CAAC,oBAAoB,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAkB,EAAE,YAA2B;QACzD,gDAAgD;QAChD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,8BAA8B;QAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,kFAAkF;QAClF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAEzE,8BAA8B;QAC9B,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACjE,CAAC;QAED,yBAAyB;QACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB,CAAC,KAAwB,EAAE,UAAsB;QAC1E,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACxG,CAAC;QACD,2DAA2D;QAC3D,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB,CAAC,KAAwB,EAAE,UAAsB;QAC1E,kCAAkC;QAClC,IAAI,KAAK,CAAC,IAAI,YAAY,iBAAiB,EAAE,CAAC;YAC1C,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnD,OAAO,KAAK,CAAC;QACjB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,YAAY,iBAAiB,EAAE,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC9E,CAAC;CACJ"}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import { CTECollector } from "./CTECollector";
|
2
|
+
import { CTEDisabler } from "./CTEDisabler";
|
3
|
+
import { CTEInjector } from "./CTEInjector";
|
4
|
+
/**
|
5
|
+
* CTENormalizer is responsible for normalizing Common Table Expressions (CTEs) within SQL queries.
|
6
|
+
* It collects all CTEs from various parts of the query and consolidates them into a single WITH clause
|
7
|
+
* at the root level of the query.
|
8
|
+
*
|
9
|
+
* This implementation uses:
|
10
|
+
* 1. CommonTableCollector - to gather all CTEs from the query structure
|
11
|
+
* 2. WithClauseDisabler - to remove all original WITH clauses from the query
|
12
|
+
* 3. CTENameConflictResolver - to resolve name conflicts among CTEs and sort them properly
|
13
|
+
*/
|
14
|
+
export class CTENormalizer {
|
15
|
+
/**
|
16
|
+
* Private constructor to prevent instantiation of this utility class.
|
17
|
+
*/
|
18
|
+
constructor() {
|
19
|
+
// This class is not meant to be instantiated.
|
20
|
+
}
|
21
|
+
/**
|
22
|
+
* Normalizes a SQL query by consolidating all CTEs into a single WITH clause
|
23
|
+
* at the root level of the query.
|
24
|
+
*
|
25
|
+
* @param query The query to normalize
|
26
|
+
* @returns A new normalized query with all CTEs at the root level
|
27
|
+
*/
|
28
|
+
static normalize(query) {
|
29
|
+
// No need to normalize if the query doesn't have any CTEs
|
30
|
+
const cteCollector = new CTECollector();
|
31
|
+
const allCommonTables = cteCollector.collect(query);
|
32
|
+
if (allCommonTables.length === 0) {
|
33
|
+
return query;
|
34
|
+
}
|
35
|
+
// Remove all WITH clauses from the original query
|
36
|
+
const cteDisabler = new CTEDisabler();
|
37
|
+
cteDisabler.execute(query);
|
38
|
+
const injector = new CTEInjector();
|
39
|
+
return injector.inject(query, allCommonTables);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
//# sourceMappingURL=CTENormalizer.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"CTENormalizer.js","sourceRoot":"","sources":["../../../src/transformers/CTENormalizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IACtB;;OAEG;IACH;QACI,8CAA8C;IAClD,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,SAAS,CAAC,KAAkB;QACtC,0DAA0D;QAC1D,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,kDAAkD;QAClD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACnD,CAAC;CACJ"}
|