rawsql-ts 0.1.0-beta.11 → 0.1.0-beta.14

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 (200) hide show
  1. package/README.md +78 -18
  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/package.json +4 -1
@@ -0,0 +1,321 @@
1
+ import { ForClause, FromClause, GroupByClause, HavingClause, JoinClause, JoinOnClause, JoinUsingClause, LimitClause, OrderByClause, OrderByItem, ParenSource, SelectClause, SelectItem, SourceExpression, SubQuerySource, TableSource, WhereClause, WindowFrameClause } 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 disables all WITH clauses in a SQL query structure.
6
+ * This processes and removes WITH clauses from:
7
+ * - Simple SELECT queries
8
+ * - Binary queries (UNION, EXCEPT, etc.)
9
+ * - Subqueries
10
+ * - Inline queries
11
+ *
12
+ * It maintains the CTE queries themselves but restructures the query to not use
13
+ * the WITH clause syntactical construct.
14
+ */
15
+ export class CTEDisabler {
16
+ constructor() {
17
+ this.visitedNodes = new Set();
18
+ this.isRootVisit = true;
19
+ this.handlers = new Map();
20
+ // Setup handlers for all component types that might contain WITH clauses
21
+ // SelectQuery types
22
+ this.handlers.set(SimpleSelectQuery.kind, (expr) => this.visitSimpleSelectQuery(expr));
23
+ this.handlers.set(BinarySelectQuery.kind, (expr) => this.visitBinarySelectQuery(expr));
24
+ this.handlers.set(ValuesQuery.kind, (expr) => this.visitValuesQuery(expr));
25
+ // SelectComponent types
26
+ this.handlers.set(SelectItem.kind, (expr) => this.visitSelectItem(expr));
27
+ // Identifiers and raw strings
28
+ this.handlers.set(IdentifierString.kind, (expr) => this.visitIdentifierString(expr));
29
+ this.handlers.set(RawString.kind, (expr) => this.visitRawString(expr));
30
+ this.handlers.set(ColumnReference.kind, (expr) => this.visitColumnReference(expr));
31
+ this.handlers.set(ParameterExpression.kind, (expr) => this.visitParameterExpression(expr));
32
+ this.handlers.set(LiteralValue.kind, (expr) => this.visitLiteralValue(expr));
33
+ // Source components
34
+ this.handlers.set(SourceExpression.kind, (expr) => this.visitSourceExpression(expr));
35
+ this.handlers.set(TableSource.kind, (expr) => this.visitTableSource(expr));
36
+ this.handlers.set(ParenSource.kind, (expr) => this.visitParenSource(expr));
37
+ // Subqueries and inline queries
38
+ this.handlers.set(SubQuerySource.kind, (expr) => this.visitSubQuerySource(expr));
39
+ this.handlers.set(InlineQuery.kind, (expr) => this.visitInlineQuery(expr));
40
+ // FROM and JOIN clauses
41
+ this.handlers.set(FromClause.kind, (expr) => this.visitFromClause(expr));
42
+ this.handlers.set(JoinClause.kind, (expr) => this.visitJoinClause(expr));
43
+ this.handlers.set(JoinOnClause.kind, (expr) => this.visitJoinOnClause(expr));
44
+ this.handlers.set(JoinUsingClause.kind, (expr) => this.visitJoinUsingClause(expr));
45
+ // WHERE clause
46
+ this.handlers.set(WhereClause.kind, (expr) => this.visitWhereClause(expr));
47
+ // Value components that might contain subqueries
48
+ this.handlers.set(ParenExpression.kind, (expr) => this.visitParenExpression(expr));
49
+ this.handlers.set(BinaryExpression.kind, (expr) => this.visitBinaryExpression(expr));
50
+ this.handlers.set(UnaryExpression.kind, (expr) => this.visitUnaryExpression(expr));
51
+ this.handlers.set(CaseExpression.kind, (expr) => this.visitCaseExpression(expr));
52
+ this.handlers.set(CaseKeyValuePair.kind, (expr) => this.visitCaseKeyValuePair(expr));
53
+ this.handlers.set(SwitchCaseArgument.kind, (expr) => this.visitSwitchCaseArgument(expr));
54
+ this.handlers.set(BetweenExpression.kind, (expr) => this.visitBetweenExpression(expr));
55
+ this.handlers.set(FunctionCall.kind, (expr) => this.visitFunctionCall(expr));
56
+ this.handlers.set(ArrayExpression.kind, (expr) => this.visitArrayExpression(expr));
57
+ this.handlers.set(TupleExpression.kind, (expr) => this.visitTupleExpression(expr));
58
+ this.handlers.set(CastExpression.kind, (expr) => this.visitCastExpression(expr));
59
+ this.handlers.set(WindowFrameExpression.kind, (expr) => this.visitWindowFrameExpression(expr));
60
+ this.handlers.set(WindowFrameSpec.kind, (expr) => this.visitWindowFrameSpec(expr));
61
+ this.handlers.set(TypeValue.kind, (expr) => this.visitTypeValue(expr));
62
+ // Add handlers for other clause types
63
+ this.handlers.set(SelectClause.kind, (expr) => this.visitSelectClause(expr));
64
+ this.handlers.set(GroupByClause.kind, (expr) => this.visitGroupByClause(expr));
65
+ this.handlers.set(HavingClause.kind, (expr) => this.visitHavingClause(expr));
66
+ this.handlers.set(OrderByClause.kind, (expr) => this.visitOrderByClause(expr));
67
+ this.handlers.set(WindowFrameClause.kind, (expr) => this.visitWindowFrameClause(expr));
68
+ this.handlers.set(LimitClause.kind, (expr) => this.visitLimitClause(expr));
69
+ this.handlers.set(ForClause.kind, (expr) => this.visitForClause(expr));
70
+ this.handlers.set(OrderByItem.kind, (expr) => this.visitOrderByItem(expr));
71
+ }
72
+ /**
73
+ * Reset the visited nodes tracking
74
+ */
75
+ reset() {
76
+ this.visitedNodes.clear();
77
+ }
78
+ execute(arg) {
79
+ // Reset the visited nodes before starting the visit
80
+ this.reset();
81
+ return this.visit(arg);
82
+ }
83
+ /**
84
+ * Main entry point for the visitor pattern.
85
+ * Implements the shallow visit pattern to distinguish between root and recursive visits.
86
+ */
87
+ visit(arg) {
88
+ // If not a root visit, just visit the node and return
89
+ if (!this.isRootVisit) {
90
+ return this.visitNode(arg);
91
+ }
92
+ // If this is a root visit, we need to reset the state
93
+ this.reset();
94
+ this.isRootVisit = false;
95
+ try {
96
+ return this.visitNode(arg);
97
+ }
98
+ finally {
99
+ // Regardless of success or failure, reset the root visit flag
100
+ this.isRootVisit = true;
101
+ }
102
+ }
103
+ /**
104
+ * Internal visit method used for all nodes.
105
+ * This separates the visit flag management from the actual node visitation logic.
106
+ */
107
+ visitNode(arg) {
108
+ var _a, _b;
109
+ // Check for circular references - if node already visited, return as is
110
+ if (this.visitedNodes.has(arg)) {
111
+ return arg;
112
+ }
113
+ // Mark as visited node
114
+ this.visitedNodes.add(arg);
115
+ const handler = this.handlers.get(arg.getKind());
116
+ if (handler) {
117
+ return handler(arg);
118
+ }
119
+ // Provide more detailed error message
120
+ const kindSymbol = ((_a = arg.getKind()) === null || _a === void 0 ? void 0 : _a.toString()) || 'unknown';
121
+ const constructor = ((_b = arg.constructor) === null || _b === void 0 ? void 0 : _b.name) || 'unknown';
122
+ throw new Error(`No handler for ${constructor} with kind ${kindSymbol}. Consider adding a handler for this type.`);
123
+ }
124
+ visitSimpleSelectQuery(arg) {
125
+ if (arg.WithClause) {
126
+ arg.WithClause.tables.forEach(table => {
127
+ this.visit(table.query);
128
+ });
129
+ }
130
+ arg.WithClause = null; // Explicitly remove WITH clause
131
+ // Visit the components of the SimpleSelectQuery
132
+ arg.selectClause = this.visit(arg.selectClause);
133
+ arg.fromClause = arg.fromClause ? this.visit(arg.fromClause) : null;
134
+ arg.whereClause = arg.whereClause ? this.visit(arg.whereClause) : null;
135
+ arg.groupByClause = arg.groupByClause ? this.visit(arg.groupByClause) : null;
136
+ arg.havingClause = arg.havingClause ? this.visit(arg.havingClause) : null;
137
+ arg.orderByClause = arg.orderByClause ? this.visit(arg.orderByClause) : null;
138
+ arg.windowFrameClause = arg.windowFrameClause ? this.visit(arg.windowFrameClause) : null;
139
+ arg.rowLimitClause = arg.rowLimitClause ? this.visit(arg.rowLimitClause) : null;
140
+ arg.forClause = arg.forClause ? this.visit(arg.forClause) : null;
141
+ return arg;
142
+ }
143
+ visitBinarySelectQuery(query) {
144
+ query.left = this.visit(query.left);
145
+ query.right = this.visit(query.right);
146
+ return query;
147
+ }
148
+ visitValuesQuery(query) {
149
+ const newTuples = query.tuples.map(tuple => this.visit(tuple));
150
+ return new ValuesQuery(newTuples);
151
+ }
152
+ visitSelectClause(clause) {
153
+ const newItems = clause.items.map(item => {
154
+ return this.visit(item);
155
+ });
156
+ return new SelectClause(newItems, clause.distinct);
157
+ }
158
+ visitFromClause(clause) {
159
+ const newSource = this.visit(clause.source);
160
+ const newJoins = clause.joins ? clause.joins.map(join => this.visit(join)) : null;
161
+ return new FromClause(newSource, newJoins);
162
+ }
163
+ visitSubQuerySource(subQuery) {
164
+ const newQuery = this.visit(subQuery.query);
165
+ return new SubQuerySource(newQuery);
166
+ }
167
+ visitInlineQuery(inlineQuery) {
168
+ const newQuery = this.visit(inlineQuery.selectQuery);
169
+ return new InlineQuery(newQuery);
170
+ }
171
+ visitJoinClause(joinClause) {
172
+ const newSource = this.visit(joinClause.source);
173
+ const newCondition = joinClause.condition ? this.visit(joinClause.condition) : null;
174
+ return new JoinClause(joinClause.joinType.value, newSource, newCondition, joinClause.lateral);
175
+ }
176
+ visitJoinOnClause(joinOn) {
177
+ const newCondition = this.visit(joinOn.condition);
178
+ return new JoinOnClause(newCondition);
179
+ }
180
+ visitJoinUsingClause(joinUsing) {
181
+ const newCondition = this.visit(joinUsing.condition);
182
+ return new JoinUsingClause(newCondition);
183
+ }
184
+ visitWhereClause(whereClause) {
185
+ const newCondition = this.visit(whereClause.condition);
186
+ return new WhereClause(newCondition);
187
+ }
188
+ visitGroupByClause(clause) {
189
+ const newGrouping = clause.grouping.map(item => this.visit(item));
190
+ return new GroupByClause(newGrouping);
191
+ }
192
+ visitHavingClause(clause) {
193
+ const newCondition = this.visit(clause.condition);
194
+ return new HavingClause(newCondition);
195
+ }
196
+ visitOrderByClause(clause) {
197
+ const newOrder = clause.order.map(item => this.visit(item));
198
+ return new OrderByClause(newOrder);
199
+ }
200
+ visitWindowFrameClause(clause) {
201
+ const newExpression = this.visit(clause.expression);
202
+ return new WindowFrameClause(clause.name.name, newExpression);
203
+ }
204
+ visitLimitClause(clause) {
205
+ const newLimit = this.visit(clause.limit);
206
+ const newOffset = clause.offset ? this.visit(clause.offset) : null;
207
+ return new LimitClause(newLimit, newOffset);
208
+ }
209
+ visitForClause(clause) {
210
+ return new ForClause(clause.lockMode);
211
+ }
212
+ visitParenExpression(expr) {
213
+ const newExpression = this.visit(expr.expression);
214
+ return new ParenExpression(newExpression);
215
+ }
216
+ visitBinaryExpression(expr) {
217
+ const newLeft = this.visit(expr.left);
218
+ const newRight = this.visit(expr.right);
219
+ return new BinaryExpression(newLeft, expr.operator.value, newRight);
220
+ }
221
+ visitUnaryExpression(expr) {
222
+ const newExpression = this.visit(expr.expression);
223
+ return new UnaryExpression(expr.operator.value, newExpression);
224
+ }
225
+ visitCaseExpression(expr) {
226
+ const newCondition = expr.condition ? this.visit(expr.condition) : null;
227
+ const newSwitchCase = this.visit(expr.switchCase);
228
+ return new CaseExpression(newCondition, newSwitchCase);
229
+ }
230
+ visitSwitchCaseArgument(switchCase) {
231
+ const newCases = switchCase.cases.map(caseItem => this.visit(caseItem));
232
+ const newElseValue = switchCase.elseValue ? this.visit(switchCase.elseValue) : null;
233
+ return new SwitchCaseArgument(newCases, newElseValue);
234
+ }
235
+ visitCaseKeyValuePair(pair) {
236
+ const newKey = this.visit(pair.key);
237
+ const newValue = this.visit(pair.value);
238
+ return new CaseKeyValuePair(newKey, newValue);
239
+ }
240
+ visitBetweenExpression(expr) {
241
+ const newExpression = this.visit(expr.expression);
242
+ const newLower = this.visit(expr.lower);
243
+ const newUpper = this.visit(expr.upper);
244
+ return new BetweenExpression(newExpression, newLower, newUpper, expr.negated);
245
+ }
246
+ visitFunctionCall(func) {
247
+ const newArgument = func.argument ? this.visit(func.argument) : null;
248
+ const newOver = func.over ? this.visit(func.over) : null;
249
+ return new FunctionCall(func.name.value, newArgument, newOver);
250
+ }
251
+ visitArrayExpression(expr) {
252
+ const newExpression = this.visit(expr.expression);
253
+ return new ArrayExpression(newExpression);
254
+ }
255
+ visitTupleExpression(expr) {
256
+ const newValues = expr.values.map(value => this.visit(value));
257
+ return new TupleExpression(newValues);
258
+ }
259
+ visitCastExpression(expr) {
260
+ const newInput = this.visit(expr.input);
261
+ const newCastType = this.visit(expr.castType);
262
+ return new CastExpression(newInput, newCastType);
263
+ }
264
+ visitTypeValue(typeValue) {
265
+ const newArgument = typeValue.argument ? this.visit(typeValue.argument) : null;
266
+ return new TypeValue(typeValue.type.value, newArgument);
267
+ }
268
+ visitSelectItem(item) {
269
+ const newValue = this.visit(item.value);
270
+ return new SelectItem(newValue, item.identifier.name);
271
+ }
272
+ visitIdentifierString(ident) {
273
+ // Identifiers don't have child components, so just return as-is
274
+ return ident;
275
+ }
276
+ visitRawString(raw) {
277
+ // Raw strings don't have child components, so just return as-is
278
+ return raw;
279
+ }
280
+ visitColumnReference(column) {
281
+ // Column references don't have subqueries, so just return as-is
282
+ return column;
283
+ }
284
+ visitSourceExpression(source) {
285
+ const newSource = this.visit(source.datasource);
286
+ // SourceAliasEpression don't contain subqueries, so just return as-is
287
+ const newAlias = source.aliasExpression;
288
+ return new SourceExpression(newSource, newAlias);
289
+ }
290
+ visitTableSource(source) {
291
+ // Table sources don't contain subqueries, so just return as-is
292
+ return source;
293
+ }
294
+ visitParenSource(source) {
295
+ const newSource = this.visit(source.source);
296
+ return new ParenSource(newSource);
297
+ }
298
+ visitParameterExpression(param) {
299
+ // Parameter expressions don't have child components, so just return as-is
300
+ return param;
301
+ }
302
+ visitWindowFrameExpression(expr) {
303
+ const newPartition = expr.partition ? this.visit(expr.partition) : null;
304
+ const newOrder = expr.order ? this.visit(expr.order) : null;
305
+ const newFrameSpec = expr.frameSpec ? this.visit(expr.frameSpec) : null;
306
+ return new WindowFrameExpression(newPartition, newOrder, newFrameSpec);
307
+ }
308
+ visitWindowFrameSpec(spec) {
309
+ // WindowFrameSpec is a simple value object, so return as-is
310
+ return spec;
311
+ }
312
+ visitLiteralValue(value) {
313
+ // Literal values are returned as-is
314
+ return value;
315
+ }
316
+ visitOrderByItem(item) {
317
+ const newValue = this.visit(item.value);
318
+ return new OrderByItem(newValue, item.sortDirection, item.nullsPosition);
319
+ }
320
+ }
321
+ //# sourceMappingURL=CTEDisabler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTEDisabler.js","sourceRoot":"","sources":["../../../src/transformers/CTEDisabler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { BinarySelectQuery, SimpleSelectQuery } from "../models/SelectQuery";
2
+ import { CTECollector } from "./CTECollector";
3
+ import { CTEBuilder } from "./CTEBuilder";
4
+ /**
5
+ * CTEInjector accepts a SelectQuery object and an array of CommonTables,
6
+ * and inserts Common Table Expressions into the query.
7
+ * For BinarySelectQuery, CTEs are inserted into the left query.
8
+ *
9
+ * Uses CTENameConflictResolver to resolve naming conflicts between CTEs.
10
+ */
11
+ export class CTEInjector {
12
+ constructor() {
13
+ this.nameConflictResolver = new CTEBuilder();
14
+ this.cteCollector = new CTECollector();
15
+ }
16
+ /**
17
+ * Inserts Common Table Expressions into a SelectQuery object.
18
+ *
19
+ * @param query The query to inject CTEs into
20
+ * @param commonTables Array of CommonTables to be inserted
21
+ * @returns A new query with the injected CTEs
22
+ */
23
+ inject(query, commonTables) {
24
+ // If the array is empty, return the query as is
25
+ if (commonTables.length === 0) {
26
+ return query;
27
+ }
28
+ // Collect CTEs from the query
29
+ commonTables.push(...this.cteCollector.collect(query));
30
+ // Use CTENameConflictResolver to resolve duplicates and sort in appropriate order
31
+ const resolvedWithCaluse = this.nameConflictResolver.build(commonTables);
32
+ // Process based on query type
33
+ if (query instanceof SimpleSelectQuery) {
34
+ return this.injectIntoSimpleQuery(query, resolvedWithCaluse);
35
+ }
36
+ else if (query instanceof BinarySelectQuery) {
37
+ return this.injectIntoBinaryQuery(query, resolvedWithCaluse);
38
+ }
39
+ // Unsupported query type
40
+ throw new Error("Unsupported query type");
41
+ }
42
+ /**
43
+ * Inserts Common Table Expressions into a SimpleSelectQuery.
44
+ *
45
+ * @param query The SimpleSelectQuery to inject CTEs into
46
+ * @param commonTables Array of CommonTables to be inserted
47
+ * @param needRecursive Boolean indicating if recursive WITH clause is needed
48
+ * @returns A new SimpleSelectQuery with the injected CTEs
49
+ */
50
+ injectIntoSimpleQuery(query, withClause) {
51
+ if (query.WithClause) {
52
+ throw new Error("The query already has a WITH clause. Please remove it before injecting new CTEs.");
53
+ }
54
+ // If the query doesn't have a WITH clause, set the new one
55
+ query.WithClause = withClause;
56
+ return query;
57
+ }
58
+ /**
59
+ * Inserts Common Table Expressions into the left query of a BinarySelectQuery.
60
+ *
61
+ * @param query The BinarySelectQuery to inject CTEs into
62
+ * @param commonTables Array of CommonTables to be inserted
63
+ * @param needRecursive Boolean indicating if recursive WITH clause is needed
64
+ * @returns A new BinarySelectQuery with the injected CTEs
65
+ */
66
+ injectIntoBinaryQuery(query, withClause) {
67
+ // Insert CTEs into the left query
68
+ if (query.left instanceof SimpleSelectQuery) {
69
+ this.injectIntoSimpleQuery(query.left, withClause);
70
+ return query;
71
+ }
72
+ else if (query.left instanceof BinarySelectQuery) {
73
+ this.injectIntoBinaryQuery(query.left, withClause);
74
+ return query;
75
+ }
76
+ throw new Error("Unsupported query type for BinarySelectQuery left side");
77
+ }
78
+ }
79
+ //# sourceMappingURL=CTEInjector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTEInjector.js","sourceRoot":"","sources":["../../../src/transformers/CTEInjector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAe,iBAAiB,EAAe,MAAM,uBAAuB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IAIpB;QACI,IAAI,CAAC,oBAAoB,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAkB,EAAE,YAA2B;QACzD,gDAAgD;QAChD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,8BAA8B;QAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,kFAAkF;QAClF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAEzE,8BAA8B;QAC9B,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACjE,CAAC;QAED,yBAAyB;QACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB,CAAC,KAAwB,EAAE,UAAsB;QAC1E,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;QACxG,CAAC;QACD,2DAA2D;QAC3D,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB,CAAC,KAAwB,EAAE,UAAsB;QAC1E,kCAAkC;QAClC,IAAI,KAAK,CAAC,IAAI,YAAY,iBAAiB,EAAE,CAAC;YAC1C,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnD,OAAO,KAAK,CAAC;QACjB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,YAAY,iBAAiB,EAAE,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC9E,CAAC;CACJ"}
@@ -0,0 +1,42 @@
1
+ import { CTECollector } from "./CTECollector";
2
+ import { CTEDisabler } from "./CTEDisabler";
3
+ import { CTEInjector } from "./CTEInjector";
4
+ /**
5
+ * CTENormalizer is responsible for normalizing Common Table Expressions (CTEs) within SQL queries.
6
+ * It collects all CTEs from various parts of the query and consolidates them into a single WITH clause
7
+ * at the root level of the query.
8
+ *
9
+ * This implementation uses:
10
+ * 1. CommonTableCollector - to gather all CTEs from the query structure
11
+ * 2. WithClauseDisabler - to remove all original WITH clauses from the query
12
+ * 3. CTENameConflictResolver - to resolve name conflicts among CTEs and sort them properly
13
+ */
14
+ export class CTENormalizer {
15
+ /**
16
+ * Private constructor to prevent instantiation of this utility class.
17
+ */
18
+ constructor() {
19
+ // This class is not meant to be instantiated.
20
+ }
21
+ /**
22
+ * Normalizes a SQL query by consolidating all CTEs into a single WITH clause
23
+ * at the root level of the query.
24
+ *
25
+ * @param query The query to normalize
26
+ * @returns A new normalized query with all CTEs at the root level
27
+ */
28
+ static normalize(query) {
29
+ // No need to normalize if the query doesn't have any CTEs
30
+ const cteCollector = new CTECollector();
31
+ const allCommonTables = cteCollector.collect(query);
32
+ if (allCommonTables.length === 0) {
33
+ return query;
34
+ }
35
+ // Remove all WITH clauses from the original query
36
+ const cteDisabler = new CTEDisabler();
37
+ cteDisabler.execute(query);
38
+ const injector = new CTEInjector();
39
+ return injector.inject(query, allCommonTables);
40
+ }
41
+ }
42
+ //# sourceMappingURL=CTENormalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTENormalizer.js","sourceRoot":"","sources":["../../../src/transformers/CTENormalizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IACtB;;OAEG;IACH;QACI,8CAA8C;IAClD,CAAC;IACD;;;;;;OAMG;IACI,MAAM,CAAC,SAAS,CAAC,KAAkB;QACtC,0DAA0D;QAC1D,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,kDAAkD;QAClD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACnD,CAAC;CACJ"}