rawsql-ts 0.1.0-beta.10 → 0.1.0-beta.12

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 (208) hide show
  1. package/README.md +165 -174
  2. package/dist/esm/index.js +17 -0
  3. package/dist/esm/index.js.map +1 -0
  4. package/dist/esm/models/BinarySelectQuery.js +137 -0
  5. package/dist/esm/models/BinarySelectQuery.js.map +1 -0
  6. package/dist/esm/models/Clause.js +289 -0
  7. package/dist/esm/models/Clause.js.map +1 -0
  8. package/dist/esm/models/KeywordTrie.js +48 -0
  9. package/dist/esm/models/KeywordTrie.js.map +1 -0
  10. package/dist/esm/models/Lexeme.js +18 -0
  11. package/dist/esm/models/Lexeme.js.map +1 -0
  12. package/dist/esm/models/SelectQuery.js +5 -0
  13. package/dist/esm/models/SelectQuery.js.map +1 -0
  14. package/dist/esm/models/SimpleSelectQuery.js +288 -0
  15. package/dist/esm/models/SimpleSelectQuery.js.map +1 -0
  16. package/dist/esm/models/SqlComponent.js +22 -0
  17. package/dist/esm/models/SqlComponent.js.map +1 -0
  18. package/dist/esm/models/ValueComponent.js +223 -0
  19. package/dist/esm/models/ValueComponent.js.map +1 -0
  20. package/dist/esm/models/ValuesQuery.js +12 -0
  21. package/dist/esm/models/ValuesQuery.js.map +1 -0
  22. package/dist/esm/parsers/CommandExpressionParser.js +120 -0
  23. package/dist/esm/parsers/CommandExpressionParser.js.map +1 -0
  24. package/dist/esm/parsers/CommonTableParser.js +58 -0
  25. package/dist/esm/parsers/CommonTableParser.js.map +1 -0
  26. package/dist/esm/parsers/ForClauseParser.js +54 -0
  27. package/dist/esm/parsers/ForClauseParser.js.map +1 -0
  28. package/dist/esm/parsers/FromClauseParser.js +43 -0
  29. package/dist/esm/parsers/FromClauseParser.js.map +1 -0
  30. package/dist/esm/parsers/FunctionExpressionParser.js +174 -0
  31. package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -0
  32. package/dist/esm/parsers/GroupByParser.js +54 -0
  33. package/dist/esm/parsers/GroupByParser.js.map +1 -0
  34. package/dist/esm/parsers/HavingParser.js +32 -0
  35. package/dist/esm/parsers/HavingParser.js.map +1 -0
  36. package/dist/esm/parsers/IdentifierParser.js +35 -0
  37. package/dist/esm/parsers/IdentifierParser.js.map +1 -0
  38. package/dist/esm/parsers/JoinClauseParser.js +101 -0
  39. package/dist/esm/parsers/JoinClauseParser.js.map +1 -0
  40. package/dist/esm/parsers/KeywordParser.js +87 -0
  41. package/dist/esm/parsers/KeywordParser.js.map +1 -0
  42. package/dist/esm/parsers/LimitClauseParser.js +46 -0
  43. package/dist/esm/parsers/LimitClauseParser.js.map +1 -0
  44. package/dist/esm/parsers/LiteralParser.js +34 -0
  45. package/dist/esm/parsers/LiteralParser.js.map +1 -0
  46. package/dist/esm/parsers/OrderByClauseParser.js +73 -0
  47. package/dist/esm/parsers/OrderByClauseParser.js.map +1 -0
  48. package/dist/esm/parsers/OverExpressionParser.js +40 -0
  49. package/dist/esm/parsers/OverExpressionParser.js.map +1 -0
  50. package/dist/esm/parsers/ParameterExpressionParser.js +11 -0
  51. package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -0
  52. package/dist/esm/parsers/ParenExpressionParser.js +29 -0
  53. package/dist/esm/parsers/ParenExpressionParser.js.map +1 -0
  54. package/dist/esm/parsers/PartitionByParser.js +49 -0
  55. package/dist/esm/parsers/PartitionByParser.js.map +1 -0
  56. package/dist/esm/parsers/SelectClauseParser.js +80 -0
  57. package/dist/esm/parsers/SelectClauseParser.js.map +1 -0
  58. package/dist/esm/parsers/SelectQueryParser.js +149 -0
  59. package/dist/esm/parsers/SelectQueryParser.js.map +1 -0
  60. package/dist/esm/parsers/SourceAliasExpressionParser.js +45 -0
  61. package/dist/esm/parsers/SourceAliasExpressionParser.js.map +1 -0
  62. package/dist/esm/parsers/SourceExpressionParser.js +31 -0
  63. package/dist/esm/parsers/SourceExpressionParser.js.map +1 -0
  64. package/dist/esm/parsers/SourceParser.js +115 -0
  65. package/dist/esm/parsers/SourceParser.js.map +1 -0
  66. package/dist/esm/parsers/SqlTokenizer.js +170 -0
  67. package/dist/esm/parsers/SqlTokenizer.js.map +1 -0
  68. package/dist/esm/parsers/StringSpecifierExpressionParser.js +18 -0
  69. package/dist/esm/parsers/StringSpecifierExpressionParser.js.map +1 -0
  70. package/dist/esm/parsers/UnaryExpressionParser.js +26 -0
  71. package/dist/esm/parsers/UnaryExpressionParser.js.map +1 -0
  72. package/dist/esm/parsers/ValueParser.js +132 -0
  73. package/dist/esm/parsers/ValueParser.js.map +1 -0
  74. package/dist/esm/parsers/ValuesQueryParser.js +82 -0
  75. package/dist/esm/parsers/ValuesQueryParser.js.map +1 -0
  76. package/dist/esm/parsers/WhereClauseParser.js +32 -0
  77. package/dist/esm/parsers/WhereClauseParser.js.map +1 -0
  78. package/dist/esm/parsers/WindowClauseParser.js +41 -0
  79. package/dist/esm/parsers/WindowClauseParser.js.map +1 -0
  80. package/dist/esm/parsers/WindowExpressionParser.js +159 -0
  81. package/dist/esm/parsers/WindowExpressionParser.js.map +1 -0
  82. package/dist/esm/parsers/WithClauseParser.js +53 -0
  83. package/dist/esm/parsers/WithClauseParser.js.map +1 -0
  84. package/dist/esm/tokenReaders/BaseTokenReader.js +78 -0
  85. package/dist/esm/tokenReaders/BaseTokenReader.js.map +1 -0
  86. package/dist/esm/tokenReaders/CommandTokenReader.js +141 -0
  87. package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -0
  88. package/dist/esm/tokenReaders/FunctionTokenReader.js +41 -0
  89. package/dist/esm/tokenReaders/FunctionTokenReader.js.map +1 -0
  90. package/dist/esm/tokenReaders/IdentifierTokenReader.js +66 -0
  91. package/dist/esm/tokenReaders/IdentifierTokenReader.js.map +1 -0
  92. package/dist/esm/tokenReaders/LiteralTokenReader.js +185 -0
  93. package/dist/esm/tokenReaders/LiteralTokenReader.js.map +1 -0
  94. package/dist/esm/tokenReaders/OperatorTokenReader.js +94 -0
  95. package/dist/esm/tokenReaders/OperatorTokenReader.js.map +1 -0
  96. package/dist/esm/tokenReaders/ParameterTokenReader.js +40 -0
  97. package/dist/esm/tokenReaders/ParameterTokenReader.js.map +1 -0
  98. package/dist/esm/tokenReaders/StringSpecifierTokenReader.js +27 -0
  99. package/dist/esm/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
  100. package/dist/esm/tokenReaders/SymbolTokenReader.js +31 -0
  101. package/dist/esm/tokenReaders/SymbolTokenReader.js.map +1 -0
  102. package/dist/esm/tokenReaders/TokenReaderManager.js +106 -0
  103. package/dist/esm/tokenReaders/TokenReaderManager.js.map +1 -0
  104. package/dist/esm/tokenReaders/TypeTokenReader.js +55 -0
  105. package/dist/esm/tokenReaders/TypeTokenReader.js.map +1 -0
  106. package/dist/esm/transformers/CTEBuilder.js +184 -0
  107. package/dist/esm/transformers/CTEBuilder.js.map +1 -0
  108. package/dist/esm/transformers/CTECollector.js +380 -0
  109. package/dist/esm/transformers/CTECollector.js.map +1 -0
  110. package/dist/esm/transformers/CTEDisabler.js +321 -0
  111. package/dist/esm/transformers/CTEDisabler.js.map +1 -0
  112. package/dist/esm/transformers/CTEInjector.js +79 -0
  113. package/dist/esm/transformers/CTEInjector.js.map +1 -0
  114. package/dist/esm/transformers/CTENormalizer.js +42 -0
  115. package/dist/esm/transformers/CTENormalizer.js.map +1 -0
  116. package/dist/esm/transformers/Formatter.js +463 -0
  117. package/dist/esm/transformers/Formatter.js.map +1 -0
  118. package/dist/esm/transformers/QueryConverter.js +115 -0
  119. package/dist/esm/transformers/QueryConverter.js.map +1 -0
  120. package/dist/esm/transformers/SelectValueCollector.js +245 -0
  121. package/dist/esm/transformers/SelectValueCollector.js.map +1 -0
  122. package/dist/esm/transformers/SelectableColumnCollector.js +304 -0
  123. package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -0
  124. package/dist/esm/transformers/TableColumnResolver.js +2 -0
  125. package/dist/esm/transformers/TableColumnResolver.js.map +1 -0
  126. package/dist/esm/transformers/TableSourceCollector.js +380 -0
  127. package/dist/esm/transformers/TableSourceCollector.js.map +1 -0
  128. package/dist/esm/transformers/UpstreamSelectQueryFinder.js +125 -0
  129. package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -0
  130. package/dist/esm/types/index.d.ts +14 -0
  131. package/dist/esm/types/models/BinarySelectQuery.d.ts +91 -0
  132. package/dist/esm/types/models/Clause.d.ts +189 -0
  133. package/dist/esm/types/models/KeywordTrie.d.ts +11 -0
  134. package/dist/esm/types/models/Lexeme.d.ts +25 -0
  135. package/dist/esm/types/models/SelectQuery.d.ts +5 -0
  136. package/dist/esm/types/models/SimpleSelectQuery.d.ts +167 -0
  137. package/dist/esm/types/models/SqlComponent.d.ts +18 -0
  138. package/dist/esm/types/models/ValueComponent.d.ts +158 -0
  139. package/dist/esm/types/models/ValuesQuery.d.ts +10 -0
  140. package/dist/esm/types/parsers/CommandExpressionParser.d.ts +15 -0
  141. package/dist/esm/types/parsers/CommonTableParser.d.ts +9 -0
  142. package/dist/esm/types/parsers/ForClauseParser.d.ts +9 -0
  143. package/dist/esm/types/parsers/FromClauseParser.d.ts +9 -0
  144. package/dist/esm/types/parsers/FunctionExpressionParser.d.ts +22 -0
  145. package/dist/esm/types/parsers/GroupByParser.d.ts +10 -0
  146. package/dist/esm/types/parsers/HavingParser.d.ts +9 -0
  147. package/dist/esm/types/parsers/IdentifierParser.d.ts +8 -0
  148. package/dist/esm/types/parsers/JoinClauseParser.d.ts +14 -0
  149. package/dist/esm/types/parsers/KeywordParser.d.ts +17 -0
  150. package/dist/esm/types/parsers/LimitClauseParser.d.ts +9 -0
  151. package/dist/esm/types/parsers/LiteralParser.d.ts +8 -0
  152. package/dist/esm/types/parsers/OrderByClauseParser.d.ts +10 -0
  153. package/dist/esm/types/parsers/OverExpressionParser.d.ts +9 -0
  154. package/dist/esm/types/parsers/ParameterExpressionParser.d.ts +8 -0
  155. package/dist/esm/types/parsers/ParenExpressionParser.d.ts +8 -0
  156. package/dist/esm/types/parsers/PartitionByParser.d.ts +9 -0
  157. package/dist/esm/types/parsers/SelectClauseParser.d.ts +10 -0
  158. package/dist/esm/types/parsers/SelectQueryParser.d.ts +13 -0
  159. package/dist/esm/types/parsers/SourceAliasExpressionParser.d.ts +8 -0
  160. package/dist/esm/types/parsers/SourceExpressionParser.d.ts +8 -0
  161. package/dist/esm/types/parsers/SourceParser.d.ts +13 -0
  162. package/dist/esm/types/parsers/SqlTokenizer.d.ts +64 -0
  163. package/dist/esm/types/parsers/StringSpecifierExpressionParser.d.ts +8 -0
  164. package/dist/esm/types/parsers/UnaryExpressionParser.d.ts +8 -0
  165. package/dist/esm/types/parsers/ValueParser.d.ts +14 -0
  166. package/dist/esm/types/parsers/ValuesQueryParser.d.ts +10 -0
  167. package/dist/esm/types/parsers/WhereClauseParser.d.ts +9 -0
  168. package/dist/esm/types/parsers/WindowClauseParser.d.ts +9 -0
  169. package/dist/esm/types/parsers/WindowExpressionParser.d.ts +12 -0
  170. package/dist/esm/types/parsers/WithClauseParser.d.ts +9 -0
  171. package/dist/esm/types/tokenReaders/BaseTokenReader.d.ts +43 -0
  172. package/dist/esm/types/tokenReaders/CommandTokenReader.d.ts +7 -0
  173. package/dist/esm/types/tokenReaders/FunctionTokenReader.d.ts +11 -0
  174. package/dist/esm/types/tokenReaders/IdentifierTokenReader.d.ts +15 -0
  175. package/dist/esm/types/tokenReaders/LiteralTokenReader.d.ts +23 -0
  176. package/dist/esm/types/tokenReaders/OperatorTokenReader.d.ts +5 -0
  177. package/dist/esm/types/tokenReaders/ParameterTokenReader.d.ts +11 -0
  178. package/dist/esm/types/tokenReaders/StringSpecifierTokenReader.d.ts +8 -0
  179. package/dist/esm/types/tokenReaders/SymbolTokenReader.d.ts +12 -0
  180. package/dist/esm/types/tokenReaders/TokenReaderManager.d.ts +53 -0
  181. package/dist/esm/types/tokenReaders/TypeTokenReader.d.ts +11 -0
  182. package/dist/esm/types/transformers/CTEBuilder.d.ts +52 -0
  183. package/dist/esm/types/transformers/CTECollector.d.ts +81 -0
  184. package/dist/esm/types/transformers/CTEDisabler.d.ts +77 -0
  185. package/dist/esm/types/transformers/CTEInjector.d.ts +40 -0
  186. package/dist/esm/types/transformers/CTENormalizer.d.ts +25 -0
  187. package/dist/esm/types/transformers/Formatter.d.ts +82 -0
  188. package/dist/esm/types/transformers/QueryConverter.d.ts +41 -0
  189. package/dist/esm/types/transformers/SelectValueCollector.d.ts +60 -0
  190. package/dist/esm/types/transformers/SelectableColumnCollector.d.ts +70 -0
  191. package/dist/esm/types/transformers/TableColumnResolver.d.ts +10 -0
  192. package/dist/esm/types/transformers/TableSourceCollector.d.ts +92 -0
  193. package/dist/esm/types/transformers/UpstreamSelectQueryFinder.d.ts +27 -0
  194. package/dist/esm/types/utils/charLookupTable.d.ts +11 -0
  195. package/dist/esm/types/utils/stringUtils.d.ts +43 -0
  196. package/dist/esm/utils/charLookupTable.js +69 -0
  197. package/dist/esm/utils/charLookupTable.js.map +1 -0
  198. package/dist/esm/utils/stringUtils.js +164 -0
  199. package/dist/esm/utils/stringUtils.js.map +1 -0
  200. package/dist/index.d.ts +1 -0
  201. package/dist/index.js +1 -0
  202. package/dist/index.js.map +1 -1
  203. package/dist/transformers/SelectValueCollector.d.ts +2 -4
  204. package/dist/transformers/SelectValueCollector.js.map +1 -1
  205. package/dist/transformers/TableColumnResolver.d.ts +10 -0
  206. package/dist/transformers/TableColumnResolver.js +3 -0
  207. package/dist/transformers/TableColumnResolver.js.map +1 -0
  208. package/package.json +17 -1
