rawsql-ts 0.11.18-beta → 0.11.20-beta

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.
Files changed (34) hide show
  1. package/README.md +62 -0
  2. package/dist/esm/index.js +3 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/index.min.js +25 -25
  5. package/dist/esm/index.min.js.map +4 -4
  6. package/dist/esm/src/index.d.ts +3 -0
  7. package/dist/esm/src/index.js +3 -0
  8. package/dist/esm/src/index.js.map +1 -1
  9. package/dist/esm/src/transformers/CTERenamer.d.ts +144 -0
  10. package/dist/esm/src/transformers/CTERenamer.js +342 -0
  11. package/dist/esm/src/transformers/CTERenamer.js.map +1 -0
  12. package/dist/esm/src/transformers/ColumnReferenceCollector.d.ts +162 -0
  13. package/dist/esm/src/transformers/ColumnReferenceCollector.js +464 -0
  14. package/dist/esm/src/transformers/ColumnReferenceCollector.js.map +1 -0
  15. package/dist/esm/src/transformers/SelectableColumnCollector.d.ts +94 -9
  16. package/dist/esm/src/transformers/SelectableColumnCollector.js +227 -40
  17. package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
  18. package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
  19. package/dist/index.min.js +25 -25
  20. package/dist/index.min.js.map +4 -4
  21. package/dist/src/index.d.ts +3 -0
  22. package/dist/src/index.js +5 -1
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/transformers/CTERenamer.d.ts +144 -0
  25. package/dist/src/transformers/CTERenamer.js +346 -0
  26. package/dist/src/transformers/CTERenamer.js.map +1 -0
  27. package/dist/src/transformers/ColumnReferenceCollector.d.ts +162 -0
  28. package/dist/src/transformers/ColumnReferenceCollector.js +468 -0
  29. package/dist/src/transformers/ColumnReferenceCollector.js.map +1 -0
  30. package/dist/src/transformers/SelectableColumnCollector.d.ts +94 -9
  31. package/dist/src/transformers/SelectableColumnCollector.js +225 -38
  32. package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,162 @@
