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