@@ -0,0 +1,184 @@
1
+ import { WithClause } from "../models/Clause";
2
+ import { CTECollector } from "./CTECollector";
3
+ import { TableSourceCollector } from "./TableSourceCollector";
4
+ import { Formatter } from "./Formatter";
5
+ /**
6
+ * CTENameConflictResolver is responsible for resolving name conflicts among Common Table Expressions (CTEs).
7
+ * It also sorts the tables in the proper order based on dependencies and recursiveness.
8
+ */
9
+ export class CTEBuilder {
10
+ constructor() {
11
+ this.sourceCollector = new TableSourceCollector(true);
12
+ this.cteCollector = new CTECollector();
13
+ this.formatter = new Formatter();
14
+ }
15
+ /**
16
+ * Resolves name conflicts among CommonTables.
17
+ * If there are duplicate CTE names, they must have identical definitions.
18
+ * Also sorts the tables so that:
19
+ * 1. Recursive CTEs come first (CTEs that reference themselves)
20
+ * 2. Then remaining tables are sorted so inner (deeper) CTEs come before outer CTEs
21
+ *
22
+ * @param commonTables The list of CommonTables to check for name conflicts
23
+ * @returns An object containing:
24
+ * - needRecursive: boolean indicating if any recursive CTEs are present
25
+ * - commonTables: A new list of CommonTables with resolved name conflicts and proper order
26
+ * @throws Error if there are duplicate CTE names with different definitions
27
+ */
28
+ build(commonTables) {
29
+ // Early return for empty CTEs
30
+ // Note:
31
+ // Although it may seem reasonable to return early when there is only one element,
32
+ // the 'recursive' property is determined dynamically. Therefore, if there is at least one element,
33
+ // the CTEs must be rebuilt to ensure correct recursive detection.
34
+ if (commonTables.length === 0) {
35
+ return new WithClause(false, commonTables);
36
+ }
37
+ // Step 1: Resolve name conflicts
38
+ const resolvedTables = this.resolveDuplicateNames(commonTables);
39
+ // Step 2: Identify recursive CTEs and build dependency graph
40
+ const { tableMap, recursiveCTEs, dependencies } = this.buildDependencyGraph(resolvedTables);
41
+ // Step 3: Sort tables according to dependencies and recursiveness
42
+ const sortedTables = this.sortCommonTables(resolvedTables, tableMap, recursiveCTEs, dependencies);
43
+ return new WithClause(recursiveCTEs.size > 0, sortedTables);
44
+ }
45
+ /**
46
+ * Resolves duplicate CTE names by checking if they have identical definitions.
47
+ * If definitions differ, throws an error.
48
+ *
49
+ * @param commonTables The list of CTEs to check for duplicates
50
+ * @returns A list of CTEs with duplicates removed
51
+ * @throws Error if there are duplicate CTE names with different definitions
52
+ */
53
+ resolveDuplicateNames(commonTables) {
54
+ // Group CTEs by their names
55
+ const ctesByName = new Map();
56
+ for (const table of commonTables) {
57
+ const tableName = table.aliasExpression.table.name;
58
+ if (!ctesByName.has(tableName)) {
59
+ ctesByName.set(tableName, []);
60
+ }
61
+ ctesByName.get(tableName).push(table);
62
+ }
63
+ // Resolve name duplications
64
+ const resolvedTables = [];
65
+ for (const [name, tables] of ctesByName.entries()) {
66
+ if (tables.length === 1) {
67
+ // No duplication
68
+ resolvedTables.push(tables[0]);
69
+ continue;
70
+ }
71
+ // For duplicate names, check if definitions are identical
72
+ const definitions = tables.map(table => this.formatter.format(table.query));
73
+ const uniqueDefinitions = new Set(definitions);
74
+ if (uniqueDefinitions.size === 1) {
75
+ // If all definitions are identical, use only the first one
76
+ resolvedTables.push(tables[0]);
77
+ }
78
+ else {
79
+ // Error if definitions differ
80
+ throw new Error(`CTE name conflict detected: '${name}' has multiple different definitions`);
81
+ }
82
+ }
83
+ return resolvedTables;
84
+ }
85
+ /**
86
+ * Builds a dependency graph of CTEs and identifies recursive CTEs.
87
+ *
88
+ * @param tables The list of CTEs to analyze
89
+ * @returns Object containing the table map, set of recursive CTEs, and dependency map
90
+ */
91
+ buildDependencyGraph(tables) {
92
+ // Create a map of table names for quick lookup
93
+ const tableMap = new Map();
94
+ for (const table of tables) {
95
+ tableMap.set(table.aliasExpression.table.name, table);
96
+ }
97
+ // Identify recursive CTEs (those that reference themselves)
98
+ const recursiveCTEs = new Set();
99
+ // Build dependency graph: which tables reference which other tables
100
+ const dependencies = new Map();
101
+ const referencedBy = new Map();
102
+ for (const table of tables) {
103
+ const tableName = table.aliasExpression.table.name;
104
+ // Check for self-references (recursive CTEs)
105
+ const referencedTables = this.sourceCollector.collect(table.query);
106
+ // Check if this CTE references itself
107
+ for (const referencedTable of referencedTables) {
108
+ if (referencedTable.table.name === tableName) {
109
+ recursiveCTEs.add(tableName);
110
+ break;
111
+ }
112
+ }
113
+ // Setup dependencies
114
+ if (!dependencies.has(tableName)) {
115
+ dependencies.set(tableName, new Set());
116
+ }
117
+ // Find any references to other CTEs in this table's query
118
+ const referencedCTEs = this.cteCollector.collect(table.query);
119
+ for (const referencedCTE of referencedCTEs) {
120
+ const referencedName = referencedCTE.aliasExpression.table.name;
121
+ // Only consider references to tables in our collection
122
+ if (tableMap.has(referencedName)) {
123
+ dependencies.get(tableName).add(referencedName);
124
+ // Add the reverse relationship
125
+ if (!referencedBy.has(referencedName)) {
126
+ referencedBy.set(referencedName, new Set());
127
+ }
128
+ referencedBy.get(referencedName).add(tableName);
129
+ }
130
+ }
131
+ }
132
+ return { tableMap, recursiveCTEs, dependencies };
133
+ }
134
+ /**
135
+ * Sorts the CTEs using topological sort, with recursive CTEs coming first.
136
+ *
137
+ * @param tables The list of CTEs to sort
138
+ * @param tableMap Map of table names to their CommonTable objects
139
+ * @param recursiveCTEs Set of table names that are recursive (self-referential)
140
+ * @param dependencies Map of table dependencies
141
+ * @returns Sorted list of CTEs
142
+ * @throws Error if a circular reference is detected
143
+ */
144
+ sortCommonTables(tables, tableMap, recursiveCTEs, dependencies) {
145
+ const recursiveResult = [];
146
+ const nonRecursiveResult = [];
147
+ const visited = new Set();
148
+ const visiting = new Set();
149
+ // Topological sort function
150
+ const visit = (tableName) => {
151
+ if (visited.has(tableName))
152
+ return;
153
+ if (visiting.has(tableName)) {
154
+ throw new Error(`Circular reference detected in CTE: ${tableName}`);
155
+ }
156
+ visiting.add(tableName);
157
+ // Process dependencies first (inner CTEs)
158
+ const deps = dependencies.get(tableName) || new Set();
159
+ for (const dep of deps) {
160
+ visit(dep);
161
+ }
162
+ visiting.delete(tableName);
163
+ visited.add(tableName);
164
+ // Add this table after its dependencies
165
+ // Recursive CTEs go to recursiveResult, others to nonRecursiveResult
166
+ if (recursiveCTEs.has(tableName)) {
167
+ recursiveResult.push(tableMap.get(tableName));
168
+ }
169
+ else {
170
+ nonRecursiveResult.push(tableMap.get(tableName));
171
+ }
172
+ };
173
+ // Process all tables
174
+ for (const table of tables) {
175
+ const tableName = table.aliasExpression.table.name;
176
+ if (!visited.has(tableName)) {
177
+ visit(tableName);
178
+ }
179
+ }
180
+ // Combine the results: recursive CTEs first, then non-recursive CTEs
181
+ return [...recursiveResult, ...nonRecursiveResult];
182
+ }
183
+ }
184
+ //# sourceMappingURL=CTEBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTEBuilder.js","sourceRoot":"","sources":["../../../src/transformers/CTEBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,380 @@
1
+ import { CommonTable, ForClause, FromClause, GroupByClause, HavingClause, JoinClause, JoinOnClause, JoinUsingClause, LimitClause, OrderByClause, OrderByItem, ParenSource, SelectClause, SelectItem, SourceExpression, SubQuerySource, TableSource, WhereClause, WindowFrameClause, WithClause } from "../models/Clause";
2
+ import { BinarySelectQuery, SimpleSelectQuery, ValuesQuery } from "../models/SelectQuery";
3
+ import { ArrayExpression, BetweenExpression, BinaryExpression, CaseExpression, CaseKeyValuePair, CastExpression, ColumnReference, FunctionCall, InlineQuery, ParenExpression, ParameterExpression, SwitchCaseArgument, TupleExpression, UnaryExpression, WindowFrameExpression, IdentifierString, RawString, WindowFrameSpec, LiteralValue, TypeValue } from "../models/ValueComponent";
4
+ /**
5
+ * A visitor that collects all CommonTable instances from a SQL query structure.
6
+ * This includes tables from:
7
+ * - WITH clauses
8
+ * - Subqueries
9
+ * - Inline queries
10
+ * - UNION queries
11
+ * - Value components that may contain queries
12
+ */
13
+ export class CTECollector {
14
+ constructor() {
15
+ this.commonTables = [];
16
+ this.visitedNodes = new Set();
17
+ this.isRootVisit = true;
18
+ this.handlers = new Map();
19
+ // Setup handlers for all component types that might contain CommonTables
20
+ // SelectQuery types
21
+ this.handlers.set(SimpleSelectQuery.kind, (expr) => this.visitSimpleSelectQuery(expr));
22
+ this.handlers.set(BinarySelectQuery.kind, (expr) => this.visitBinarySelectQuery(expr));
23
+ this.handlers.set(ValuesQuery.kind, (expr) => this.visitValuesQuery(expr));
24
+ // WITH clause that directly contains CommonTables
25
+ this.handlers.set(WithClause.kind, (expr) => this.visitWithClause(expr));
26
+ this.handlers.set(CommonTable.kind, (expr) => this.visitCommonTable(expr));
27
+ // SelectComponent types
28
+ this.handlers.set(SelectItem.kind, (expr) => this.visitSelectItem(expr));
29
+ // Identifiers and raw strings (leaf nodes that don't need traversal)
30
+ this.handlers.set(IdentifierString.kind, (expr) => this.visitIdentifierString(expr));
31
+ this.handlers.set(RawString.kind, (expr) => this.visitRawString(expr));
32
+ this.handlers.set(ColumnReference.kind, (expr) => this.visitColumnReference(expr));
33
+ this.handlers.set(ParameterExpression.kind, (expr) => this.visitParameterExpression(expr));
34
+ this.handlers.set(LiteralValue.kind, (expr) => this.visitLiteralValue(expr));
35
+ // Source components
36
+ this.handlers.set(SourceExpression.kind, (expr) => this.visitSourceExpression(expr));
37
+ this.handlers.set(TableSource.kind, (expr) => this.visitTableSource(expr));
38
+ this.handlers.set(ParenSource.kind, (expr) => this.visitParenSource(expr));
39
+ // Subqueries and inline queries
40
+ this.handlers.set(SubQuerySource.kind, (expr) => this.visitSubQuerySource(expr));
41
+ this.handlers.set(InlineQuery.kind, (expr) => this.visitInlineQuery(expr));
42
+ // FROM and JOIN clauses
43
+ this.handlers.set(FromClause.kind, (expr) => this.visitFromClause(expr));
44
+ this.handlers.set(JoinClause.kind, (expr) => this.visitJoinClause(expr));
45
+ this.handlers.set(JoinOnClause.kind, (expr) => this.visitJoinOnClause(expr));
46
+ this.handlers.set(JoinUsingClause.kind, (expr) => this.visitJoinUsingClause(expr));
47
+ // WHERE clause
48
+ this.handlers.set(WhereClause.kind, (expr) => this.visitWhereClause(expr));
49
+ // Value components that might contain subqueries
50
+ this.handlers.set(ParenExpression.kind, (expr) => this.visitParenExpression(expr));
51
+ this.handlers.set(BinaryExpression.kind, (expr) => this.visitBinaryExpression(expr));
52
+ this.handlers.set(UnaryExpression.kind, (expr) => this.visitUnaryExpression(expr));
53
+ this.handlers.set(CaseExpression.kind, (expr) => this.visitCaseExpression(expr));
54
+ this.handlers.set(CaseKeyValuePair.kind, (expr) => this.visitCaseKeyValuePair(expr));
55
+ this.handlers.set(SwitchCaseArgument.kind, (expr) => this.visitSwitchCaseArgument(expr));
56
+ this.handlers.set(BetweenExpression.kind, (expr) => this.visitBetweenExpression(expr));
57
+ this.handlers.set(FunctionCall.kind, (expr) => this.visitFunctionCall(expr));
58
+ this.handlers.set(ArrayExpression.kind, (expr) => this.visitArrayExpression(expr));
59
+ this.handlers.set(TupleExpression.kind, (expr) => this.visitTupleExpression(expr));
60
+ this.handlers.set(CastExpression.kind, (expr) => this.visitCastExpression(expr));
61
+ this.handlers.set(WindowFrameExpression.kind, (expr) => this.visitWindowFrameExpression(expr));
62
+ this.handlers.set(WindowFrameSpec.kind, (expr) => this.visitWindowFrameSpec(expr));
63
+ this.handlers.set(TypeValue.kind, (expr) => this.visitTypeValue(expr));
64
+ // Add handlers for other clause types
65
+ this.handlers.set(SelectClause.kind, (expr) => this.visitSelectClause(expr));
66
+ this.handlers.set(GroupByClause.kind, (expr) => this.visitGroupByClause(expr));
67
+ this.handlers.set(HavingClause.kind, (expr) => this.visitHavingClause(expr));
68
+ this.handlers.set(OrderByClause.kind, (expr) => this.visitOrderByClause(expr));
69
+ this.handlers.set(WindowFrameClause.kind, (expr) => this.visitWindowFrameClause(expr));
70
+ this.handlers.set(LimitClause.kind, (expr) => this.visitLimitClause(expr));
71
+ this.handlers.set(ForClause.kind, (expr) => this.visitForClause(expr));
72
+ this.handlers.set(OrderByItem.kind, (expr) => this.visitOrderByItem(expr));
73
+ }
74
+ /**
75
+ * Get all collected CommonTables
76
+ */
77
+ getCommonTables() {
78
+ return this.commonTables;
79
+ }
80
+ /**
81
+ * Reset the collection of CommonTables
82
+ */
83
+ reset() {
84
+ this.commonTables = [];
85
+ this.visitedNodes.clear();
86
+ }
87
+ collect(query) {
88
+ // Visit the query to collect all CommonTables
89
+ this.visit(query);
90
+ return this.getCommonTables();
91
+ }
92
+ /**
93
+ * Main entry point for the visitor pattern.
94
+ * Implements the shallow visit pattern to distinguish between root and recursive visits.
95
+ */
96
+ visit(arg) {
97
+ // If not a root visit, just visit the node and return
98
+ if (!this.isRootVisit) {
99
+ this.visitNode(arg);
100
+ return;
101
+ }
102
+ // If this is a root visit, we need to reset the state
103
+ this.reset();
104
+ this.isRootVisit = false;
105
+ try {
106
+ this.visitNode(arg);
107
+ }
108
+ finally {
109
+ // Regardless of success or failure, reset the root visit flag
110
+ this.isRootVisit = true;
111
+ }
112
+ }
113
+ /**
114
+ * Internal visit method used for all nodes.
115
+ * This separates the visit flag management from the actual node visitation logic.
116
+ */
117
+ visitNode(arg) {
118
+ var _a, _b;
119
+ // Skip if we've already visited this node to prevent infinite recursion
120
+ if (this.visitedNodes.has(arg)) {
121
+ return;
122
+ }
123
+ // Mark as visited
124
+ this.visitedNodes.add(arg);
125
+ const handler = this.handlers.get(arg.getKind());
126
+ if (handler) {
127
+ handler(arg);
128
+ return;
129
+ }
130
+ // Provide more detailed error message
131
+ const kindSymbol = ((_a = arg.getKind()) === null || _a === void 0 ? void 0 : _a.toString()) || 'unknown';
132
+ const constructor = ((_b = arg.constructor) === null || _b === void 0 ? void 0 : _b.name) || 'unknown';
133
+ throw new Error(`No handler for ${constructor} with kind ${kindSymbol}. Consider adding a handler for this type.`);
134
+ }
135
+ visitSimpleSelectQuery(query) {
136
+ // The order matters here!
137
+ // First, visit all clauses that might contain nested CTEs
138
+ // to ensure inner CTEs are collected before outer CTEs
139
+ // Check FROM clause first (can contain subqueries with nested CTEs)
140
+ if (query.fromClause) {
141
+ query.fromClause.accept(this);
142
+ }
143
+ // Check WHERE clause (can contain subqueries with WITH clauses)
144
+ if (query.whereClause) {
145
+ query.whereClause.accept(this);
146
+ }
147
+ // Check other clauses that might contain CTEs
148
+ if (query.groupByClause) {
149
+ query.groupByClause.accept(this);
150
+ }
151
+ if (query.havingClause) {
152
+ query.havingClause.accept(this);
153
+ }
154
+ if (query.orderByClause) {
155
+ query.orderByClause.accept(this);
156
+ }
157
+ if (query.windowFrameClause) {
158
+ query.windowFrameClause.accept(this);
159
+ }
160
+ if (query.rowLimitClause) {
161
+ query.rowLimitClause.accept(this);
162
+ }
163
+ if (query.forClause) {
164
+ query.forClause.accept(this);
165
+ }
166
+ // Check SELECT clause
167
+ query.selectClause.accept(this);
168
+ // Finally check the WITH clause after all nested CTEs have been collected
169
+ // This ensures inner CTEs are collected before outer CTEs
170
+ if (query.WithClause) {
171
+ query.WithClause.accept(this);
172
+ }
173
+ }
174
+ visitBinarySelectQuery(query) {
175
+ // Visit both sides of the binary query (UNION, EXCEPT, etc.)
176
+ query.left.accept(this);
177
+ query.right.accept(this);
178
+ }
179
+ visitValuesQuery(query) {
180
+ // VALUES queries might contain subqueries in tuple expressions
181
+ for (const tuple of query.tuples) {
182
+ tuple.accept(this);
183
+ }
184
+ }
185
+ visitWithClause(withClause) {
186
+ // Visit each CommonTable
187
+ // Simply process tables in sequence
188
+ // Note: visitCommonTable already handles nested CTEs
189
+ for (let i = 0; i < withClause.tables.length; i++) {
190
+ const commonTable = withClause.tables[i];
191
+ commonTable.accept(this);
192
+ }
193
+ }
194
+ visitCommonTable(commonTable) {
195
+ // Process CommonTable directly within the query
196
+ // Use the same instance to process the query instead of creating another Collector
197
+ commonTable.query.accept(this);
198
+ // Add current CTE after all nested CTEs have been added
199
+ this.commonTables.push(commonTable);
200
+ }
201
+ visitSelectClause(clause) {
202
+ // Check each item in the select clause
203
+ for (const item of clause.items) {
204
+ item.accept(this);
205
+ }
206
+ }
207
+ visitSelectItem(item) {
208
+ // Select items might contain subqueries
209
+ item.value.accept(this);
210
+ }
211
+ visitFromClause(fromClause) {
212
+ // Check the source
213
+ fromClause.source.accept(this);
214
+ // Check joins
215
+ if (fromClause.joins) {
216
+ for (const join of fromClause.joins) {
217
+ join.accept(this);
218
+ }
219
+ }
220
+ }
221
+ visitSourceExpression(source) {
222
+ source.datasource.accept(this);
223
+ // The alias part doesn't contain subqueries so we skip it
224
+ }
225
+ visitTableSource(source) {
226
+ // Table sources don't contain subqueries, nothing to do
227
+ }
228
+ visitParenSource(source) {
229
+ source.source.accept(this);
230
+ }
231
+ visitSubQuerySource(subQuery) {
232
+ subQuery.query.accept(this);
233
+ }
234
+ visitInlineQuery(inlineQuery) {
235
+ inlineQuery.selectQuery.accept(this);
236
+ }
237
+ visitJoinClause(joinClause) {
238
+ // Check join source
239
+ joinClause.source.accept(this);
240
+ // Check join condition
241
+ if (joinClause.condition) {
242
+ joinClause.condition.accept(this);
243
+ }
244
+ }
245
+ visitJoinOnClause(joinOn) {
246
+ joinOn.condition.accept(this);
247
+ }
248
+ visitJoinUsingClause(joinUsing) {
249
+ joinUsing.condition.accept(this);
250
+ }
251
+ visitWhereClause(whereClause) {
252
+ whereClause.condition.accept(this);
253
+ }
254
+ visitGroupByClause(clause) {
255
+ for (const item of clause.grouping) {
256
+ item.accept(this);
257
+ }
258
+ }
259
+ visitHavingClause(clause) {
260
+ clause.condition.accept(this);
261
+ }
262
+ visitOrderByClause(clause) {
263
+ for (const item of clause.order) {
264
+ item.accept(this);
265
+ }
266
+ }
267
+ visitWindowFrameClause(clause) {
268
+ clause.expression.accept(this);
269
+ }
270
+ visitLimitClause(clause) {
271
+ clause.limit.accept(this);
272
+ if (clause.offset) {
273
+ clause.offset.accept(this);
274
+ }
275
+ }
276
+ visitForClause(clause) {
277
+ // FOR clause doesn't contain subqueries
278
+ }
279
+ visitOrderByItem(item) {
280
+ item.value.accept(this);
281
+ }
282
+ visitParenExpression(expr) {
283
+ expr.expression.accept(this);
284
+ }
285
+ visitBinaryExpression(expr) {
286
+ expr.left.accept(this);
287
+ expr.right.accept(this);
288
+ }
289
+ visitUnaryExpression(expr) {
290
+ expr.expression.accept(this);
291
+ }
292
+ visitCaseExpression(expr) {
293
+ if (expr.condition) {
294
+ expr.condition.accept(this);
295
+ }
296
+ expr.switchCase.accept(this);
297
+ }
298
+ visitSwitchCaseArgument(switchCase) {
299
+ // Check all case expressions
300
+ for (const caseItem of switchCase.cases) {
301
+ caseItem.accept(this);
302
+ }
303
+ // Check ELSE expression
304
+ if (switchCase.elseValue) {
305
+ switchCase.elseValue.accept(this);
306
+ }
307
+ }
308
+ visitCaseKeyValuePair(pair) {
309
+ // Check the WHEN condition
310
+ pair.key.accept(this);
311
+ // Check the THEN value
312
+ pair.value.accept(this);
313
+ }
314
+ visitBetweenExpression(expr) {
315
+ expr.expression.accept(this);
316
+ expr.lower.accept(this);
317
+ expr.upper.accept(this);
318
+ }
319
+ visitFunctionCall(func) {
320
+ if (func.argument) {
321
+ func.argument.accept(this);
322
+ }
323
+ // Check OVER clause if present
324
+ if (func.over) {
325
+ func.over.accept(this);
326
+ }
327
+ }
328
+ visitArrayExpression(expr) {
329
+ expr.expression.accept(this);
330
+ }
331
+ visitTupleExpression(expr) {
332
+ // Check each value in the tuple for possible subqueries
333
+ for (const value of expr.values) {
334
+ value.accept(this);
335
+ }
336
+ }
337
+ visitCastExpression(expr) {
338
+ // Check the input expression
339
+ expr.input.accept(this);
340
+ // Check the type expression
341
+ expr.castType.accept(this);
342
+ }
343
+ visitTypeValue(expr) {
344
+ // Visit the argument if present
345
+ if (expr.argument) {
346
+ expr.argument.accept(this);
347
+ }
348
+ // The type itself doesn't contain subqueries
349
+ }
350
+ visitWindowFrameExpression(expr) {
351
+ if (expr.partition) {
352
+ expr.partition.accept(this);
353
+ }
354
+ if (expr.order) {
355
+ expr.order.accept(this);
356
+ }
357
+ if (expr.frameSpec) {
358
+ expr.frameSpec.accept(this);
359
+ }
360
+ }
361
+ visitWindowFrameSpec(spec) {
362
+ // WindowFrameSpec is a simple value object, nothing to traverse
363
+ }
364
+ visitIdentifierString(ident) {
365
+ // Leaf node, nothing to traverse
366
+ }
367
+ visitRawString(raw) {
368
+ // Leaf node, nothing to traverse
369
+ }
370
+ visitColumnReference(column) {
371
+ // Column references don't have subqueries
372
+ }
373
+ visitParameterExpression(param) {
374
+ // Parameter expressions don't have child components
375
+ }
376
+ visitLiteralValue(value) {
377
+ // Literal values are leaf nodes
378
+ }
379
+ }
380
+ //# sourceMappingURL=CTECollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTECollector.js","sourceRoot":"","sources":["../../../src/transformers/CTECollector.ts"],"names":[],"mappings":"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"}