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.
- package/README.md +62 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +25 -25
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/index.d.ts +3 -0
- package/dist/esm/src/index.js +3 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/transformers/CTERenamer.d.ts +144 -0
- package/dist/esm/src/transformers/CTERenamer.js +342 -0
- package/dist/esm/src/transformers/CTERenamer.js.map +1 -0
- package/dist/esm/src/transformers/ColumnReferenceCollector.d.ts +162 -0
- package/dist/esm/src/transformers/ColumnReferenceCollector.js +464 -0
- package/dist/esm/src/transformers/ColumnReferenceCollector.js.map +1 -0
- package/dist/esm/src/transformers/SelectableColumnCollector.d.ts +94 -9
- package/dist/esm/src/transformers/SelectableColumnCollector.js +227 -40
- package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +25 -25
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +5 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/transformers/CTERenamer.d.ts +144 -0
- package/dist/src/transformers/CTERenamer.js +346 -0
- package/dist/src/transformers/CTERenamer.js.map +1 -0
- package/dist/src/transformers/ColumnReferenceCollector.d.ts +162 -0
- package/dist/src/transformers/ColumnReferenceCollector.js +468 -0
- package/dist/src/transformers/ColumnReferenceCollector.js.map +1 -0
- package/dist/src/transformers/SelectableColumnCollector.d.ts +94 -9
- package/dist/src/transformers/SelectableColumnCollector.js +225 -38
- package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAqB,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAe,cAAc,EAAE,gBAAgB,EAAiC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5V,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAkB,SAAS,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AACH,MAAM,OAAO,wBAAwB;IAKjC;QAHQ,qBAAgB,GAAsB,EAAE,CAAC;QACzC,iBAAY,GAAsB,IAAI,GAAG,EAAE,CAAC;QAGhD,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;QAEtD,0GAA0G;QAE1G,kBAAkB;QAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAoB,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAoB,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAsB,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAoB,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAqB,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAuB,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAsB,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAuB,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAuB,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAqB,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAsB,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAqB,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAmB,CAAC,CAAC,CAAC;QAExF,gBAAgB;QAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAoB,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAsB,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAyB,CAAC,CAAC,CAAC;QAE1G,kBAAkB;QAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAA0B,CAAC,CAAC,CAAC;QAC7G,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAwB,CAAC,CAAC,CAAC;QAEvG,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAsB,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAwB,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAuB,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAoB,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAsB,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAsB,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAyB,CAAC,CAAC,CAAC;QAC5G,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAuB,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAoB,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAuB,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAA4B,CAAC,CAAC,CAAC;QACrH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAiB,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAA6B,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACI,OAAO,CAAC,KAAmB;QAC9B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,0DAA0D;QAC1D,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACrC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YAC5C,yEAAyE;YACzE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtC,CAAC;IAEO,sBAAsB,CAAC,KAAwB;QACnD,sFAAsF;QACtF,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBACxC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAA0B,CAAC,CAAC;YAChE,CAAC;QACL,CAAC;QAED,uCAAuC;QACvC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,KAAK,CAAC,UAAU;YAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,KAAK,CAAC,WAAW;YAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACnF,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YACtD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAC9C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,YAAY;YAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACrF,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACnD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC5D,IAAI,CAAC,yBAAyB,CAAE,IAAY,CAAC,KAAK,CAAC,CAAC;gBACxD,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,yBAAyB,CAAC,IAAsB,CAAC,CAAC;gBAC3D,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAGO,uBAAuB,CAAC,MAAoB;QAChD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,MAAkB;QAC5C,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,IAAI,CAAC,yBAAyB,CAAE,IAAI,CAAC,SAAiB,CAAC,SAAS,CAAC,CAAC;gBACtE,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,2BAA2B,CAAC,MAAwB;QACxD,IAAI,MAAM,CAAC,UAAU,YAAY,cAAc,EAAE,CAAC;YAC9C,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,YAAY,iBAAiB,EAAE,CAAC;gBACvD,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACzD,CAAC;iBAAM,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,YAAY,iBAAiB,EAAE,CAAC;gBAC9D,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;YACzE,CAAC;QACL,CAAC;IACL,CAAC;IAEO,yBAAyB,CAAC,KAAqB;QACnD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;YAC3C,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YAC1C,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACzD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,SAAS;gBAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;oBACxC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/C,CAAC;YACL,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS;gBAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnH,CAAC;aAAM,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YAC1C,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,WAAW,YAAY,iBAAiB,EAAE,CAAC;gBACjD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,KAAK,CAAC,WAAW,YAAY,iBAAiB,EAAE,CAAC;gBACxD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;YACnE,CAAC;QACL,CAAC;QACD,2CAA2C;IAC/C,CAAC;IAEM,KAAK,CAAC,SAAuB;QAChC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,kEAAkE;QACtE,CAAC;IACL,CAAC;IAED,iBAAiB;IACT,sBAAsB,CAAC,KAAwB;QACnD,IAAI,KAAK,CAAC,UAAU;YAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,UAAU;YAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,WAAW;YAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,aAAa;YAAE,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,YAAY;YAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,aAAa;YAAE,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,YAAY;YAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,WAAW;YAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,YAAY;YAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,WAAW;YAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,SAAS;YAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAGD,2FAA2F;IACnF,eAAe,CAAC,MAAkB;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,KAAkB;QACvC,6DAA6D;QAC7D,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,kBAAkB;IACV,iBAAiB,CAAC,MAAoB;QAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,MAAkB;QACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,MAAmB;QACxC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,kBAAkB,CAAC,MAAqB;QAC5C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAAoB;QAC1C,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,kBAAkB,CAAC,MAAqB;QAC5C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC5D,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBAC1D,IAAI,CAAC,KAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChD,CAAC;gBACL,CAAC;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACrD,IAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1C,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,MAAqB;QAC5C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,MAAmB;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,iBAAiB,CAAC,MAAoB;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,gBAAgB,CAAC,MAAmB;QACxC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEO,cAAc,CAAC,MAAiB;QACpC,wDAAwD;IAC5D,CAAC;IAED,gBAAgB;IACR,eAAe,CAAC,MAAkB;QACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,MAAoB;QAC1C,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,oBAAoB,CAAC,MAAuB;QAChD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,kBAAkB;IACV,qBAAqB,CAAC,MAAwB;QAClD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEO,mBAAmB,CAAC,MAAsB;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,2BAA2B;IACnB,oBAAoB,CAAC,GAAoB;QAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEO,qBAAqB,CAAC,IAAsB;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,oBAAoB,CAAC,IAAqB;QAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEO,iBAAiB,CAAC,IAAkB;QACxC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,IAAoB;QAC5C,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS;YAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC;IAEO,mBAAmB,CAAC,IAAoB;QAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,sBAAsB,CAAC,IAAuB;QAClD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,oBAAoB,CAAC,IAAqB;QAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEO,gBAAgB,CAAC,KAAkB;QACvC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEO,oBAAoB,CAAC,IAAqB;QAC9C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAEO,yBAAyB,CAAC,IAA0B;QACxD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,cAAc,CAAC,IAAe;QAClC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC;IAEO,0BAA0B,CAAC,IAA2B;QAC1D,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;CACJ"}
|