1
+ import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
2
+ import { ColumnReference } from "../models/ValueComponent";
3
+ /**
4
+ * A comprehensive collector for all ColumnReference instances in SQL query structures.
5
+ *
6
+ * This collector extends beyond the capabilities of SelectableColumnCollector by traversing
7
+ * CTE internal queries, subqueries, and all nested SQL components to collect every column
8
+ * reference instance in the query tree. It's specifically designed for transformation
9
+ * scenarios where all column references need to be identified and potentially modified.
10
+ *
11
+ * ## Key Differences from SelectableColumnCollector
12
+ *
13
+ * | Feature | SelectableColumnCollector | ColumnReferenceCollector |
14
+ * |---------|---------------------------|---------------------------|
15
+ * | CTE Internal Scanning | ❌ Skipped | ✅ Included |
16
+ * | Subquery Traversal | ❌ Limited | ✅ Comprehensive |
17
+ * | Deduplication | ✅ Yes | ❌ No (preserves all instances) |
18
+ * | Use Case | Column selection analysis | Column reference transformation |
19
+ *
20
+ * ## Supported Query Types
21
+ *
22
+ * - **SimpleSelectQuery**: Standard SELECT statements with all clauses
23
+ * - **BinarySelectQuery**: UNION, INTERSECT, EXCEPT operations
24
+ * - **Nested CTEs**: WITH clauses and their internal queries
25
+ * - **Subqueries**: All subquery types in FROM, WHERE, SELECT clauses
26
+ * - **Complex Expressions**: CASE, functions, binary operations, etc.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * import { ColumnReferenceCollector, SelectQueryParser } from 'rawsql-ts';
31
+ *
32
+ * const sql = `
33
+ * WITH user_data AS (
34
+ * SELECT id, name FROM users WHERE status = 'active'
35
+ * ),
36
+ * order_summary AS (
37
+ * SELECT user_data.id, COUNT(*) as order_count
38
+ * FROM user_data
39
+ * JOIN orders ON user_data.id = orders.user_id
40
+ * GROUP BY user_data.id
41
+ * )
42
+ * SELECT * FROM order_summary
43
+ * `;
44
+ *
45
+ * const query = SelectQueryParser.parse(sql);
46
+ * const collector = new ColumnReferenceCollector();
47
+ * const columnRefs = collector.collect(query);
48
+ *
49
+ * console.log(`Found ${columnRefs.length} column references:`);
50
+ * columnRefs.forEach(ref => {
51
+ * const tableName = ref.namespaces?.[0]?.name || 'NO_TABLE';
52
+ * console.log(`- ${tableName}.${ref.column.name}`);
53
+ * });
54
+ *
55
+ * // Output includes references from:
56
+ * // - CTE definitions: users.id, users.name, users.status
57
+ * // - Main query: user_data.id, orders.user_id, etc.
58
+ * ```
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * // Use for column reference transformation
63
+ * const columnRefs = collector.collect(query);
64
+ *
65
+ * // Update all references to 'old_table' to 'new_table'
66
+ * columnRefs.forEach(ref => {
67
+ * if (ref.namespaces?.[0]?.name === 'old_table') {
68
+ * ref.namespaces[0].name = 'new_table';
69
+ * }
70
+ * });
71
+ * ```
72
+ *
73
+ * @since 0.11.16
74
+ */
75
+ export declare class ColumnReferenceCollector implements SqlComponentVisitor<void> {
76
+ private handlers;
77
+ private columnReferences;
78
+ private visitedNodes;
79
+ constructor();
80
+ /**
81
+ * Collects all ColumnReference instances from the given SQL query component.
82
+ *
83
+ * This method performs a comprehensive traversal of the entire query structure,
84
+ * including CTE definitions, subqueries, and all expression types to collect
85
+ * every ColumnReference instance. The returned references are actual instances
86
+ * from the query tree, allowing for direct modification.
87
+ *
88
+ * @param query - The SQL query component to analyze. Can be SimpleSelectQuery, BinarySelectQuery, or any SqlComponent.
89
+ * @returns An array of all ColumnReference instances found in the query. Each reference maintains its original object identity for modification purposes.
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * const collector = new ColumnReferenceCollector();
94
+ * const columnRefs = collector.collect(query);
95
+ *
96
+ * // Analyze collected references
97
+ * const tableReferences = new Map<string, number>();
98
+ * columnRefs.forEach(ref => {
99
+ * const tableName = ref.namespaces?.[0]?.name || 'unqualified';
100
+ * tableReferences.set(tableName, (tableReferences.get(tableName) || 0) + 1);
101
+ * });
102
+ *
103
+ * console.log('Table reference counts:', tableReferences);
104
+ * ```
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * // Transform references during collection
109
+ * const columnRefs = collector.collect(query);
110
+ *
111
+ * // Replace all references to 'old_schema.table' with 'new_schema.table'
112
+ * columnRefs.forEach(ref => {
113
+ * if (ref.namespaces?.length === 2 &&
114
+ * ref.namespaces[0].name === 'old_schema' &&
115
+ * ref.namespaces[1].name === 'table') {
116
+ * ref.namespaces[0].name = 'new_schema';
117
+ * }
118
+ * });
119
+ * ```
120
+ *
121
+ * @since 0.11.16
122
+ */
123
+ collect(query: SqlComponent): ColumnReference[];
124
+ private collectFromSimpleQuery;
125
+ private collectFromSelectClause;
126
+ private collectFromFromClause;
127
+ private collectFromSourceExpression;
128
+ private collectFromValueComponent;
129
+ visit(component: SqlComponent): void;
130
+ private visitSimpleSelectQuery;
131
+ private visitWithClause;
132
+ private visitCommonTable;
133
+ private visitSelectClause;
134
+ private visitFromClause;
135
+ private visitWhereClause;
136
+ private visitGroupByClause;
137
+ private visitHavingClause;
138
+ private visitOrderByClause;
139
+ private visitWindowsClause;
140
+ private visitLimitClause;
141
+ private visitOffsetClause;
142
+ private visitFetchClause;
143
+ private visitForClause;
144
+ private visitJoinClause;
145
+ private visitJoinOnClause;
146
+ private visitJoinUsingClause;
147
+ private visitSourceExpression;
148
+ private visitSubQuerySource;
149
+ private visitColumnReference;
150
+ private visitBinaryExpression;
151
+ private visitUnaryExpression;
152
+ private visitFunctionCall;
153
+ private visitCaseExpression;
154
+ private visitCastExpression;
155
+ private visitBetweenExpression;
156
+ private visitParenExpression;
157
+ private visitInlineQuery;
158
+ private visitArrayExpression;
159
+ private visitArrayQueryExpression;
160
+ private visitValueList;
161
+ private visitWindowFrameExpression;
162
+ }
@@ -0,0 +1,464 @@
1
+ import { CommonTable, ForClause, FromClause, GroupByClause, HavingClause, LimitClause, OrderByClause, SelectClause, WhereClause, WindowsClause, JoinClause, JoinOnClause, JoinUsingClause, SubQuerySource, SourceExpression, FetchClause, OffsetClause, WithClause } from "../models/Clause";
2
+ import { SimpleSelectQuery, BinarySelectQuery } from "../models/SelectQuery";
3
+ import { ArrayExpression, ArrayQueryExpression, BetweenExpression, BinaryExpression, CaseExpression, CastExpression, ColumnReference, FunctionCall, InlineQuery, ParenExpression, UnaryExpression, ValueList, WindowFrameExpression } from "../models/ValueComponent";
4
+ /**
5
+ * A comprehensive collector for all ColumnReference instances in SQL query structures.
6
+ *
7
+ * This collector extends beyond the capabilities of SelectableColumnCollector by traversing
8
+ * CTE internal queries, subqueries, and all nested SQL components to collect every column
9
+ * reference instance in the query tree. It's specifically designed for transformation
10
+ * scenarios where all column references need to be identified and potentially modified.
11
+ *
12
+ * ## Key Differences from SelectableColumnCollector
13
+ *
14
+ * | Feature | SelectableColumnCollector | ColumnReferenceCollector |
15
+ * |---------|---------------------------|---------------------------|
16
+ * | CTE Internal Scanning | ❌ Skipped | ✅ Included |
17
+ * | Subquery Traversal | ❌ Limited | ✅ Comprehensive |
18
+ * | Deduplication | ✅ Yes | ❌ No (preserves all instances) |
19
+ * | Use Case | Column selection analysis | Column reference transformation |
20
+ *
21
+ * ## Supported Query Types
22
+ *
23
+ * - **SimpleSelectQuery**: Standard SELECT statements with all clauses
24
+ * - **BinarySelectQuery**: UNION, INTERSECT, EXCEPT operations
25
+ * - **Nested CTEs**: WITH clauses and their internal queries
26
+ * - **Subqueries**: All subquery types in FROM, WHERE, SELECT clauses
27
+ * - **Complex Expressions**: CASE, functions, binary operations, etc.
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * import { ColumnReferenceCollector, SelectQueryParser } from 'rawsql-ts';
32
+ *
33
+ * const sql = `
34
+ * WITH user_data AS (
35
+ * SELECT id, name FROM users WHERE status = 'active'
36
+ * ),
37
+ * order_summary AS (
38
+ * SELECT user_data.id, COUNT(*) as order_count
39
+ * FROM user_data
40
+ * JOIN orders ON user_data.id = orders.user_id
41
+ * GROUP BY user_data.id
42
+ * )
43
+ * SELECT * FROM order_summary
44
+ * `;
45
+ *
46
+ * const query = SelectQueryParser.parse(sql);
47
+ * const collector = new ColumnReferenceCollector();
48
+ * const columnRefs = collector.collect(query);
49
+ *
50
+ * console.log(`Found ${columnRefs.length} column references:`);
51
+ * columnRefs.forEach(ref => {
52
+ * const tableName = ref.namespaces?.[0]?.name || 'NO_TABLE';
53
+ * console.log(`- ${tableName}.${ref.column.name}`);
54
+ * });
55
+ *
56
+ * // Output includes references from:
57
+ * // - CTE definitions: users.id, users.name, users.status
58
+ * // - Main query: user_data.id, orders.user_id, etc.
59
+ * ```
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * // Use for column reference transformation
64
+ * const columnRefs = collector.collect(query);
65
+ *
66
+ * // Update all references to 'old_table' to 'new_table'
67
+ * columnRefs.forEach(ref => {
68
+ * if (ref.namespaces?.[0]?.name === 'old_table') {
69
+ * ref.namespaces[0].name = 'new_table';
70
+ * }
71
+ * });
72
+ * ```
73
+ *
74
+ * @since 0.11.16
75
+ */
76
+ export class ColumnReferenceCollector {
77
+ constructor() {
78
+ this.columnReferences = [];
79
+ this.visitedNodes = new Set();
80
+ this.handlers = new Map();
81
+ // Note: We don't handle SimpleSelectQuery/BinarySelectQuery here as they're handled directly in collect()
82
+ // Clause handlers
83
+ this.handlers.set(WithClause.kind, (clause) => this.visitWithClause(clause));
84
+ this.handlers.set(CommonTable.kind, (table) => this.visitCommonTable(table));
85
+ this.handlers.set(SelectClause.kind, (clause) => this.visitSelectClause(clause));
86
+ this.handlers.set(FromClause.kind, (clause) => this.visitFromClause(clause));
87
+ this.handlers.set(WhereClause.kind, (clause) => this.visitWhereClause(clause));
88
+ this.handlers.set(GroupByClause.kind, (clause) => this.visitGroupByClause(clause));
89
+ this.handlers.set(HavingClause.kind, (clause) => this.visitHavingClause(clause));
90
+ this.handlers.set(OrderByClause.kind, (clause) => this.visitOrderByClause(clause));
91
+ this.handlers.set(WindowsClause.kind, (clause) => this.visitWindowsClause(clause));
92
+ this.handlers.set(LimitClause.kind, (clause) => this.visitLimitClause(clause));
93
+ this.handlers.set(OffsetClause.kind, (clause) => this.visitOffsetClause(clause));
94
+ this.handlers.set(FetchClause.kind, (clause) => this.visitFetchClause(clause));
95
+ this.handlers.set(ForClause.kind, (clause) => this.visitForClause(clause));
96
+ // JOIN handlers
97
+ this.handlers.set(JoinClause.kind, (clause) => this.visitJoinClause(clause));
98
+ this.handlers.set(JoinOnClause.kind, (clause) => this.visitJoinOnClause(clause));
99
+ this.handlers.set(JoinUsingClause.kind, (clause) => this.visitJoinUsingClause(clause));
100
+ // Source handlers
101
+ this.handlers.set(SourceExpression.kind, (source) => this.visitSourceExpression(source));
102
+ this.handlers.set(SubQuerySource.kind, (source) => this.visitSubQuerySource(source));
103
+ // Value component handlers
104
+ this.handlers.set(ColumnReference.kind, (ref) => this.visitColumnReference(ref));
105
+ this.handlers.set(BinaryExpression.kind, (expr) => this.visitBinaryExpression(expr));
106
+ this.handlers.set(UnaryExpression.kind, (expr) => this.visitUnaryExpression(expr));
107
+ this.handlers.set(FunctionCall.kind, (func) => this.visitFunctionCall(func));
108
+ this.handlers.set(CaseExpression.kind, (expr) => this.visitCaseExpression(expr));
109
+ this.handlers.set(CastExpression.kind, (expr) => this.visitCastExpression(expr));
110
+ this.handlers.set(BetweenExpression.kind, (expr) => this.visitBetweenExpression(expr));
111
+ this.handlers.set(ParenExpression.kind, (expr) => this.visitParenExpression(expr));
112
+ this.handlers.set(InlineQuery.kind, (query) => this.visitInlineQuery(query));
113
+ this.handlers.set(ArrayExpression.kind, (expr) => this.visitArrayExpression(expr));
114
+ this.handlers.set(ArrayQueryExpression.kind, (expr) => this.visitArrayQueryExpression(expr));
115
+ this.handlers.set(ValueList.kind, (list) => this.visitValueList(list));
116
+ this.handlers.set(WindowFrameExpression.kind, (expr) => this.visitWindowFrameExpression(expr));
117
+ }
118
+ /**
119
+ * Collects all ColumnReference instances from the given SQL query component.
120
+ *
121
+ * This method performs a comprehensive traversal of the entire query structure,
122
+ * including CTE definitions, subqueries, and all expression types to collect
123
+ * every ColumnReference instance. The returned references are actual instances
124
+ * from the query tree, allowing for direct modification.
125
+ *
126
+ * @param query - The SQL query component to analyze. Can be SimpleSelectQuery, BinarySelectQuery, or any SqlComponent.
127
+ * @returns An array of all ColumnReference instances found in the query. Each reference maintains its original object identity for modification purposes.
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * const collector = new ColumnReferenceCollector();
132
+ * const columnRefs = collector.collect(query);
133
+ *
134
+ * // Analyze collected references
135
+ * const tableReferences = new Map<string, number>();
136
+ * columnRefs.forEach(ref => {
137
+ * const tableName = ref.namespaces?.[0]?.name || 'unqualified';
138
+ * tableReferences.set(tableName, (tableReferences.get(tableName) || 0) + 1);
139
+ * });
140
+ *
141
+ * console.log('Table reference counts:', tableReferences);
142
+ * ```
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * // Transform references during collection
147
+ * const columnRefs = collector.collect(query);
148
+ *
149
+ * // Replace all references to 'old_schema.table' with 'new_schema.table'
150
+ * columnRefs.forEach(ref => {
151
+ * if (ref.namespaces?.length === 2 &&
152
+ * ref.namespaces[0].name === 'old_schema' &&
153
+ * ref.namespaces[1].name === 'table') {
154
+ * ref.namespaces[0].name = 'new_schema';
155
+ * }
156
+ * });
157
+ * ```
158
+ *
159
+ * @since 0.11.16
160
+ */
161
+ collect(query) {
162
+ this.columnReferences = [];
163
+ this.visitedNodes.clear();
164
+ // Handle queries directly - bypass visitor pattern issues
165
+ if (query instanceof SimpleSelectQuery) {
166
+ this.collectFromSimpleQuery(query);
167
+ }
168
+ else if (query instanceof BinarySelectQuery) {
169
+ // Convert BinarySelectQuery to SimpleSelectQuery for consistent handling
170
+ this.collectFromSimpleQuery(query.toSimpleQuery());
171
+ }
172
+ else {
173
+ query.accept(this);
174
+ }
175
+ return [...this.columnReferences];
176
+ }
177
+ collectFromSimpleQuery(query) {
178
+ // First collect from CTEs (this is the key difference from SelectableColumnCollector)
179
+ if (query.withClause && query.withClause.tables) {
180
+ for (const cte of query.withClause.tables) {
181
+ this.collectFromSimpleQuery(cte.query);
182
+ }
183
+ }
184
+ // Then collect from main query clauses
185
+ this.collectFromSelectClause(query.selectClause);
186
+ if (query.fromClause)
187
+ this.collectFromFromClause(query.fromClause);
188
+ if (query.whereClause)
189
+ this.collectFromValueComponent(query.whereClause.condition);
190
+ if (query.groupByClause && query.groupByClause.grouping) {
191
+ for (const item of query.groupByClause.grouping) {
192
+ this.collectFromValueComponent(item);
193
+ }
194
+ }
195
+ if (query.havingClause)
196
+ this.collectFromValueComponent(query.havingClause.condition);
197
+ if (query.orderByClause && query.orderByClause.order) {
198
+ for (const item of query.orderByClause.order) {
199
+ if (typeof item === 'object' && 'value' in item && item.value) {
200
+ this.collectFromValueComponent(item.value);
201
+ }
202
+ else {
203
+ this.collectFromValueComponent(item);
204
+ }
205
+ }
206
+ }
207
+ }
208
+ collectFromSelectClause(clause) {
209
+ for (const item of clause.items) {
210
+ this.collectFromValueComponent(item.value);
211
+ }
212
+ }
213
+ collectFromFromClause(clause) {
214
+ this.collectFromSourceExpression(clause.source);
215
+ if (clause.joins) {
216
+ for (const join of clause.joins) {
217
+ this.collectFromSourceExpression(join.source);
218
+ if (join.condition) {
219
+ this.collectFromValueComponent(join.condition.condition);
220
+ }
221
+ }
222
+ }
223
+ }
224
+ collectFromSourceExpression(source) {
225
+ if (source.datasource instanceof SubQuerySource) {
226
+ if (source.datasource.query instanceof SimpleSelectQuery) {
227
+ this.collectFromSimpleQuery(source.datasource.query);
228
+ }
229
+ else if (source.datasource.query instanceof BinarySelectQuery) {
230
+ this.collectFromSimpleQuery(source.datasource.query.toSimpleQuery());
231
+ }
232
+ }
233
+ }
234
+ collectFromValueComponent(value) {
235
+ if (value instanceof ColumnReference) {
236
+ this.columnReferences.push(value);
237
+ }
238
+ else if (value instanceof BinaryExpression) {
239
+ this.collectFromValueComponent(value.left);
240
+ this.collectFromValueComponent(value.right);
241
+ }
242
+ else if (value instanceof UnaryExpression) {
243
+ this.collectFromValueComponent(value.expression);
244
+ }
245
+ else if (value instanceof FunctionCall && value.argument) {
246
+ this.collectFromValueComponent(value.argument);
247
+ }
248
+ else if (value instanceof CaseExpression) {
249
+ if (value.condition)
250
+ this.collectFromValueComponent(value.condition);
251
+ if (value.switchCase && value.switchCase.cases) {
252
+ for (const pair of value.switchCase.cases) {
253
+ this.collectFromValueComponent(pair.key);
254
+ this.collectFromValueComponent(pair.value);
255
+ }
256
+ }
257
+ if (value.switchCase && value.switchCase.elseValue)
258
+ this.collectFromValueComponent(value.switchCase.elseValue);
259
+ }
260
+ else if (value instanceof ParenExpression) {
261
+ this.collectFromValueComponent(value.expression);
262
+ }
263
+ else if (value instanceof InlineQuery) {
264
+ if (value.selectQuery instanceof SimpleSelectQuery) {
265
+ this.collectFromSimpleQuery(value.selectQuery);
266
+ }
267
+ else if (value.selectQuery instanceof BinarySelectQuery) {
268
+ this.collectFromSimpleQuery(value.selectQuery.toSimpleQuery());
269
+ }
270
+ }
271
+ // Add more value component types as needed
272
+ }
273
+ visit(component) {
274
+ if (this.visitedNodes.has(component)) {
275
+ return;
276
+ }
277
+ this.visitedNodes.add(component);
278
+ const handler = this.handlers.get(component.getKind());
279
+ if (handler) {
280
+ handler(component);
281
+ }
282
+ else {
283
+ // Unhandled component type - this is expected for some components
284
+ }
285
+ }
286
+ // Query visitors
287
+ visitSimpleSelectQuery(query) {
288
+ if (query.withClause)
289
+ query.withClause.accept(this);
290
+ query.selectClause.accept(this);
291
+ if (query.fromClause)
292
+ query.fromClause.accept(this);
293
+ if (query.whereClause)
294
+ query.whereClause.accept(this);
295
+ if (query.groupByClause)
296
+ query.groupByClause.accept(this);
297
+ if (query.havingClause)
298
+ query.havingClause.accept(this);
299
+ if (query.orderByClause)
300
+ query.orderByClause.accept(this);
301
+ if (query.windowClause)
302
+ query.windowClause.accept(this);
303
+ if (query.limitClause)
304
+ query.limitClause.accept(this);
305
+ if (query.offsetClause)
306
+ query.offsetClause.accept(this);
307
+ if (query.fetchClause)
308
+ query.fetchClause.accept(this);
309
+ if (query.forClause)
310
+ query.forClause.accept(this);
311
+ }
312
+ // WITH clause and CTE visitors (this is the key difference from SelectableColumnCollector)
313
+ visitWithClause(clause) {
314
+ for (const table of clause.tables) {
315
+ table.accept(this);
316
+ }
317
+ }
318
+ visitCommonTable(table) {
319
+ // Visit the CTE query to collect column references within it
320
+ table.query.accept(this);
321
+ }
322
+ // Clause visitors
323
+ visitSelectClause(clause) {
324
+ for (const item of clause.items) {
325
+ item.value.accept(this);
326
+ }
327
+ }
328
+ visitFromClause(clause) {
329
+ clause.source.accept(this);
330
+ if (clause.joins) {
331
+ for (const join of clause.joins) {
332
+ join.accept(this);
333
+ }
334
+ }
335
+ }
336
+ visitWhereClause(clause) {
337
+ clause.condition.accept(this);
338
+ }
339
+ visitGroupByClause(clause) {
340
+ if (clause.grouping) {
341
+ for (const item of clause.grouping) {
342
+ item.accept(this);
343
+ }
344
+ }
345
+ }
346
+ visitHavingClause(clause) {
347
+ clause.condition.accept(this);
348
+ }
349
+ visitOrderByClause(clause) {
350
+ if (clause.order) {
351
+ for (const item of clause.order) {
352
+ if (typeof item === 'object' && 'value' in item && item.value) {
353
+ if (typeof item.value === 'object' && 'accept' in item.value) {
354
+ item.value.accept(this);
355
+ }
356
+ }
357
+ else if (typeof item === 'object' && 'accept' in item) {
358
+ item.accept(this);
359
+ }
360
+ }
361
+ }
362
+ }
363
+ visitWindowsClause(clause) {
364
+ for (const window of clause.windows) {
365
+ window.expression.accept(this);
366
+ }
367
+ }
368
+ visitLimitClause(clause) {
369
+ clause.value.accept(this);
370
+ }
371
+ visitOffsetClause(clause) {
372
+ clause.value.accept(this);
373
+ }
374
+ visitFetchClause(clause) {
375
+ clause.expression.accept(this);
376
+ }
377
+ visitForClause(clause) {
378
+ // ForClause typically doesn't contain column references
379
+ }
380
+ // JOIN visitors
381
+ visitJoinClause(clause) {
382
+ clause.source.accept(this);
383
+ if (clause.condition) {
384
+ clause.condition.accept(this);
385
+ }
386
+ }
387
+ visitJoinOnClause(clause) {
388
+ clause.condition.accept(this);
389
+ }
390
+ visitJoinUsingClause(clause) {
391
+ clause.condition.accept(this);
392
+ }
393
+ // Source visitors
394
+ visitSourceExpression(source) {
395
+ source.datasource.accept(this);
396
+ }
397
+ visitSubQuerySource(source) {
398
+ source.query.accept(this);
399
+ }
400
+ // Value component visitors
401
+ visitColumnReference(ref) {
402
+ this.columnReferences.push(ref);
403
+ }
404
+ visitBinaryExpression(expr) {
405
+ expr.left.accept(this);
406
+ expr.right.accept(this);
407
+ }
408
+ visitUnaryExpression(expr) {
409
+ expr.expression.accept(this);
410
+ }
411
+ visitFunctionCall(func) {
412
+ if (func.argument) {
413
+ func.argument.accept(this);
414
+ }
415
+ }
416
+ visitCaseExpression(expr) {
417
+ if (expr.condition)
418
+ expr.condition.accept(this);
419
+ if (expr.switchCase && expr.switchCase.cases) {
420
+ for (const pair of expr.switchCase.cases) {
421
+ pair.key.accept(this);
422
+ pair.value.accept(this);
423
+ }
424
+ }
425
+ if (expr.switchCase && expr.switchCase.elseValue)
426
+ expr.switchCase.elseValue.accept(this);
427
+ }
428
+ visitCastExpression(expr) {
429
+ expr.input.accept(this);
430
+ }
431
+ visitBetweenExpression(expr) {
432
+ expr.expression.accept(this);
433
+ expr.lower.accept(this);
434
+ expr.upper.accept(this);
435
+ }
436
+ visitParenExpression(expr) {
437
+ expr.expression.accept(this);
438
+ }
439
+ visitInlineQuery(query) {
440
+ query.selectQuery.accept(this);
441
+ }
442
+ visitArrayExpression(expr) {
443
+ if (expr.expression) {
444
+ expr.expression.accept(this);
445
+ }
446
+ }
447
+ visitArrayQueryExpression(expr) {
448
+ expr.query.accept(this);
449
+ }
450
+ visitValueList(list) {
451
+ if (list.values) {
452
+ for (const item of list.values) {
453
+ item.accept(this);
454
+ }
455
+ }
456
+ }
457
+ visitWindowFrameExpression(expr) {
458
+ if (expr.partition)
459
+ expr.partition.accept(this);
460
+ if (expr.order)
461
+ expr.order.accept(this);
462
+ }
463
+ }
464
+ //# sourceMappingURL=ColumnReferenceCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnReferenceCollector.js","sourceRoot":"","sources":["../../../../src/transformers/ColumnReferenceCollector.ts"],"names":[],"mappings":"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"}