rawsql-ts 0.1.0-beta.4 → 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,249 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.SelectValueCollector = void 0;
|
4
|
+
const Clause_1 = require("../models/Clause");
|
5
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
6
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
7
|
+
const CTECollector_1 = require("./CTECollector");
|
8
|
+
/**
|
9
|
+
* A visitor that collects all SelectItem instances from a SQL query structure.
|
10
|
+
* This visitor scans through select clauses and collects all the SelectItem objects.
|
11
|
+
* It can also resolve wildcard selectors (table.* or *) using a provided table column resolver.
|
12
|
+
*/
|
13
|
+
class SelectValueCollector {
|
14
|
+
constructor(tableColumnResolver, initialCommonTables = null) {
|
15
|
+
this.selectValues = [];
|
16
|
+
this.visitedNodes = new Set();
|
17
|
+
this.isRootVisit = true;
|
18
|
+
this.tableColumnResolver = tableColumnResolver;
|
19
|
+
this.commonTableCollector = new CTECollector_1.CTECollector();
|
20
|
+
this.commonTables = [];
|
21
|
+
this.initialCommonTables = initialCommonTables;
|
22
|
+
this.handlers = new Map();
|
23
|
+
this.handlers.set(SelectQuery_1.SimpleSelectQuery.kind, (expr) => this.visitSimpleSelectQuery(expr));
|
24
|
+
this.handlers.set(Clause_1.SelectClause.kind, (expr) => this.visitSelectClause(expr));
|
25
|
+
this.handlers.set(Clause_1.SourceExpression.kind, (expr) => this.visitSourceExpression(expr));
|
26
|
+
this.handlers.set(Clause_1.FromClause.kind, (expr) => this.visitFromClause(expr));
|
27
|
+
}
|
28
|
+
/**
|
29
|
+
* Get all collected SelectItems as an array of objects with name and value properties
|
30
|
+
* @returns An array of objects with name (string) and value (ValueComponent) properties
|
31
|
+
*/
|
32
|
+
getValues() {
|
33
|
+
return this.selectValues;
|
34
|
+
}
|
35
|
+
/**
|
36
|
+
* Reset the collection of SelectItems
|
37
|
+
*/
|
38
|
+
reset() {
|
39
|
+
this.selectValues = [];
|
40
|
+
this.visitedNodes.clear();
|
41
|
+
if (this.initialCommonTables) {
|
42
|
+
this.commonTables = this.initialCommonTables;
|
43
|
+
}
|
44
|
+
else {
|
45
|
+
this.commonTables = [];
|
46
|
+
}
|
47
|
+
}
|
48
|
+
collect(arg) {
|
49
|
+
// Visit the component and return the collected select items
|
50
|
+
this.visit(arg);
|
51
|
+
const items = this.getValues();
|
52
|
+
this.reset(); // Reset after collection
|
53
|
+
return items;
|
54
|
+
}
|
55
|
+
/**
|
56
|
+
* Main entry point for the visitor pattern.
|
57
|
+
* Implements the shallow visit pattern to distinguish between root and recursive visits.
|
58
|
+
*/
|
59
|
+
visit(arg) {
|
60
|
+
// If not a root visit, just visit the node and return
|
61
|
+
if (!this.isRootVisit) {
|
62
|
+
this.visitNode(arg);
|
63
|
+
return;
|
64
|
+
}
|
65
|
+
// If this is a root visit, we need to reset the state
|
66
|
+
this.reset();
|
67
|
+
this.isRootVisit = false;
|
68
|
+
try {
|
69
|
+
this.visitNode(arg);
|
70
|
+
}
|
71
|
+
finally {
|
72
|
+
// Regardless of success or failure, reset the root visit flag
|
73
|
+
this.isRootVisit = true;
|
74
|
+
}
|
75
|
+
}
|
76
|
+
/**
|
77
|
+
* Internal visit method used for all nodes.
|
78
|
+
* This separates the visit flag management from the actual node visitation logic.
|
79
|
+
*/
|
80
|
+
visitNode(arg) {
|
81
|
+
// Skip if we've already visited this node to prevent infinite recursion
|
82
|
+
if (this.visitedNodes.has(arg)) {
|
83
|
+
return;
|
84
|
+
}
|
85
|
+
// Mark as visited
|
86
|
+
this.visitedNodes.add(arg);
|
87
|
+
const handler = this.handlers.get(arg.getKind());
|
88
|
+
if (handler) {
|
89
|
+
handler(arg);
|
90
|
+
return;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
/**
|
94
|
+
* Process a SimpleSelectQuery to collect data and store the current context
|
95
|
+
*/
|
96
|
+
visitSimpleSelectQuery(query) {
|
97
|
+
if (this.commonTables.length === 0 && this.initialCommonTables === null) {
|
98
|
+
this.commonTables = this.commonTableCollector.collect(query);
|
99
|
+
}
|
100
|
+
if (query.selectClause) {
|
101
|
+
query.selectClause.accept(this);
|
102
|
+
}
|
103
|
+
// no wildcard
|
104
|
+
const wildcards = this.selectValues.filter(item => item.name === '*');
|
105
|
+
if (wildcards.length === 0) {
|
106
|
+
return;
|
107
|
+
}
|
108
|
+
// full wildcard
|
109
|
+
if (this.selectValues.some(item => item.value instanceof ValueComponent_1.ColumnReference && item.value.namespaces === null)) {
|
110
|
+
if (query.fromClause) {
|
111
|
+
this.processFromClause(query.fromClause, true);
|
112
|
+
}
|
113
|
+
// remove wildcard
|
114
|
+
this.selectValues = this.selectValues.filter(item => item.name !== '*');
|
115
|
+
return;
|
116
|
+
}
|
117
|
+
;
|
118
|
+
// table wildcard
|
119
|
+
const wildSourceNames = wildcards.filter(item => item.value instanceof ValueComponent_1.ColumnReference && item.value.namespaces)
|
120
|
+
.map(item => item.value.getNamespace());
|
121
|
+
if (query.fromClause) {
|
122
|
+
const fromSourceName = query.fromClause.getAliasSourceName();
|
123
|
+
if (fromSourceName && wildSourceNames.includes(fromSourceName)) {
|
124
|
+
this.processFromClause(query.fromClause, false);
|
125
|
+
}
|
126
|
+
if (query.fromClause.joins) {
|
127
|
+
for (const join of query.fromClause.joins) {
|
128
|
+
const joinSourceName = join.getAliasSourceName();
|
129
|
+
if (joinSourceName && wildSourceNames.includes(joinSourceName)) {
|
130
|
+
this.processJoinClause(join);
|
131
|
+
}
|
132
|
+
}
|
133
|
+
}
|
134
|
+
}
|
135
|
+
// remove wildcard
|
136
|
+
this.selectValues = this.selectValues.filter(item => item.name !== '*');
|
137
|
+
return;
|
138
|
+
}
|
139
|
+
processFromClause(clause, joinCascade) {
|
140
|
+
if (clause) {
|
141
|
+
const fromSourceName = clause.getAliasSourceName();
|
142
|
+
this.processSourceExpression(fromSourceName, clause.source);
|
143
|
+
if (clause.joins && joinCascade) {
|
144
|
+
for (const join of clause.joins) {
|
145
|
+
this.processJoinClause(join);
|
146
|
+
}
|
147
|
+
}
|
148
|
+
}
|
149
|
+
return;
|
150
|
+
}
|
151
|
+
processJoinClause(clause) {
|
152
|
+
const sourceName = clause.getAliasSourceName();
|
153
|
+
this.processSourceExpression(sourceName, clause.source);
|
154
|
+
}
|
155
|
+
processSourceExpression(sourceName, source) {
|
156
|
+
// check common table
|
157
|
+
const commonTable = this.commonTables.find(item => item.aliasExpression.table.name === sourceName);
|
158
|
+
if (commonTable) {
|
159
|
+
// Exclude this CTE from consideration to prevent self-reference
|
160
|
+
const innerCommonTables = this.commonTables.filter(item => item.aliasExpression.table.name !== sourceName);
|
161
|
+
const innerCollector = new SelectValueCollector(this.tableColumnResolver, innerCommonTables);
|
162
|
+
const innerSelected = innerCollector.collect(commonTable.query);
|
163
|
+
innerSelected.forEach(item => {
|
164
|
+
this.addSelectValueAsUnique(item.name, new ValueComponent_1.ColumnReference(sourceName ? [sourceName] : null, item.name));
|
165
|
+
});
|
166
|
+
}
|
167
|
+
else {
|
168
|
+
const innerCollector = new SelectValueCollector(this.tableColumnResolver, this.commonTables);
|
169
|
+
const innerSelected = innerCollector.collect(source);
|
170
|
+
innerSelected.forEach(item => {
|
171
|
+
this.addSelectValueAsUnique(item.name, new ValueComponent_1.ColumnReference(sourceName ? [sourceName] : null, item.name));
|
172
|
+
});
|
173
|
+
}
|
174
|
+
}
|
175
|
+
visitSelectClause(clause) {
|
176
|
+
for (const item of clause.items) {
|
177
|
+
if (item instanceof Clause_1.SelectItem) {
|
178
|
+
this.processSelectItem(item); // Process SelectItem
|
179
|
+
}
|
180
|
+
else {
|
181
|
+
this.processValueComponent(item); // Process ValueComponent
|
182
|
+
}
|
183
|
+
}
|
184
|
+
}
|
185
|
+
processSelectItem(item) {
|
186
|
+
this.addSelectValueAsUnique(item.identifier.name, item.value);
|
187
|
+
}
|
188
|
+
processValueComponent(value) {
|
189
|
+
if (value instanceof ValueComponent_1.ColumnReference) { // Handle column reference
|
190
|
+
// columnName can be '*'
|
191
|
+
const columnName = value.column.name;
|
192
|
+
if (columnName === '*') {
|
193
|
+
// Force add without checking duplicates
|
194
|
+
this.selectValues.push({ name: columnName, value: value });
|
195
|
+
}
|
196
|
+
else {
|
197
|
+
// Add with duplicate checking
|
198
|
+
this.addSelectValueAsUnique(columnName, value);
|
199
|
+
}
|
200
|
+
}
|
201
|
+
}
|
202
|
+
visitSourceExpression(source) {
|
203
|
+
// Column aliases have the highest priority if present
|
204
|
+
// For physical tables, use external function to get column names
|
205
|
+
// For subqueries, instantiate a new collector and get column names from the subquery
|
206
|
+
// For parenthesized expressions, treat them the same as subqueries
|
207
|
+
if (source.aliasExpression && source.aliasExpression.columns) {
|
208
|
+
const sourceName = source.getAliasName();
|
209
|
+
source.aliasExpression.columns.forEach(column => {
|
210
|
+
this.addSelectValueAsUnique(column.name, new ValueComponent_1.ColumnReference(sourceName ? [sourceName] : null, column.name));
|
211
|
+
});
|
212
|
+
return;
|
213
|
+
}
|
214
|
+
else if (source.datasource instanceof Clause_1.TableSource) {
|
215
|
+
if (this.tableColumnResolver) {
|
216
|
+
const sourceName = source.datasource.getSourceName();
|
217
|
+
this.tableColumnResolver(sourceName).forEach(column => {
|
218
|
+
this.addSelectValueAsUnique(column, new ValueComponent_1.ColumnReference([sourceName], column));
|
219
|
+
});
|
220
|
+
}
|
221
|
+
return;
|
222
|
+
}
|
223
|
+
else if (source.datasource instanceof Clause_1.SubQuerySource) {
|
224
|
+
const sourceName = source.getAliasName();
|
225
|
+
const innerCollector = new SelectValueCollector(this.tableColumnResolver, this.commonTables);
|
226
|
+
const innerSelected = innerCollector.collect(source.datasource.query);
|
227
|
+
innerSelected.forEach(item => {
|
228
|
+
this.addSelectValueAsUnique(item.name, new ValueComponent_1.ColumnReference(sourceName ? [sourceName] : null, item.name));
|
229
|
+
});
|
230
|
+
return;
|
231
|
+
}
|
232
|
+
else if (source.datasource instanceof Clause_1.ParenSource) {
|
233
|
+
return this.visit(source.datasource.source);
|
234
|
+
}
|
235
|
+
}
|
236
|
+
visitFromClause(clause) {
|
237
|
+
if (clause) {
|
238
|
+
this.processFromClause(clause, true);
|
239
|
+
}
|
240
|
+
}
|
241
|
+
addSelectValueAsUnique(name, value) {
|
242
|
+
// Check if a select value with the same name already exists before adding
|
243
|
+
if (!this.selectValues.some(item => item.name === name)) {
|
244
|
+
this.selectValues.push({ name, value });
|
245
|
+
}
|
246
|
+
}
|
247
|
+
}
|
248
|
+
exports.SelectValueCollector = SelectValueCollector;
|
249
|
+
//# sourceMappingURL=SelectValueCollector.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SelectValueCollector.js","sourceRoot":"","sources":["../../src/transformers/SelectValueCollector.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,308 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.SelectableColumnCollector = void 0;
|
4
|
+
// filepath: c:\Users\mssgm\Documents\GitHub\carbunqlex-ts\src\visitors\ColumnReferenceCollector.ts
|
5
|
+
const Clause_1 = require("../models/Clause");
|
6
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
7
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
8
|
+
const CTECollector_1 = require("./CTECollector");
|
9
|
+
const Formatter_1 = require("./Formatter");
|
10
|
+
const SelectValueCollector_1 = require("./SelectValueCollector");
|
11
|
+
/**
|
12
|
+
* A visitor that collects all ColumnReference instances from a SQL query structure.
|
13
|
+
* This visitor scans through all clauses and collects all unique ColumnReference objects.
|
14
|
+
* It does not scan Common Table Expressions (CTEs) or subqueries.
|
15
|
+
*
|
16
|
+
* Important: Only collects column references to tables defined in the root FROM/JOIN clauses,
|
17
|
+
* as these are the only columns that can be directly referenced in the query.
|
18
|
+
*/
|
19
|
+
class SelectableColumnCollector {
|
20
|
+
constructor(tableColumnResolver) {
|
21
|
+
this.selectValues = [];
|
22
|
+
this.visitedNodes = new Set();
|
23
|
+
this.isRootVisit = true;
|
24
|
+
this.commonTables = [];
|
25
|
+
this.tableColumnResolver = tableColumnResolver;
|
26
|
+
this.selectValueCollector = new SelectValueCollector_1.SelectValueCollector();
|
27
|
+
this.commonTableCollector = new CTECollector_1.CTECollector();
|
28
|
+
this.commonTables = [];
|
29
|
+
this.formatter = new Formatter_1.Formatter();
|
30
|
+
this.handlers = new Map();
|
31
|
+
// Main entry point is the SimpleSelectQuery
|
32
|
+
this.handlers.set(SelectQuery_1.SimpleSelectQuery.kind, (expr) => this.visitSimpleSelectQuery(expr));
|
33
|
+
// Handlers for each clause type that might contain column references
|
34
|
+
this.handlers.set(Clause_1.SelectClause.kind, (expr) => this.visitSelectClause(expr));
|
35
|
+
this.handlers.set(Clause_1.FromClause.kind, (expr) => this.visitFromClause(expr));
|
36
|
+
this.handlers.set(Clause_1.WhereClause.kind, (expr) => this.visitWhereClause(expr));
|
37
|
+
this.handlers.set(Clause_1.GroupByClause.kind, (expr) => this.visitGroupByClause(expr));
|
38
|
+
this.handlers.set(Clause_1.HavingClause.kind, (expr) => this.visitHavingClause(expr));
|
39
|
+
this.handlers.set(Clause_1.OrderByClause.kind, (expr) => this.visitOrderByClause(expr));
|
40
|
+
this.handlers.set(Clause_1.WindowFrameClause.kind, (expr) => this.visitWindowFrameClause(expr));
|
41
|
+
this.handlers.set(Clause_1.LimitClause.kind, (expr) => this.visitLimitClause(expr));
|
42
|
+
// Add handlers for JOIN conditions
|
43
|
+
this.handlers.set(Clause_1.JoinOnClause.kind, (expr) => this.visitJoinOnClause(expr));
|
44
|
+
this.handlers.set(Clause_1.JoinUsingClause.kind, (expr) => this.visitJoinUsingClause(expr));
|
45
|
+
// For value components that might contain column references
|
46
|
+
this.handlers.set(ValueComponent_1.ColumnReference.kind, (expr) => this.visitColumnReference(expr));
|
47
|
+
this.handlers.set(ValueComponent_1.BinaryExpression.kind, (expr) => this.visitBinaryExpression(expr));
|
48
|
+
this.handlers.set(ValueComponent_1.UnaryExpression.kind, (expr) => this.visitUnaryExpression(expr));
|
49
|
+
this.handlers.set(ValueComponent_1.FunctionCall.kind, (expr) => this.visitFunctionCall(expr));
|
50
|
+
this.handlers.set(ValueComponent_1.ParenExpression.kind, (expr) => this.visitParenExpression(expr));
|
51
|
+
this.handlers.set(ValueComponent_1.CaseExpression.kind, (expr) => this.visitCaseExpression(expr));
|
52
|
+
this.handlers.set(ValueComponent_1.CastExpression.kind, (expr) => this.visitCastExpression(expr));
|
53
|
+
this.handlers.set(ValueComponent_1.BetweenExpression.kind, (expr) => this.visitBetweenExpression(expr));
|
54
|
+
this.handlers.set(ValueComponent_1.ArrayExpression.kind, (expr) => this.visitArrayExpression(expr));
|
55
|
+
this.handlers.set(ValueComponent_1.ValueList.kind, (expr) => this.visitValueList(expr));
|
56
|
+
}
|
57
|
+
getValues() {
|
58
|
+
return this.selectValues;
|
59
|
+
}
|
60
|
+
collect(arg) {
|
61
|
+
// Visit the component and return the collected select items
|
62
|
+
this.visit(arg);
|
63
|
+
const items = this.getValues();
|
64
|
+
this.reset(); // Reset after collection
|
65
|
+
return items;
|
66
|
+
}
|
67
|
+
/**
|
68
|
+
* Reset the collection of ColumnReferences
|
69
|
+
*/
|
70
|
+
reset() {
|
71
|
+
this.selectValues = [];
|
72
|
+
this.visitedNodes.clear();
|
73
|
+
this.commonTables = [];
|
74
|
+
}
|
75
|
+
addSelectValueAsUnique(name, value) {
|
76
|
+
// Check if a select value with the same name already exists before adding
|
77
|
+
if (!this.selectValues.some(item => item.name === name)) {
|
78
|
+
this.selectValues.push({ name, value });
|
79
|
+
}
|
80
|
+
}
|
81
|
+
/**
|
82
|
+
* Main entry point for the visitor pattern.
|
83
|
+
* Implements the shallow visit pattern to distinguish between root and recursive visits.
|
84
|
+
*/
|
85
|
+
visit(arg) {
|
86
|
+
// If not a root visit, just visit the node and return
|
87
|
+
if (!this.isRootVisit) {
|
88
|
+
this.visitNode(arg);
|
89
|
+
return;
|
90
|
+
}
|
91
|
+
if (!(arg instanceof SelectQuery_1.SimpleSelectQuery)) {
|
92
|
+
throw new Error("Root visit must be a SimpleSelectQuery");
|
93
|
+
}
|
94
|
+
// If this is a root visit, we need to reset the state
|
95
|
+
this.reset();
|
96
|
+
this.isRootVisit = false;
|
97
|
+
this.commonTables = this.commonTableCollector.collect(arg);
|
98
|
+
try {
|
99
|
+
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
|
+
// Skip if we've already visited this node to prevent infinite recursion
|
112
|
+
if (this.visitedNodes.has(arg)) {
|
113
|
+
return;
|
114
|
+
}
|
115
|
+
// Mark as visited
|
116
|
+
this.visitedNodes.add(arg);
|
117
|
+
const handler = this.handlers.get(arg.getKind());
|
118
|
+
if (handler) {
|
119
|
+
handler(arg);
|
120
|
+
return;
|
121
|
+
}
|
122
|
+
// For any other component types, we don't need to do anything
|
123
|
+
}
|
124
|
+
/**
|
125
|
+
* Process a SimpleSelectQuery to collect ColumnReferences from all its clauses
|
126
|
+
*/
|
127
|
+
visitSimpleSelectQuery(query) {
|
128
|
+
// Visit all clauses that might contain column references
|
129
|
+
if (query.selectClause) {
|
130
|
+
query.selectClause.accept(this);
|
131
|
+
}
|
132
|
+
if (query.fromClause) {
|
133
|
+
query.fromClause.accept(this);
|
134
|
+
}
|
135
|
+
if (query.whereClause) {
|
136
|
+
query.whereClause.accept(this);
|
137
|
+
}
|
138
|
+
if (query.groupByClause) {
|
139
|
+
query.groupByClause.accept(this);
|
140
|
+
}
|
141
|
+
if (query.havingClause) {
|
142
|
+
query.havingClause.accept(this);
|
143
|
+
}
|
144
|
+
if (query.windowFrameClause) {
|
145
|
+
query.windowFrameClause.accept(this);
|
146
|
+
}
|
147
|
+
if (query.orderByClause) {
|
148
|
+
query.orderByClause.accept(this);
|
149
|
+
}
|
150
|
+
if (query.rowLimitClause) {
|
151
|
+
query.rowLimitClause.accept(this);
|
152
|
+
}
|
153
|
+
if (query.forClause) {
|
154
|
+
query.forClause.accept(this);
|
155
|
+
}
|
156
|
+
// Explicitly NOT processing query.WithClause to avoid scanning CTEs
|
157
|
+
}
|
158
|
+
// Clause handlers
|
159
|
+
visitSelectClause(clause) {
|
160
|
+
if (clause.items) {
|
161
|
+
for (const item of clause.items) {
|
162
|
+
if (item instanceof Clause_1.SelectItem) {
|
163
|
+
this.addSelectValueAsUnique(item.identifier.name, item.value);
|
164
|
+
}
|
165
|
+
else {
|
166
|
+
item.accept(this);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
}
|
170
|
+
}
|
171
|
+
visitFromClause(clause) {
|
172
|
+
// import source values
|
173
|
+
const collector = new SelectValueCollector_1.SelectValueCollector(this.tableColumnResolver, this.commonTables);
|
174
|
+
const sourceValues = collector.collect(clause);
|
175
|
+
for (const item of sourceValues) {
|
176
|
+
// Add the select value as unique to avoid duplicates
|
177
|
+
this.addSelectValueAsUnique(item.name, item.value);
|
178
|
+
}
|
179
|
+
if (clause.joins) {
|
180
|
+
for (const join of clause.joins) {
|
181
|
+
if (join.condition) {
|
182
|
+
join.condition.accept(this);
|
183
|
+
}
|
184
|
+
}
|
185
|
+
}
|
186
|
+
}
|
187
|
+
visitWhereClause(clause) {
|
188
|
+
if (clause.condition) {
|
189
|
+
clause.condition.accept(this);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
visitGroupByClause(clause) {
|
193
|
+
if (clause.grouping) {
|
194
|
+
for (const item of clause.grouping) {
|
195
|
+
item.accept(this);
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
visitHavingClause(clause) {
|
200
|
+
if (clause.condition) {
|
201
|
+
clause.condition.accept(this);
|
202
|
+
}
|
203
|
+
}
|
204
|
+
visitOrderByClause(clause) {
|
205
|
+
if (clause.order) {
|
206
|
+
for (const item of clause.order) {
|
207
|
+
item.accept(this);
|
208
|
+
}
|
209
|
+
}
|
210
|
+
}
|
211
|
+
visitWindowFrameClause(clause) {
|
212
|
+
if (clause.expression) {
|
213
|
+
clause.expression.accept(this);
|
214
|
+
}
|
215
|
+
}
|
216
|
+
visitLimitClause(clause) {
|
217
|
+
if (clause.limit) {
|
218
|
+
clause.limit.accept(this);
|
219
|
+
}
|
220
|
+
if (clause.offset) {
|
221
|
+
clause.offset.accept(this);
|
222
|
+
}
|
223
|
+
}
|
224
|
+
visitJoinOnClause(joinOnClause) {
|
225
|
+
// Visit the join condition
|
226
|
+
if (joinOnClause.condition) {
|
227
|
+
joinOnClause.condition.accept(this);
|
228
|
+
}
|
229
|
+
}
|
230
|
+
visitJoinUsingClause(joinUsingClause) {
|
231
|
+
// Visit the columns in the USING clause
|
232
|
+
if (joinUsingClause.condition) {
|
233
|
+
joinUsingClause.condition.accept(this);
|
234
|
+
}
|
235
|
+
}
|
236
|
+
// Value component handlers
|
237
|
+
visitColumnReference(columnRef) {
|
238
|
+
// Wildcards are ignored because they cannot be reused even if detected
|
239
|
+
if (columnRef.column.name !== "*") {
|
240
|
+
this.addSelectValueAsUnique(columnRef.column.name, columnRef);
|
241
|
+
}
|
242
|
+
}
|
243
|
+
visitBinaryExpression(expr) {
|
244
|
+
// Visit both sides of the expression
|
245
|
+
if (expr.left) {
|
246
|
+
expr.left.accept(this);
|
247
|
+
}
|
248
|
+
if (expr.right) {
|
249
|
+
expr.right.accept(this);
|
250
|
+
}
|
251
|
+
}
|
252
|
+
visitUnaryExpression(expr) {
|
253
|
+
if (expr.expression) {
|
254
|
+
expr.expression.accept(this);
|
255
|
+
}
|
256
|
+
}
|
257
|
+
visitFunctionCall(func) {
|
258
|
+
if (func.argument) {
|
259
|
+
func.argument.accept(this);
|
260
|
+
}
|
261
|
+
if (func.over) {
|
262
|
+
func.over.accept(this);
|
263
|
+
}
|
264
|
+
}
|
265
|
+
visitParenExpression(expr) {
|
266
|
+
if (expr.expression) {
|
267
|
+
expr.expression.accept(this);
|
268
|
+
}
|
269
|
+
}
|
270
|
+
visitCaseExpression(expr) {
|
271
|
+
if (expr.condition) {
|
272
|
+
expr.condition.accept(this);
|
273
|
+
}
|
274
|
+
if (expr.switchCase) {
|
275
|
+
expr.switchCase.accept(this);
|
276
|
+
}
|
277
|
+
}
|
278
|
+
visitCastExpression(expr) {
|
279
|
+
if (expr.input) {
|
280
|
+
expr.input.accept(this);
|
281
|
+
}
|
282
|
+
}
|
283
|
+
visitBetweenExpression(expr) {
|
284
|
+
if (expr.expression) {
|
285
|
+
expr.expression.accept(this);
|
286
|
+
}
|
287
|
+
if (expr.lower) {
|
288
|
+
expr.lower.accept(this);
|
289
|
+
}
|
290
|
+
if (expr.upper) {
|
291
|
+
expr.upper.accept(this);
|
292
|
+
}
|
293
|
+
}
|
294
|
+
visitArrayExpression(expr) {
|
295
|
+
if (expr.expression) {
|
296
|
+
expr.expression.accept(this);
|
297
|
+
}
|
298
|
+
}
|
299
|
+
visitValueList(expr) {
|
300
|
+
if (expr.values) {
|
301
|
+
for (const value of expr.values) {
|
302
|
+
value.accept(this);
|
303
|
+
}
|
304
|
+
}
|
305
|
+
}
|
306
|
+
}
|
307
|
+
exports.SelectableColumnCollector = SelectableColumnCollector;
|
308
|
+
//# sourceMappingURL=SelectableColumnCollector.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SelectableColumnCollector.js","sourceRoot":"","sources":["../../src/transformers/SelectableColumnCollector.ts"],"names":[],"mappings":"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"}
|