rawsql-ts 0.1.0-beta.11 → 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 (200) hide show
  1. package/README.md +22 -0
  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 +12 -1
@@ -0,0 +1,81 @@
1
+ import { CommonTable } from "../models/Clause";
2
+ import { SelectQuery } from "../models/SelectQuery";
3
+ import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
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 declare class CTECollector implements SqlComponentVisitor<void> {
14
+ private handlers;
15
+ private commonTables;
16
+ private visitedNodes;
17
+ private isRootVisit;
18
+ constructor();
19
+ /**
20
+ * Get all collected CommonTables
21
+ */
22
+ getCommonTables(): CommonTable[];
23
+ /**
24
+ * Reset the collection of CommonTables
25
+ */
26
+ private reset;
27
+ collect(query: SelectQuery): CommonTable[];
28
+ /**
29
+ * Main entry point for the visitor pattern.
30
+ * Implements the shallow visit pattern to distinguish between root and recursive visits.
31
+ */
32
+ visit(arg: SqlComponent): void;
33
+ /**
34
+ * Internal visit method used for all nodes.
35
+ * This separates the visit flag management from the actual node visitation logic.
36
+ */
37
+ private visitNode;
38
+ private visitSimpleSelectQuery;
39
+ private visitBinarySelectQuery;
40
+ private visitValuesQuery;
41
+ private visitWithClause;
42
+ private visitCommonTable;
43
+ private visitSelectClause;
44
+ private visitSelectItem;
45
+ private visitFromClause;
46
+ private visitSourceExpression;
47
+ private visitTableSource;
48
+ private visitParenSource;
49
+ private visitSubQuerySource;
50
+ private visitInlineQuery;
51
+ private visitJoinClause;
52
+ private visitJoinOnClause;
53
+ private visitJoinUsingClause;
54
+ private visitWhereClause;
55
+ private visitGroupByClause;
56
+ private visitHavingClause;
57
+ private visitOrderByClause;
58
+ private visitWindowFrameClause;
59
+ private visitLimitClause;
60
+ private visitForClause;
61
+ private visitOrderByItem;
62
+ private visitParenExpression;
63
+ private visitBinaryExpression;
64
+ private visitUnaryExpression;
65
+ private visitCaseExpression;
66
+ private visitSwitchCaseArgument;
67
+ private visitCaseKeyValuePair;
68
+ private visitBetweenExpression;
69
+ private visitFunctionCall;
70
+ private visitArrayExpression;
71
+ private visitTupleExpression;
72
+ private visitCastExpression;
73
+ private visitTypeValue;
74
+ private visitWindowFrameExpression;
75
+ private visitWindowFrameSpec;
76
+ private visitIdentifierString;
77
+ private visitRawString;
78
+ private visitColumnReference;
79
+ private visitParameterExpression;
80
+ private visitLiteralValue;
81
+ }
@@ -0,0 +1,77 @@
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, SelectQuery, ValuesQuery } from "../models/SelectQuery";
3
+ import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
4
+ import { ArrayExpression, BetweenExpression, BinaryExpression, CaseExpression, CaseKeyValuePair, CastExpression, ColumnReference, FunctionCall, InlineQuery, ParenExpression, ParameterExpression, SwitchCaseArgument, TupleExpression, UnaryExpression, ValueComponent, WindowFrameExpression, IdentifierString, RawString, WindowFrameSpec, TypeValue } from "../models/ValueComponent";
5
+ /**
6
+ * A visitor that disables all WITH clauses in a SQL query structure.
7
+ * This processes and removes WITH clauses from:
8
+ * - Simple SELECT queries
9
+ * - Binary queries (UNION, EXCEPT, etc.)
10
+ * - Subqueries
11
+ * - Inline queries
12
+ *
13
+ * It maintains the CTE queries themselves but restructures the query to not use
14
+ * the WITH clause syntactical construct.
15
+ */
16
+ export declare class CTEDisabler implements SqlComponentVisitor<SqlComponent> {
17
+ private handlers;
18
+ private visitedNodes;
19
+ private isRootVisit;
20
+ constructor();
21
+ /**
22
+ * Reset the visited nodes tracking
23
+ */
24
+ private reset;
25
+ execute(arg: SqlComponent): SelectQuery;
26
+ /**
27
+ * Main entry point for the visitor pattern.
28
+ * Implements the shallow visit pattern to distinguish between root and recursive visits.
29
+ */
30
+ visit(arg: SqlComponent): SqlComponent;
31
+ /**
32
+ * Internal visit method used for all nodes.
33
+ * This separates the visit flag management from the actual node visitation logic.
34
+ */
35
+ private visitNode;
36
+ visitSimpleSelectQuery(arg: SimpleSelectQuery): SqlComponent;
37
+ visitBinarySelectQuery(query: BinarySelectQuery): SqlComponent;
38
+ visitValuesQuery(query: ValuesQuery): SqlComponent;
39
+ visitSelectClause(clause: SelectClause): SqlComponent;
40
+ visitFromClause(clause: FromClause): SqlComponent;
41
+ visitSubQuerySource(subQuery: SubQuerySource): SqlComponent;
42
+ visitInlineQuery(inlineQuery: InlineQuery): SqlComponent;
43
+ visitJoinClause(joinClause: JoinClause): SqlComponent;
44
+ visitJoinOnClause(joinOn: JoinOnClause): SqlComponent;
45
+ visitJoinUsingClause(joinUsing: JoinUsingClause): SqlComponent;
46
+ visitWhereClause(whereClause: WhereClause): SqlComponent;
47
+ visitGroupByClause(clause: GroupByClause): SqlComponent;
48
+ visitHavingClause(clause: HavingClause): SqlComponent;
49
+ visitOrderByClause(clause: OrderByClause): SqlComponent;
50
+ visitWindowFrameClause(clause: WindowFrameClause): SqlComponent;
51
+ visitLimitClause(clause: LimitClause): SqlComponent;
52
+ visitForClause(clause: ForClause): SqlComponent;
53
+ visitParenExpression(expr: ParenExpression): SqlComponent;
54
+ visitBinaryExpression(expr: BinaryExpression): SqlComponent;
55
+ visitUnaryExpression(expr: UnaryExpression): SqlComponent;
56
+ visitCaseExpression(expr: CaseExpression): SqlComponent;
57
+ visitSwitchCaseArgument(switchCase: SwitchCaseArgument): SqlComponent;
58
+ visitCaseKeyValuePair(pair: CaseKeyValuePair): SqlComponent;
59
+ visitBetweenExpression(expr: BetweenExpression): SqlComponent;
60
+ visitFunctionCall(func: FunctionCall): SqlComponent;
61
+ visitArrayExpression(expr: ArrayExpression): SqlComponent;
62
+ visitTupleExpression(expr: TupleExpression): SqlComponent;
63
+ visitCastExpression(expr: CastExpression): SqlComponent;
64
+ visitTypeValue(typeValue: TypeValue): SqlComponent;
65
+ visitSelectItem(item: SelectItem): SqlComponent;
66
+ visitIdentifierString(ident: IdentifierString): SqlComponent;
67
+ visitRawString(raw: RawString): SqlComponent;
68
+ visitColumnReference(column: ColumnReference): SqlComponent;
69
+ visitSourceExpression(source: SourceExpression): SqlComponent;
70
+ visitTableSource(source: TableSource): SqlComponent;
71
+ visitParenSource(source: ParenSource): SqlComponent;
72
+ visitParameterExpression(param: ParameterExpression): SqlComponent;
73
+ visitWindowFrameExpression(expr: WindowFrameExpression): SqlComponent;
74
+ visitWindowFrameSpec(spec: WindowFrameSpec): SqlComponent;
75
+ visitLiteralValue(value: ValueComponent): SqlComponent;
76
+ visitOrderByItem(item: OrderByItem): SqlComponent;
77
+ }
@@ -0,0 +1,40 @@
1
+ import { CommonTable } from "../models/Clause";
2
+ import { SelectQuery } from "../models/SelectQuery";
3
+ /**
4
+ * CTEInjector accepts a SelectQuery object and an array of CommonTables,
5
+ * and inserts Common Table Expressions into the query.
6
+ * For BinarySelectQuery, CTEs are inserted into the left query.
7
+ *
8
+ * Uses CTENameConflictResolver to resolve naming conflicts between CTEs.
9
+ */
10
+ export declare class CTEInjector {
11
+ private nameConflictResolver;
12
+ private cteCollector;
13
+ constructor();
14
+ /**
15
+ * Inserts Common Table Expressions into a SelectQuery object.
16
+ *
17
+ * @param query The query to inject CTEs into
18
+ * @param commonTables Array of CommonTables to be inserted
19
+ * @returns A new query with the injected CTEs
20
+ */
21
+ inject(query: SelectQuery, commonTables: CommonTable[]): SelectQuery;
22
+ /**
23
+ * Inserts Common Table Expressions into a SimpleSelectQuery.
24
+ *
25
+ * @param query The SimpleSelectQuery to inject CTEs into
26
+ * @param commonTables Array of CommonTables to be inserted
27
+ * @param needRecursive Boolean indicating if recursive WITH clause is needed
28
+ * @returns A new SimpleSelectQuery with the injected CTEs
29
+ */
30
+ private injectIntoSimpleQuery;
31
+ /**
32
+ * Inserts Common Table Expressions into the left query of a BinarySelectQuery.
33
+ *
34
+ * @param query The BinarySelectQuery to inject CTEs into
35
+ * @param commonTables Array of CommonTables to be inserted
36
+ * @param needRecursive Boolean indicating if recursive WITH clause is needed
37
+ * @returns A new BinarySelectQuery with the injected CTEs
38
+ */
39
+ private injectIntoBinaryQuery;
40
+ }
@@ -0,0 +1,25 @@
1
+ import { SelectQuery } from "../models/SelectQuery";
2
+ /**
3
+ * CTENormalizer is responsible for normalizing Common Table Expressions (CTEs) within SQL queries.
4
+ * It collects all CTEs from various parts of the query and consolidates them into a single WITH clause
5
+ * at the root level of the query.
6
+ *
7
+ * This implementation uses:
8
+ * 1. CommonTableCollector - to gather all CTEs from the query structure
9
+ * 2. WithClauseDisabler - to remove all original WITH clauses from the query
10
+ * 3. CTENameConflictResolver - to resolve name conflicts among CTEs and sort them properly
11
+ */
12
+ export declare class CTENormalizer {
13
+ /**
14
+ * Private constructor to prevent instantiation of this utility class.
15
+ */
16
+ private constructor();
17
+ /**
18
+ * Normalizes a SQL query by consolidating all CTEs into a single WITH clause
19
+ * at the root level of the query.
20
+ *
21
+ * @param query The query to normalize
22
+ * @returns A new normalized query with all CTEs at the root level
23
+ */
24
+ static normalize(query: SelectQuery): SelectQuery;
25
+ }
@@ -0,0 +1,82 @@
1
+ import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
2
+ interface FormatterConfig {
3
+ identifierEscape: {
4
+ start: string;
5
+ end: string;
6
+ };
7
+ parameterSymbol: string;
8
+ }
9
+ export declare class Formatter implements SqlComponentVisitor<string> {
10
+ private handlers;
11
+ private config;
12
+ constructor();
13
+ /**
14
+ * Formats the given SQL AST node into a SQL string.
15
+ * This is the recommended public API for users.
16
+ * @param arg The root SQL AST node to format.
17
+ * @param config (Optional) Formatter configuration.
18
+ * @returns The formatted SQL string.
19
+ */
20
+ format(arg: SqlComponent, config?: FormatterConfig | null): string;
21
+ /**
22
+ * Visitor entry point for SQL AST nodes.
23
+ * Note: This method is public only for interface compatibility.
24
+ * Users should call the format() method instead of visit() directly.
25
+ * (If you call visit() directly, you are basically breaking the abstraction, so don't do it!)
26
+ * @param arg The SQL AST node to visit.
27
+ * @returns The formatted SQL string for the node.
28
+ */
29
+ visit(arg: SqlComponent): string;
30
+ private visitBinarySelectQuery;
31
+ private visitWindowFrameBoundaryValue;
32
+ private visitWindowFrameBoundStatic;
33
+ private visitWindowFrameExpression;
34
+ private visitWindowFrameSpec;
35
+ private visitJoinUsingClause;
36
+ private visitJoinOnClause;
37
+ private visitTypeValue;
38
+ private visitStringSpecifierExpression;
39
+ private visitWithClause;
40
+ private visitCommonTable;
41
+ private visitDistinctOn;
42
+ private visitDistinct;
43
+ private visitHavingClause;
44
+ private visitGroupByClause;
45
+ private visitFromClause;
46
+ private visitJoinClause;
47
+ private visitSourceAliasExpression;
48
+ private visitSourceExpression;
49
+ private visitSubQuerySource;
50
+ private visitFunctionSource;
51
+ private visitTableSource;
52
+ private visitValueList;
53
+ private visitSwitchCaseArgument;
54
+ private visitColumnReference;
55
+ private visitFunctionCall;
56
+ private visitUnaryExpression;
57
+ private visitBinaryExpression;
58
+ private visitLiteralExpression;
59
+ private visitParameterExpression;
60
+ private visitSelectExpression;
61
+ private visitSelectClause;
62
+ private visitSelectQuery;
63
+ private visitArrayExpression;
64
+ private visitCaseExpression;
65
+ private visitCastExpression;
66
+ private visitBracketExpression;
67
+ private visitBetweenExpression;
68
+ private visitPartitionByClause;
69
+ private visitOrderByClause;
70
+ private visitOrderByItem;
71
+ private visitWindowFrameClause;
72
+ private visitLimitClause;
73
+ private visitFetchSpecification;
74
+ private visitForClause;
75
+ private visitWhereClause;
76
+ private visitInlineQuery;
77
+ private visitRawString;
78
+ private visitIdentifierString;
79
+ private visitValuesQuery;
80
+ private visitTupleExpression;
81
+ }
82
+ export {};
@@ -0,0 +1,41 @@
1
+ import { SelectQuery, SimpleSelectQuery } from "../models/SelectQuery";
2
+ /**
3
+ * Converts various SELECT query types to a standard SimpleSelectQuery format.
4
+ * - SimpleSelectQuery is returned as-is
5
+ * - BinarySelectQuery (UNION, etc.) is wrapped in a subquery: SELECT * FROM (original) AS bq
6
+ * - ValuesQuery is wrapped with sequentially numbered columns: SELECT * FROM (original) AS vq(column1, column2, ...)
7
+ */
8
+ export declare class QueryConverter {
9
+ /**
10
+ * Private constructor to prevent instantiation of this utility class.
11
+ */
12
+ private constructor();
13
+ /**
14
+ * Converts a SELECT query to a standard SimpleSelectQuery form.
15
+ *
16
+ * @param query The query to convert
17
+ * @returns A SimpleSelectQuery
18
+ */
19
+ static toSimple(query: SelectQuery): SimpleSelectQuery;
20
+ /**
21
+ * Converts a BinarySelectQuery (UNION, EXCEPT, etc.) to a SimpleSelectQuery
22
+ * by wrapping it in SELECT * FROM (original) AS bq
23
+ *
24
+ * @param query The binary query to convert
25
+ * @returns A SimpleSelectQuery
26
+ */
27
+ private static toSimpleBinaryQuery;
28
+ /**
29
+ * Converts a ValuesQuery to a SimpleSelectQuery with sequentially numbered columns
30
+ *
31
+ * @param query The VALUES query to convert
32
+ * @returns A SimpleSelectQuery
33
+ */
34
+ private static toSimpleValuesQuery;
35
+ /**
36
+ * Creates a SELECT clause with a single * (all columns) item
37
+ *
38
+ * @returns A SELECT clause with *
39
+ */
40
+ private static createSelectAllClause;
41
+ }
@@ -0,0 +1,60 @@
1
+ import { CommonTable } from "../models/Clause";
2
+ import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
3
+ import { ValueComponent } from "../models/ValueComponent";
4
+ import { TableColumnResolver } from "./TableColumnResolver";
5
+ /**
6
+ * A visitor that collects all SelectItem instances from a SQL query structure.
7
+ * This visitor scans through select clauses and collects all the SelectItem objects.
8
+ * It can also resolve wildcard selectors (table.* or *) using a provided table column resolver.
9
+ */
10
+ export declare class SelectValueCollector implements SqlComponentVisitor<void> {
11
+ private handlers;
12
+ private selectValues;
13
+ private visitedNodes;
14
+ private isRootVisit;
15
+ private tableColumnResolver?;
16
+ private commonTableCollector;
17
+ private commonTables;
18
+ initialCommonTables: CommonTable[] | null;
19
+ constructor(tableColumnResolver?: TableColumnResolver, initialCommonTables?: CommonTable[] | null);
20
+ /**
21
+ * Get all collected SelectItems as an array of objects with name and value properties
22
+ * @returns An array of objects with name (string) and value (ValueComponent) properties
23
+ */
24
+ getValues(): {
25
+ name: string;
26
+ value: ValueComponent;
27
+ }[];
28
+ /**
29
+ * Reset the collection of SelectItems
30
+ */
31
+ private reset;
32
+ collect(arg: SqlComponent): {
33
+ name: string;
34
+ value: ValueComponent;
35
+ }[];
36
+ /**
37
+ * Main entry point for the visitor pattern.
38
+ * Implements the shallow visit pattern to distinguish between root and recursive visits.
39
+ */
40
+ visit(arg: SqlComponent): void;
41
+ /**
42
+ * Internal visit method used for all nodes.
43
+ * This separates the visit flag management from the actual node visitation logic.
44
+ */
45
+ private visitNode;
46
+ /**
47
+ * Process a SimpleSelectQuery to collect data and store the current context
48
+ */
49
+ private visitSimpleSelectQuery;
50
+ private processFromClause;
51
+ private processJoinClause;
52
+ private processSourceExpression;
53
+ private visitSelectClause;
54
+ private processSelectItem;
55
+ private processValueComponent;
56
+ private visitSourceExpression;
57
+ private visitFromClause;
58
+ private addSelectValueAsUnique;
59
+ }
60
+ export { TableColumnResolver };
@@ -0,0 +1,70 @@
1
+ import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
2
+ import { ValueComponent } from "../models/ValueComponent";
3
+ import { TableColumnResolver } from "./SelectValueCollector";
4
+ /**
5
+ * A visitor that collects all ColumnReference instances from a SQL query structure.
6
+ * This visitor scans through all clauses and collects all unique ColumnReference objects.
7
+ * It does not scan Common Table Expressions (CTEs) or subqueries.
8
+ *
9
+ * Important: Only collects column references to tables defined in the root FROM/JOIN clauses,
10
+ * as these are the only columns that can be directly referenced in the query.
11
+ */
12
+ export declare class SelectableColumnCollector implements SqlComponentVisitor<void> {
13
+ private handlers;
14
+ private selectValues;
15
+ private visitedNodes;
16
+ private formatter;
17
+ private isRootVisit;
18
+ private tableColumnResolver?;
19
+ private commonTableCollector;
20
+ private selectValueCollector;
21
+ private commonTables;
22
+ constructor(tableColumnResolver?: TableColumnResolver);
23
+ getValues(): {
24
+ name: string;
25
+ value: ValueComponent;
26
+ }[];
27
+ collect(arg: SqlComponent): {
28
+ name: string;
29
+ value: ValueComponent;
30
+ }[];
31
+ /**
32
+ * Reset the collection of ColumnReferences
33
+ */
34
+ private reset;
35
+ private addSelectValueAsUnique;
36
+ /**
37
+ * Main entry point for the visitor pattern.
38
+ * Implements the shallow visit pattern to distinguish between root and recursive visits.
39
+ */
40
+ visit(arg: SqlComponent): void;
41
+ /**
42
+ * Internal visit method used for all nodes.
43
+ * This separates the visit flag management from the actual node visitation logic.
44
+ */
45
+ private visitNode;
46
+ /**
47
+ * Process a SimpleSelectQuery to collect ColumnReferences from all its clauses
48
+ */
49
+ private visitSimpleSelectQuery;
50
+ private visitSelectClause;
51
+ private visitFromClause;
52
+ private visitWhereClause;
53
+ private visitGroupByClause;
54
+ private visitHavingClause;
55
+ private visitOrderByClause;
56
+ private visitWindowFrameClause;
57
+ private visitLimitClause;
58
+ private visitJoinOnClause;
59
+ private visitJoinUsingClause;
60
+ private visitColumnReference;
61
+ private visitBinaryExpression;
62
+ private visitUnaryExpression;
63
+ private visitFunctionCall;
64
+ private visitParenExpression;
65
+ private visitCaseExpression;
66
+ private visitCastExpression;
67
+ private visitBetweenExpression;
68
+ private visitArrayExpression;
69
+ private visitValueList;
70
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Type definition for a function that resolves column names from a table name.
3
+ *
4
+ * This is used to provide table structure information (column names) for physical tables
5
+ * when expanding wildcard selectors (e.g., table.*) in SQL query analysis.
6
+ *
7
+ * @param tableName The name of the table to resolve columns for.
8
+ * @returns An array of column names (strings) for the specified table.
9
+ */
10
+ export type TableColumnResolver = (tableName: string) => string[];
@@ -0,0 +1,92 @@
1
+ import { TableSource } from "../models/Clause";
2
+ import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
3
+ /**
4
+ * A visitor that collects all table source names from a SQL query structure.
5
+ *
6
+ * When selectableOnly is true (default behavior):
7
+ * - Includes only table sources from FROM and JOIN clauses
8
+ * - Excludes inline queries, subqueries, and CTEs
9
+ *
10
+ * When selectableOnly is false:
11
+ * - Scans all parts of the query including WITH clauses, subqueries, etc.
12
+ * - Collects all table sources from the entire query
13
+ * - Excludes tables that are managed by CTEs
14
+ *
15
+ * For UNION-like queries, it scans both the left and right parts.
16
+ */
17
+ export declare class TableSourceCollector implements SqlComponentVisitor<void> {
18
+ private handlers;
19
+ private tableSources;
20
+ private visitedNodes;
21
+ private tableNameMap;
22
+ private selectableOnly;
23
+ private cteNames;
24
+ private isRootVisit;
25
+ constructor(selectableOnly?: boolean);
26
+ /**
27
+ * Gets all collected table sources
28
+ */
29
+ getTableSources(): TableSource[];
30
+ /**
31
+ * Reset the collection of table sources
32
+ */
33
+ private reset;
34
+ /**
35
+ * Gets a unique identifier for a table source
36
+ */
37
+ private getTableIdentifier;
38
+ collect(query: SqlComponent): TableSource[];
39
+ /**
40
+ * Main entry point for the visitor pattern.
41
+ * Implements the shallow visit pattern to distinguish between root and recursive visits.
42
+ */
43
+ visit(arg: SqlComponent): void;
44
+ /**
45
+ * Internal visit method used for all nodes.
46
+ * This separates the visit flag management from the actual node visitation logic.
47
+ */
48
+ private visitNode;
49
+ /**
50
+ * Collects all CTE names to exclude them from real table sources
51
+ */
52
+ private collectCTEs;
53
+ private visitSimpleSelectQuery;
54
+ private visitBinarySelectQuery;
55
+ private visitValuesQuery;
56
+ private visitWithClause;
57
+ private visitCommonTable;
58
+ private visitFromClause;
59
+ private visitSourceExpression;
60
+ private visitTableSource;
61
+ /**
62
+ * Checks if a table name is a CTE name
63
+ */
64
+ private isCTETable;
65
+ private visitParenSource;
66
+ private visitSubQuerySource;
67
+ private visitInlineQuery;
68
+ private visitJoinClause;
69
+ private visitJoinOnClause;
70
+ private visitJoinUsingClause;
71
+ private visitWhereClause;
72
+ private visitGroupByClause;
73
+ private visitHavingClause;
74
+ private visitOrderByClause;
75
+ private visitWindowFrameClause;
76
+ private visitLimitClause;
77
+ private visitForClause;
78
+ private visitOrderByItem;
79
+ private visitSelectClause;
80
+ private visitSelectItem;
81
+ private visitParenExpression;
82
+ private visitBinaryExpression;
83
+ private visitUnaryExpression;
84
+ private visitCaseExpression;
85
+ private visitSwitchCaseArgument;
86
+ private visitCaseKeyValuePair;
87
+ private visitBetweenExpression;
88
+ private visitFunctionCall;
89
+ private visitArrayExpression;
90
+ private visitTupleExpression;
91
+ private visitCastExpression;
92
+ }
@@ -0,0 +1,27 @@
1
+ import { SelectQuery } from "../models/SelectQuery";
2
+ /**
3
+ * UpstreamSelectQueryFinder searches upstream queries for the specified columns.
4
+ * If a query (including its upstream CTEs or subqueries) contains all columns,
5
+ * it returns the highest such SelectQuery. Otherwise, it searches downstream.
6
+ * For UNION queries, it checks each branch independently.
7
+ */
8
+ export declare class UpstreamSelectQueryFinder {
9
+ private tableColumnResolver?;
10
+ private columnCollector;
11
+ constructor(tableColumnResolver?: (tableName: string) => string[]);
12
+ /**
13
+ * Finds the highest SelectQuery containing all specified columns.
14
+ * @param query The root SelectQuery to search.
15
+ * @param columnNames Array of column names to check for.
16
+ * @returns An array of SelectQuery objects, or an empty array if not found.
17
+ */
18
+ find(query: SelectQuery, columnNames: string[]): SelectQuery[];
19
+ private handleTableSource;
20
+ private handleSubQuerySource;
21
+ /**
22
+ * Processes all source branches in a FROM clause and checks if all upstream queries contain the specified columns.
23
+ * Returns a flat array of SelectQuery if all branches are valid, otherwise null.
24
+ */
25
+ private processFromClauseBranches;
26
+ private findUpstream;
27
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Fast character classification utilities for SQL tokenization
3
+ */
4
+ export declare class CharLookupTable {
5
+ static isWhitespace(char: string): boolean;
6
+ static isDigit(char: string): boolean;
7
+ static isHexChar(char: string): boolean;
8
+ static isOperatorSymbol(char: string): boolean;
9
+ static isDelimiter(char: string): boolean;
10
+ static isNamedParameterPrefix(char: string): boolean;
11
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Utilities for string operations during tokenization
3
+ */
4
+ export declare class StringUtils {
5
+ /**
6
+ * Creates a visual representation of an error position in text
7
+ * @param input The input text
8
+ * @param errPosition The error position
9
+ * @returns A string with a caret pointing to the error position
10
+ */
11
+ static getDebugPositionInfo(input: string, errPosition: number): string;
12
+ /**
13
+ * Skip white space characters.
14
+ */
15
+ private static skipWhiteSpace;
16
+ /**
17
+ * Skip line comment.
18
+ */
19
+ private static readLineComment;
20
+ /**
21
+ * Skip block comment.
22
+ */
23
+ private static readBlockComment;
24
+ /**
25
+ * Skip white space characters and SQL comments.
26
+ * @returns Object containing the new position and an array of skipped comments
27
+ */
28
+ static readWhiteSpaceAndComment(input: string, position: number): {
29
+ position: number;
30
+ lines: string[];
31
+ };
32
+ /**
33
+ * Read a regular identifier.
34
+ */
35
+ static readRegularIdentifier(input: string, position: number): {
36
+ identifier: string;
37
+ newPosition: number;
38
+ };
39
+ static tryReadRegularIdentifier(input: string, position: number): {
40
+ identifier: string;
41
+ newPosition: number;
42
+ } | null;
43
+ }