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