rawsql-ts 0.1.3-beta → 0.3.0-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +251 -8
  2. package/dist/esm/index.js +1 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/models/Clause.js +2 -2
  5. package/dist/esm/models/Clause.js.map +1 -1
  6. package/dist/esm/models/CreateTableQuery.js +62 -0
  7. package/dist/esm/models/CreateTableQuery.js.map +1 -0
  8. package/dist/esm/models/InsertQuery.js +24 -0
  9. package/dist/esm/models/InsertQuery.js.map +1 -0
  10. package/dist/esm/models/Lexeme.js +15 -14
  11. package/dist/esm/models/Lexeme.js.map +1 -1
  12. package/dist/esm/models/SelectQuery.js +2 -1
  13. package/dist/esm/models/SelectQuery.js.map +1 -1
  14. package/dist/esm/models/SimpleSelectQuery.js +82 -16
  15. package/dist/esm/models/SimpleSelectQuery.js.map +1 -1
  16. package/dist/esm/parsers/CommandExpressionParser.js +4 -4
  17. package/dist/esm/parsers/CommandExpressionParser.js.map +1 -1
  18. package/dist/esm/parsers/FunctionExpressionParser.js +10 -10
  19. package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -1
  20. package/dist/esm/parsers/GroupByParser.js +1 -1
  21. package/dist/esm/parsers/GroupByParser.js.map +1 -1
  22. package/dist/esm/parsers/IdentifierParser.js +5 -4
  23. package/dist/esm/parsers/IdentifierParser.js.map +1 -1
  24. package/dist/esm/parsers/InsertQueryParser.js +104 -0
  25. package/dist/esm/parsers/InsertQueryParser.js.map +1 -0
  26. package/dist/esm/parsers/JoinClauseParser.js +1 -1
  27. package/dist/esm/parsers/JoinClauseParser.js.map +1 -1
  28. package/dist/esm/parsers/OrderByClauseParser.js +1 -1
  29. package/dist/esm/parsers/OrderByClauseParser.js.map +1 -1
  30. package/dist/esm/parsers/OverExpressionParser.js +2 -2
  31. package/dist/esm/parsers/OverExpressionParser.js.map +1 -1
  32. package/dist/esm/parsers/ParameterExpressionParser.js +11 -2
  33. package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -1
  34. package/dist/esm/parsers/ParenExpressionParser.js +1 -1
  35. package/dist/esm/parsers/ParenExpressionParser.js.map +1 -1
  36. package/dist/esm/parsers/PartitionByParser.js +1 -1
  37. package/dist/esm/parsers/PartitionByParser.js.map +1 -1
  38. package/dist/esm/parsers/SelectClauseParser.js +11 -5
  39. package/dist/esm/parsers/SelectClauseParser.js.map +1 -1
  40. package/dist/esm/parsers/SelectQueryParser.js +22 -1
  41. package/dist/esm/parsers/SelectQueryParser.js.map +1 -1
  42. package/dist/esm/parsers/SourceAliasExpressionParser.js +5 -5
  43. package/dist/esm/parsers/SourceAliasExpressionParser.js.map +1 -1
  44. package/dist/esm/parsers/SourceExpressionParser.js +1 -1
  45. package/dist/esm/parsers/SourceExpressionParser.js.map +1 -1
  46. package/dist/esm/parsers/SourceParser.js +10 -28
  47. package/dist/esm/parsers/SourceParser.js.map +1 -1
  48. package/dist/esm/parsers/SqlTokenizer.js +1 -1
  49. package/dist/esm/parsers/SqlTokenizer.js.map +1 -1
  50. package/dist/esm/parsers/UnaryExpressionParser.js +1 -1
  51. package/dist/esm/parsers/UnaryExpressionParser.js.map +1 -1
  52. package/dist/esm/parsers/ValueParser.js +42 -13
  53. package/dist/esm/parsers/ValueParser.js.map +1 -1
  54. package/dist/esm/parsers/ValuesQueryParser.js +3 -3
  55. package/dist/esm/parsers/ValuesQueryParser.js.map +1 -1
  56. package/dist/esm/parsers/WindowExpressionParser.js +3 -3
  57. package/dist/esm/parsers/WindowExpressionParser.js.map +1 -1
  58. package/dist/esm/parsers/WithClauseParser.js +1 -1
  59. package/dist/esm/parsers/WithClauseParser.js.map +1 -1
  60. package/dist/esm/tokenReaders/BaseTokenReader.js +1 -3
  61. package/dist/esm/tokenReaders/BaseTokenReader.js.map +1 -1
  62. package/dist/esm/tokenReaders/OperatorTokenReader.js +36 -9
  63. package/dist/esm/tokenReaders/OperatorTokenReader.js.map +1 -1
  64. package/dist/esm/tokenReaders/ParameterTokenReader.js +21 -1
  65. package/dist/esm/tokenReaders/ParameterTokenReader.js.map +1 -1
  66. package/dist/esm/tokenReaders/TypeTokenReader.js +3 -3
  67. package/dist/esm/tokenReaders/TypeTokenReader.js.map +1 -1
  68. package/dist/esm/transformers/CTEDisabler.js +2 -1
  69. package/dist/esm/transformers/CTEDisabler.js.map +1 -1
  70. package/dist/esm/transformers/Formatter.js +79 -8
  71. package/dist/esm/transformers/Formatter.js.map +1 -1
  72. package/dist/esm/transformers/QueryConverter.js +67 -12
  73. package/dist/esm/transformers/QueryConverter.js.map +1 -1
  74. package/dist/esm/transformers/SelectValueCollector.js +11 -16
  75. package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
  76. package/dist/esm/transformers/SelectableColumnCollector.js +7 -10
  77. package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -1
  78. package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  79. package/dist/esm/types/index.d.ts +1 -0
  80. package/dist/esm/types/models/Clause.d.ts +4 -5
  81. package/dist/esm/types/models/CreateTableQuery.d.ts +27 -0
  82. package/dist/esm/types/models/InsertQuery.d.ts +21 -0
  83. package/dist/esm/types/models/Lexeme.d.ts +16 -16
  84. package/dist/esm/types/models/SelectQuery.d.ts +3 -2
  85. package/dist/esm/types/models/SimpleSelectQuery.d.ts +31 -6
  86. package/dist/esm/types/parsers/InsertQueryParser.d.ts +17 -0
  87. package/dist/esm/types/parsers/SelectQueryParser.d.ts +7 -0
  88. package/dist/esm/types/tokenReaders/BaseTokenReader.d.ts +1 -1
  89. package/dist/esm/types/tokenReaders/ParameterTokenReader.d.ts +2 -1
  90. package/dist/esm/types/transformers/Formatter.d.ts +20 -3
  91. package/dist/esm/types/transformers/QueryConverter.d.ts +22 -2
  92. package/dist/esm/types/transformers/SelectValueCollector.d.ts +2 -4
  93. package/dist/esm/types/transformers/SelectableColumnCollector.d.ts +3 -3
  94. package/dist/esm/types/transformers/UpstreamSelectQueryFinder.d.ts +2 -2
  95. package/dist/esm/types/utils/extractNamespacesAndName.d.ts +5 -0
  96. package/dist/esm/types/utils/parseEscapedOrDotSeparatedIdentifiers.d.ts +9 -0
  97. package/dist/esm/utils/extractNamespacesAndName.js +16 -0
  98. package/dist/esm/utils/extractNamespacesAndName.js.map +1 -0
  99. package/dist/esm/utils/parseEscapedOrDotSeparatedIdentifiers.js +39 -0
  100. package/dist/esm/utils/parseEscapedOrDotSeparatedIdentifiers.js.map +1 -0
  101. package/dist/index.d.ts +1 -0
  102. package/dist/index.js +1 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/models/Clause.d.ts +4 -5
  105. package/dist/models/Clause.js +2 -2
  106. package/dist/models/Clause.js.map +1 -1
  107. package/dist/models/CreateTableQuery.d.ts +27 -0
  108. package/dist/models/CreateTableQuery.js +66 -0
  109. package/dist/models/CreateTableQuery.js.map +1 -0
  110. package/dist/models/InsertQuery.d.ts +21 -0
  111. package/dist/models/InsertQuery.js +28 -0
  112. package/dist/models/InsertQuery.js.map +1 -0
  113. package/dist/models/Lexeme.d.ts +16 -16
  114. package/dist/models/Lexeme.js +15 -14
  115. package/dist/models/Lexeme.js.map +1 -1
  116. package/dist/models/SelectQuery.d.ts +3 -2
  117. package/dist/models/SelectQuery.js +3 -1
  118. package/dist/models/SelectQuery.js.map +1 -1
  119. package/dist/models/SimpleSelectQuery.d.ts +31 -6
  120. package/dist/models/SimpleSelectQuery.js +82 -16
  121. package/dist/models/SimpleSelectQuery.js.map +1 -1
  122. package/dist/parsers/CommandExpressionParser.js +4 -4
  123. package/dist/parsers/CommandExpressionParser.js.map +1 -1
  124. package/dist/parsers/FunctionExpressionParser.js +10 -10
  125. package/dist/parsers/FunctionExpressionParser.js.map +1 -1
  126. package/dist/parsers/GroupByParser.js +1 -1
  127. package/dist/parsers/GroupByParser.js.map +1 -1
  128. package/dist/parsers/IdentifierParser.js +5 -4
  129. package/dist/parsers/IdentifierParser.js.map +1 -1
  130. package/dist/parsers/InsertQueryParser.d.ts +17 -0
  131. package/dist/parsers/InsertQueryParser.js +108 -0
  132. package/dist/parsers/InsertQueryParser.js.map +1 -0
  133. package/dist/parsers/JoinClauseParser.js +1 -1
  134. package/dist/parsers/JoinClauseParser.js.map +1 -1
  135. package/dist/parsers/OrderByClauseParser.js +1 -1
  136. package/dist/parsers/OrderByClauseParser.js.map +1 -1
  137. package/dist/parsers/OverExpressionParser.js +2 -2
  138. package/dist/parsers/OverExpressionParser.js.map +1 -1
  139. package/dist/parsers/ParameterExpressionParser.js +11 -2
  140. package/dist/parsers/ParameterExpressionParser.js.map +1 -1
  141. package/dist/parsers/ParenExpressionParser.js +1 -1
  142. package/dist/parsers/ParenExpressionParser.js.map +1 -1
  143. package/dist/parsers/PartitionByParser.js +1 -1
  144. package/dist/parsers/PartitionByParser.js.map +1 -1
  145. package/dist/parsers/SelectClauseParser.js +11 -5
  146. package/dist/parsers/SelectClauseParser.js.map +1 -1
  147. package/dist/parsers/SelectQueryParser.d.ts +7 -0
  148. package/dist/parsers/SelectQueryParser.js +22 -1
  149. package/dist/parsers/SelectQueryParser.js.map +1 -1
  150. package/dist/parsers/SourceAliasExpressionParser.js +5 -5
  151. package/dist/parsers/SourceAliasExpressionParser.js.map +1 -1
  152. package/dist/parsers/SourceExpressionParser.js +1 -1
  153. package/dist/parsers/SourceExpressionParser.js.map +1 -1
  154. package/dist/parsers/SourceParser.js +10 -28
  155. package/dist/parsers/SourceParser.js.map +1 -1
  156. package/dist/parsers/SqlTokenizer.js +1 -1
  157. package/dist/parsers/SqlTokenizer.js.map +1 -1
  158. package/dist/parsers/UnaryExpressionParser.js +1 -1
  159. package/dist/parsers/UnaryExpressionParser.js.map +1 -1
  160. package/dist/parsers/ValueParser.js +41 -12
  161. package/dist/parsers/ValueParser.js.map +1 -1
  162. package/dist/parsers/ValuesQueryParser.js +3 -3
  163. package/dist/parsers/ValuesQueryParser.js.map +1 -1
  164. package/dist/parsers/WindowExpressionParser.js +3 -3
  165. package/dist/parsers/WindowExpressionParser.js.map +1 -1
  166. package/dist/parsers/WithClauseParser.js +1 -1
  167. package/dist/parsers/WithClauseParser.js.map +1 -1
  168. package/dist/tokenReaders/BaseTokenReader.d.ts +1 -1
  169. package/dist/tokenReaders/BaseTokenReader.js +1 -3
  170. package/dist/tokenReaders/BaseTokenReader.js.map +1 -1
  171. package/dist/tokenReaders/OperatorTokenReader.js +36 -9
  172. package/dist/tokenReaders/OperatorTokenReader.js.map +1 -1
  173. package/dist/tokenReaders/ParameterTokenReader.d.ts +2 -1
  174. package/dist/tokenReaders/ParameterTokenReader.js +21 -1
  175. package/dist/tokenReaders/ParameterTokenReader.js.map +1 -1
  176. package/dist/tokenReaders/TypeTokenReader.js +3 -3
  177. package/dist/tokenReaders/TypeTokenReader.js.map +1 -1
  178. package/dist/transformers/CTEDisabler.js +2 -1
  179. package/dist/transformers/CTEDisabler.js.map +1 -1
  180. package/dist/transformers/Formatter.d.ts +20 -3
  181. package/dist/transformers/Formatter.js +79 -8
  182. package/dist/transformers/Formatter.js.map +1 -1
  183. package/dist/transformers/QueryConverter.d.ts +22 -2
  184. package/dist/transformers/QueryConverter.js +67 -12
  185. package/dist/transformers/QueryConverter.js.map +1 -1
  186. package/dist/transformers/SelectValueCollector.d.ts +2 -4
  187. package/dist/transformers/SelectValueCollector.js +10 -15
  188. package/dist/transformers/SelectValueCollector.js.map +1 -1
  189. package/dist/transformers/SelectableColumnCollector.d.ts +3 -3
  190. package/dist/transformers/SelectableColumnCollector.js +6 -9
  191. package/dist/transformers/SelectableColumnCollector.js.map +1 -1
  192. package/dist/transformers/UpstreamSelectQueryFinder.d.ts +2 -2
  193. package/dist/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  194. package/dist/utils/extractNamespacesAndName.d.ts +5 -0
  195. package/dist/utils/extractNamespacesAndName.js +18 -0
  196. package/dist/utils/extractNamespacesAndName.js.map +1 -0
  197. package/dist/utils/parseEscapedOrDotSeparatedIdentifiers.d.ts +9 -0
  198. package/dist/utils/parseEscapedOrDotSeparatedIdentifiers.js +42 -0
  199. package/dist/utils/parseEscapedOrDotSeparatedIdentifiers.js.map +1 -0
  200. package/package.json +1 -1
package/README.md CHANGED
@@ -10,7 +10,8 @@
10
10
 
11
11
  rawsql-ts is a high-performance SQL parser and AST transformer library written in TypeScript. It is designed for extensibility and advanced SQL analysis, with initial focus on PostgreSQL syntax but not limited to it. The library enables easy SQL parsing, transformation, and analysis for a wide range of SQL dialects.
12
12
 
13
- > **Note:** This library is currently in beta. The API may change until the v1.0 release.
13
+ > [!Note]
14
+ > This library is currently in beta. The API may change until the v1.0 release.
14
15
 
15
16
  ---
16
17
 
@@ -70,18 +71,113 @@ console.log(formattedSql);
70
71
 
71
72
  ---
72
73
 
74
+ ## Formatter Functionality
75
+
76
+ The `Formatter` class in rawsql-ts converts a parsed query object (AST) back into a formatted SQL string. This is useful for programmatically manipulating SQL and then generating a string for execution or display.
77
+
78
+ ### Preset Configurations (Formatter.PRESETS)
79
+
80
+ The `Formatter` class provides preset configurations for common SQL dialects. Use these presets to quickly format queries for MySQL, PostgreSQL, SQL Server, or SQLite without manually specifying options each time.
81
+
82
+ ```typescript
83
+ const mysqlSql = formatter.format(query, Formatter.PRESETS.mysql);
84
+ const pgSql = formatter.format(query, Formatter.PRESETS.postgres);
85
+ const mssqlSql = formatter.format(query, Formatter.PRESETS.sqlserver);
86
+ const sqliteSql = formatter.format(query, Formatter.PRESETS.sqlite);
87
+ ```
88
+
89
+ **Preset Details:**
90
+ - `Formatter.PRESETS.mysql`: Backtick identifier, `?` parameter, no named parameters
91
+ - `Formatter.PRESETS.postgres`: Double quote identifier, `:` parameter, named parameters supported
92
+ - `Formatter.PRESETS.sqlserver`: Square bracket identifier, `@` parameter, named parameters supported
93
+ - `Formatter.PRESETS.sqlite`: Double quote identifier, `:` parameter, named parameters supported
94
+
95
+ ### How to Customize Presets
96
+
97
+ You can override any preset option as needed. For example, to use variable-style parameters (`${name}`):
98
+
99
+ ```typescript
100
+ const variableSql = formatter.format(query, {
101
+ ...Formatter.PRESETS.postgres,
102
+ parameterSymbol: { start: '${', end: '}' },
103
+ });
104
+ // => select "user_id", "name" from "users" where "active" = ${active}
105
+ ```
106
+
107
+ Or to change only the identifier escape style:
108
+
109
+ ```typescript
110
+ const customSql = formatter.format(query, {
111
+ ...Formatter.PRESETS.mysql,
112
+ identifierEscape: { start: '"', end: '"' }
113
+ });
114
+ ```
115
+
116
+ ### Configurable Options
117
+
118
+ Formatting options are provided as the second argument to the `format()` method. You can customize:
119
+ - `identifierEscape`: How identifiers are escaped (e.g., `"`, `[`, `` ` ``)
120
+ - `parameterSymbol`: The symbol or pattern for parameters (e.g., `:`, `@`, `?`, or `{ start: '${', end: '}' }`)
121
+ - `supportNamedParameter`: If false, parameter names are omitted (for MySQL-style `?` only)
122
+
123
+ ### Usage Example
124
+
125
+ #### Using a Preset
126
+
127
+ ```typescript
128
+ import { SelectQueryParser, Formatter } from 'rawsql-ts';
129
+
130
+ const sql = `SELECT user_id, name FROM users WHERE active = TRUE`;
131
+ const query = SelectQueryParser.parse(sql);
132
+ const formatter = new Formatter();
133
+ const formattedSql = formatter.format(query, Formatter.PRESETS.postgres);
134
+ console.log(formattedSql);
135
+ // => select "user_id", "name" from "users" where "active" = true
136
+ ```
137
+
138
+ #### Using Manual Configuration
139
+
140
+ ```typescript
141
+ import { SelectQueryParser, Formatter } from 'rawsql-ts';
142
+
143
+ const sql = `SELECT user_id, name FROM users WHERE active = TRUE`;
144
+ const query = SelectQueryParser.parse(sql);
145
+ const formatter = new Formatter();
146
+ const formattedSql = formatter.format(query, {
147
+ identifierEscape: { start: '`', end: '`' },
148
+ parameterSymbol: '?',
149
+ supportNamedParameter: false,
150
+ });
151
+ console.log(formattedSql);
152
+ // => select `user_id`, `name` from `users` where `active` = ?
153
+ ```
154
+
155
+ rawsql-ts is designed to be flexible and support various SQL dialects. The `Formatter` class can be customized to handle different dialects by adjusting the identifier escape characters, parameter symbols, and named parameter support. This makes it easy to work with SQL queries for different database systems using a consistent API.
156
+
157
+ ---
158
+
73
159
  ## Main Parser Features
74
160
 
161
+ - All parsers automatically remove SQL comments before parsing.
162
+ - Detailed error messages are provided for all parsing errors.
163
+ - Highly accurate and advanced tokenization is used for robust SQL analysis.
164
+
165
+ > [!Note]
166
+ > All parsers in rawsql-ts have been tested with PostgreSQL syntax, but they are capable of parsing any generic SQL statement that does not use a DBMS-specific dialect.
167
+
75
168
  - **SelectQueryParser**
76
- The main class for converting SELECT and VALUES statements into AST. Fully supports CTEs (WITH), UNION/INTERSECT/EXCEPT, subqueries, and PostgreSQL-specific syntax.
169
+ The main class for converting SELECT and VALUES statements into AST. Fully supports CTEs (WITH), UNION/INTERSECT/EXCEPT, subqueries, and PostgreSQL-style syntax.
77
170
  - `parse(sql: string): SelectQuery`
78
171
  Converts a SQL string to an AST. Throws an exception on error.
79
- - Supports only PostgreSQL syntax
80
- - Only SELECT and VALUES are supported (INSERT/UPDATE/DELETE are not yet implemented)
81
- - SQL comments are automatically removed
82
- - Handles CTEs (WITH), UNION/INTERSECT/EXCEPT, subqueries, window functions, complex expressions, and functions
83
- - Provides detailed error messages
84
- - Highly accurate tokenization
172
+ - In this library, a "select query" is represented as one of the following types:
173
+ - `SimpleSelectQuery`: A standard SELECT statement with all major clauses (WHERE, GROUP BY, JOIN, etc.)
174
+ - `BinarySelectQuery`: A set operation query such as UNION, INTERSECT, or EXCEPT
175
+ - `ValuesQuery`: An inline VALUES table (e.g., `VALUES (1, 'a'), (2, 'b')`)
176
+
177
+ - **InsertQueryParser**
178
+ The main class for parsing `INSERT INTO` statements and converting them into AST. Supports PostgreSQL-style INSERT with or without column lists, as well as `INSERT ... SELECT` and `INSERT ... VALUES` forms.
179
+ - `parse(sql: string): InsertQuery`
180
+ Converts an INSERT SQL string to an AST. Throws an exception on error.
85
181
 
86
182
  ---
87
183
 
@@ -91,6 +187,8 @@ console.log(formattedSql);
91
187
  Represents a standard SELECT statement. Supports all major clauses such as WHERE, GROUP BY, JOIN, and CTE.
92
188
  - `toUnion`, `toUnionAll`, ... for UNION operations
93
189
  - `appendWhere`, `appendWhereRaw` to add WHERE conditions
190
+ - `appendWhereExpr` to add a WHERE condition using the column's SQL expression (see below)
191
+ - `overrideSelectItemExpr` to override a SELECT item using its SQL expression (see below)
94
192
  - `innerJoin`, `leftJoin`, ... to add JOINs
95
193
  - `toSource` to wrap as a subquery
96
194
  - `appendWith`, `appendWithRaw` to add CTEs
@@ -104,6 +202,126 @@ console.log(formattedSql);
104
202
  - **ValuesQuery**
105
203
  For inline tables like `VALUES (1, 'a'), (2, 'b')`.
106
204
  - Can be used as a subquery or converted to SELECT with QueryNormalizer
205
+ ---
206
+
207
+ ## Advanced Expression-based Methods
208
+
209
+ ### appendWhereExpr
210
+ `appendWhereExpr` is a highly important feature that enables you to add WHERE conditions using the SQL expression of a column, regardless of whether it is a direct column, an alias, a table alias, or even a calculated expression.
211
+
212
+ - **Basic Column**
213
+ - SQL: `select amount from sales`
214
+ - API: `query.appendWhereExpr('amount', expr => `${expr} > 100`)`
215
+ - Result: `where amount > 100`
216
+
217
+ - **Alias**
218
+ - SQL: `select fee as amount from sales`
219
+ - API: `query.appendWhereExpr('amount', expr => `${expr} > 100`)`
220
+ - Result: `where fee > 100`
221
+
222
+ - **Table Alias**
223
+ - SQL: `select s.fee as amount from sales as s`
224
+ - API: `query.appendWhereExpr('amount', expr => `${expr} > 100`)`
225
+ - Result: `where s.fee > 100`
226
+
227
+ - **Expression**
228
+ - SQL: `select quantity * pack_size as amount from sales`
229
+ - API: `query.appendWhereExpr('amount', expr => `${expr} > 100`)`
230
+ - Result: `where quantity * pack_size > 100`
231
+
232
+ As long as the column is named (or aliased) as `amount`, `appendWhereExpr` will detect and use the correct SQL expression for the WHERE clause—even if it is a complex calculation or uses table aliases.
233
+
234
+ ```typescript
235
+ // Works for any alias, table alias, or expression!
236
+ query.appendWhereExpr('amount', expr => `${expr} > 100`);
237
+ ```
238
+
239
+ #### Upstream Query Support
240
+
241
+ `Upstream Query Support` is a powerful extension of `appendWhereExpr` that allows you to add WHERE conditions to all relevant upstream queries that provide a specific column, regardless of the query structure. This means you can target columns defined in subqueries, CTEs (WITH clauses), or even branches of UNION/INTERSECT/EXCEPT, and the condition will be automatically inserted at the correct place in the SQL tree.
242
+
243
+ **What does this mean in practice?**
244
+ - If the column is defined in a subquery, the WHERE condition is added inside that subquery.
245
+ - If the column is defined in a CTE (WITH clause), the WHERE condition is added inside the CTE.
246
+ - If the column is provided by multiple upstream queries (e.g., UNION branches), the condition is added to all relevant branches.
247
+ - You do not need to know or traverse the query structure yourself—just specify the column name, and `appendWhereExpr` with `{ upstream: true }` will do the rest.
248
+
249
+ ##### Example: Filtering a CTE
250
+
251
+ ```typescript
252
+ const query = SelectQueryParser.parse(`
253
+ WITH temp_sales AS (
254
+ SELECT id, amount, date FROM sales WHERE date >= '2024-01-01'
255
+ )
256
+ SELECT * FROM temp_sales
257
+ `) as SimpleSelectQuery;
258
+
259
+ // Add a filter to the CTE using upstream support
260
+ query.appendWhereExpr('amount', expr => `${expr} > 100`, { upstream: true });
261
+
262
+ const sql = new Formatter().format(query);
263
+ console.log(sql);
264
+ // => with "temp_sales" as (select "id", "amount", "date" from "sales" where "date" >= '2024-01-01' and "amount" > 100) select * from "temp_sales"
265
+ ```
266
+
267
+ ##### Example: Filtering All Branches of a UNION
268
+
269
+ ```typescript
270
+ const query = SelectQueryParser.parse(`
271
+ WITH sales_transactions AS (
272
+ SELECT transaction_id, customer_id, amount, transaction_date FROM sales_schema.transactions WHERE transaction_date >= CURRENT_DATE - INTERVAL '90 days'
273
+ ),
274
+ support_transactions AS (
275
+ SELECT support_id AS transaction_id, user_id AS customer_id, fee AS amount, support_date AS transaction_date FROM support_schema.support_fees WHERE support_date >= CURRENT_DATE - INTERVAL '90 days'
276
+ )
277
+ SELECT * FROM (
278
+ SELECT * FROM sales_transactions
279
+ UNION ALL
280
+ SELECT * FROM support_transactions
281
+ ) d
282
+ ORDER BY transaction_date DESC
283
+ `) as SimpleSelectQuery;
284
+
285
+ // Add a filter to all upstream queries that provide 'amount'
286
+ query.appendWhereExpr('amount', expr => `${expr} > 100`, { upstream: true });
287
+
288
+ const sql = new Formatter().format(query);
289
+ console.log(sql);
290
+ // => with "sales_transactions" as (select ... where ... and "amount" > 100),
291
+ // "support_transactions" as (select ... where ... and "fee" > 100)
292
+ // select * from (... union all ...) as "d" order by "transaction_date" desc
293
+ ```
294
+
295
+ ### appendWhereExpr Use Cases
296
+
297
+ `appendWhereExpr` is especially useful in the following scenarios:
298
+
299
+ - **Dynamic Search Conditions for Complex Reports**
300
+ Easily inject arbitrary search filters into deeply nested or highly complex queries, such as those used in reporting or analytics dashboards. This enables flexible, user-driven filtering without manual SQL string manipulation.
301
+
302
+ - **Performance-Critical Query Construction**
303
+ Build high-performance queries by programmatically adding WHERE conditions only when needed, ensuring that unnecessary filters are not included and that the generated SQL remains as efficient as possible.
304
+
305
+ - **Generic Access Control and Security Filters**
306
+ Apply reusable access control or security-related WHERE clauses (e.g., tenant isolation, user-based restrictions) across all relevant queries, regardless of their internal structure. This helps enforce consistent data access policies throughout your application.
307
+
308
+ > [!TIP]
309
+ > Upstream Query Support is especially useful for large, complex SQL with multiple layers of subqueries, CTEs, or set operations. You can add filters or conditions without worrying about the internal structure—just specify the column name!
310
+ >
311
+ > You can focus on developing and maintaining RawSQL itself, without being bothered by troublesome variable search conditions.
312
+
313
+ ---
314
+
315
+ ### overrideSelectItemExpr
316
+ Overrides a SELECT item using its SQL expression. The callback receives the original SQL expression as a string and returns a new SQL string.
317
+
318
+ ```typescript
319
+ // Override the SELECT item 'journal_date' to use greatest(journal_date, DATE '2025-01-01')
320
+ query.overrideSelectItemExpr('journal_date', expr => `greatest(${expr}, DATE '2025-01-01')`);
321
+ ```
322
+ ---
323
+
324
+
107
325
 
108
326
  ---
109
327
 
@@ -129,6 +347,11 @@ A suite of utilities for transforming and analyzing SQL ASTs.
129
347
  Consolidates all CTEs into a single root-level WITH clause. Throws an error if duplicate CTE names with different definitions are found.
130
348
  - **QueryNormalizer**
131
349
  Converts any SELECT/UNION/VALUES query into a standard SimpleSelectQuery. Handles subquery wrapping and automatic column name generation.
350
+ - **QueryConverter**
351
+ Converts any SELECT/UNION/VALUES query into a standard SimpleSelectQuery. Handles subquery wrapping and automatic column name generation.
352
+ Supports CREATE TABLE ... AS SELECT ... conversion:
353
+ - `QueryConverter.toCreateTableQuery(query, tableName, isTemporary?)` creates a `CreateTableQuery` from any SELECT query.
354
+
132
355
  - **TableColumnResolver**
133
356
  A function type for resolving column names from a table name, mainly used for wildcard expansion (e.g., `table.*`). Used by analyzers like SelectValueCollector.
134
357
  ```typescript
@@ -169,7 +392,9 @@ Select values:
169
392
  name: user_name, value: "u"."user_name"
170
393
  name: email, value: "u"."email"
171
394
  */
395
+ ```
172
396
 
397
+ ```typescript
173
398
  // Collects selectable columns from the FROM/JOIN clauses.
174
399
  // You can get accurate information by specifying a TableColumnResolver.
175
400
  // If omitted, the information will be inferred from the query content.
@@ -190,7 +415,25 @@ Selectable columns:
190
415
  name: title, value: "p"."title"
191
416
  name: content, value: "p"."content"
192
417
  */
418
+ ```
419
+
420
+ ```typescript
421
+ // Create Table from SELECT Example
422
+ import { QueryConverter, SelectQueryParser, Formatter } from 'rawsql-ts';
423
+
424
+ const select = SelectQueryParser.parse('SELECT id, name FROM users');
425
+ const create = QueryConverter.toCreateTableQuery(select, 'my_table');
426
+ const sqlCreate = new Formatter().format(create);
427
+ console.log(sqlCreate);
428
+ // => create table "my_table" as select "id", "name" from "users"
429
+
430
+ const createTemp = QueryConverter.toCreateTableQuery(select, 'tmp_table', true);
431
+ const sqlTemp = new Formatter().format(createTemp);
432
+ console.log(sqlTemp);
433
+ // => create temporary table "tmp_table" as select "id", "name" from "users"
434
+ ```
193
435
 
436
+ ```typescript
194
437
  // Retrieves physical table sources.
195
438
  const tableSourceCollector = new TableSourceCollector();
196
439
  const sources = tableSourceCollector.collect(query);
package/dist/esm/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // Entry point for rawsql-ts package
2
2
  export * from './parsers/SelectQueryParser';
3
+ export * from './parsers/InsertQueryParser';
3
4
  export * from './models/BinarySelectQuery';
4
5
  export * from './models/SelectQuery';
5
6
  export * from './models/ValueComponent';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AAErC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,oEAAoE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AAErC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,oEAAoE"}
@@ -1,10 +1,10 @@
1
1
  import { SqlComponent } from "./SqlComponent";
2
2
  import { IdentifierString, RawString } from "./ValueComponent";
3
3
  export class SelectItem extends SqlComponent {
4
- constructor(value, name) {
4
+ constructor(value, name = null) {
5
5
  super();
6
6
  this.value = value;
7
- this.identifier = new IdentifierString(name);
7
+ this.identifier = name ? new IdentifierString(name) : null;
8
8
  }
9
9
  }
10
10
  SelectItem.kind = Symbol("SelectItem");
@@ -1 +1 @@
1
- {"version":3,"file":"Clause.js","sourceRoot":"","sources":["../../../src/models/Clause.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Clause.js","sourceRoot":"","sources":["../../../src/models/Clause.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAA0D,MAAM,kBAAkB,CAAC;AAEvH,MAAM,OAAO,UAAW,SAAQ,YAAY;IAIxC,YAAY,KAAqB,EAAE,OAAsB,IAAI;QACzD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;;AAPM,eAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAUvC,MAAM,OAAO,YAAa,SAAQ,YAAY;IAI1C,YAAY,KAAmB,EAAE,WAAqC,IAAI;QACtE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;;AAPM,iBAAI,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAYzC,MAAM,OAAO,QAAS,SAAQ,YAAY;IAEtC;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;;AAHM,aAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAMrC,MAAM,OAAO,UAAW,SAAQ,YAAY;IAGxC,YAAY,KAAqB;QAC7B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;;AALM,eAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AASvC,MAAM,OAAO,WAAY,SAAQ,YAAY;IAGzC,YAAY,SAAyB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;;AALM,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAQxC,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IAG/C,YAAY,KAAqB;QAC7B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;;AALM,sBAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAQ9C,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IAI/C,YAAY,IAAY,EAAE,UAAiC;QACvD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;;AAPM,sBAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAU9C,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,kCAAiB,CAAA;IACjB,oCAAmB,CAAA;AACvB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AACD,MAAM,CAAN,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,qCAAe,CAAA;IACf,mCAAa,CAAA;AACjB,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,QAG7B;AAID,MAAM,OAAO,aAAc,SAAQ,YAAY;IAG3C,YAAY,KAAyB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;;AALM,kBAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAQ1C,MAAM,OAAO,WAAY,SAAQ,YAAY;IAKzC,YAAY,UAA0B,EAAE,aAAmC,EAAE,aAAwC;QACjH,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;QACtF,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;;AATM,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAYxC,MAAM,OAAO,aAAc,SAAQ,YAAY;IAG3C,YAAY,UAA4B;QACpC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC/B,CAAC;;AALM,kBAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAQ1C,MAAM,OAAO,YAAa,SAAQ,YAAY;IAG1C,YAAY,SAAyB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;;AALM,iBAAI,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAazC,MAAM,OAAO,WAAY,SAAQ,YAAY;IAKzC,YAAY,UAA2B,EAAE,KAAa;QAClD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAAA,CAAC;QAC/G,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACjC,CAAC;IACM,aAAa;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAChG,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,CAAC;IACL,CAAC;;AAhBM,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAmBxC,MAAM,OAAO,cAAe,SAAQ,YAAY;IAI5C,YAAY,YAAoB,EAAE,QAA+B;QAC7D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;;AAPM,mBAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAU3C,MAAM,OAAO,WAAY,SAAQ,YAAY;IAGzC,YAAY,MAAuB;QAC/B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;;AALM,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAQxC,MAAM,OAAO,cAAe,SAAQ,YAAY;IAG5C,YAAY,KAAkB;QAC1B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;;AALM,mBAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAQ3C,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAI9C,YAAY,UAA2B,EAAE,eAA6C;QAClF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IACM,YAAY;QACf,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3C,CAAC;aACI,IAAI,IAAI,CAAC,UAAU,YAAY,WAAW,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;;AAhBM,qBAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAqB7C,MAAM,OAAO,YAAa,SAAQ,YAAY;IAG1C,YAAY,SAAyB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;;AALM,iBAAI,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAQzC,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAG7C,YAAY,SAAyB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;;AALM,oBAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAQ5C,MAAM,OAAO,UAAW,SAAQ,YAAY;IAMxC,YAAY,QAAgB,EAAE,MAAwB,EAAE,SAAwC,EAAE,OAAgB;QAC9G,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IACM,kBAAkB;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QAClD,CAAC;aACI,IAAI,IAAI,CAAC,MAAM,YAAY,WAAW,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;;AApBM,eAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAuBrC,MAAM,OAAO,UAAW,SAAQ,YAAY;IAIxC,YAAY,MAAwB,EAAE,IAAyB;QAC3D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IACM,kBAAkB;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QAClD,CAAC;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,YAAY,WAAW,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD;;OAEG;IACI,UAAU;QACb,MAAM,OAAO,GAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;;AA5BM,eAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AA+BvC,MAAM,OAAO,WAAY,SAAQ,YAAY;IAKzC,YAAY,KAAkB,EAAE,eAA+C,EAAE,YAA4B;QACzG,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,eAAe,GAAG,IAAI,qBAAqB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAC3C,CAAC;IACL,CAAC;IACM,kBAAkB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3C,CAAC;;AAhBM,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAmBxC,MAAM,OAAO,UAAW,SAAQ,YAAY;IAIxC,YAAY,SAAkB,EAAE,MAAqB;QACjD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;;AAPM,eAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAUvC,mEAAmE;AAEnE,MAAM,OAAO,WAAY,SAAQ,YAAY;IAIzC,YAAY,KAAqB,EAAE,MAA6B;QAC5D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;;AAPM,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAUxC,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;AACnB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAED,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACjB,mCAAsB,CAAA;IACtB,gCAAmB,CAAA;IACnB,kDAAqC,CAAA;AACzC,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAKhD,YAAY,IAAe,EAAE,KAAqB,EAAE,IAAsB;QACtE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;;AATM,uBAAI,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAY/C,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,6BAAiB,CAAA;IACjB,2BAAe,CAAA;IACf,kCAAsB,CAAA;IACtB,yCAA6B,CAAA;AACjC,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,OAAO,SAAU,SAAQ,YAAY;IAGvC,YAAY,QAAkB;QAC1B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;;AALM,cAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAQtC,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAInD,YAAY,KAAa,EAAE,WAA4B;QACnD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzG,CAAC;;AAPM,0BAAI,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { SqlComponent } from "./SqlComponent";
2
+ import { ColumnReference, FunctionCall, IdentifierString, RawString } from "./ValueComponent";
3
+ import { SimpleSelectQuery } from "./SimpleSelectQuery";
4
+ import { SelectClause, SelectItem, FromClause, TableSource, SourceExpression } from "./Clause";
5
+ import { SelectValueCollector } from "../transformers/SelectValueCollector";
6
+ // Represents a CREATE TABLE query model
7
+ // Supports temporary tables and AS SELECT ...
8
+ export class CreateTableQuery extends SqlComponent {
9
+ constructor(params) {
10
+ var _a;
11
+ super();
12
+ this.tableName = new IdentifierString(params.tableName);
13
+ this.isTemporary = (_a = params.isTemporary) !== null && _a !== void 0 ? _a : false;
14
+ this.asSelectQuery = params.asSelectQuery;
15
+ }
16
+ /**
17
+ * Returns a SelectQuery that selects all columns from this table.
18
+ */
19
+ getSelectQuery() {
20
+ let selectItems;
21
+ if (this.asSelectQuery) {
22
+ // Use SelectValueCollector to get columns from asSelectQuery
23
+ const collector = new SelectValueCollector();
24
+ const values = collector.collect(this.asSelectQuery);
25
+ selectItems = values.map(val => new SelectItem(val.value, val.name));
26
+ }
27
+ else {
28
+ // fallback: wildcard
29
+ selectItems = [new SelectItem(new RawString("*"))];
30
+ }
31
+ return new SimpleSelectQuery(null, // withClause
32
+ new SelectClause(selectItems), new FromClause(new SourceExpression(new TableSource(null, this.tableName.name), null), null // joins
33
+ ), null, // whereClause
34
+ null, // groupByClause
35
+ null, // havingClause
36
+ null, // orderByClause
37
+ null, // windowFrameClause
38
+ null, // rowLimitClause
39
+ null // forClause
40
+ );
41
+ }
42
+ /**
43
+ * Returns a SelectQuery that counts all rows in this table.
44
+ */
45
+ getCountQuery() {
46
+ return new SimpleSelectQuery(null, // withClause
47
+ new SelectClause([
48
+ new SelectItem(new FunctionCall("count", new ColumnReference(null, "*"), null))
49
+ ]), new FromClause(new SourceExpression(new TableSource(null, this.tableName.name), null), null // joins
50
+ ), null, // whereClause
51
+ null, // groupByClause
52
+ null, // havingClause
53
+ null, // orderByClause
54
+ null, // windowFrameClause
55
+ null, // rowLimitClause
56
+ null // forClause
57
+ );
58
+ }
59
+ }
60
+ /** SqlComponent kind symbol for visitor pattern */
61
+ CreateTableQuery.kind = Symbol("CreateTableQuery");
62
+ //# sourceMappingURL=CreateTableQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateTableQuery.js","sourceRoot":"","sources":["../../../src/models/CreateTableQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,wCAAwC;AACxC,8CAA8C;AAC9C,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAU9C,YAAY,MAIX;;QACG,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,GAAG,MAAA,MAAM,CAAC,WAAW,mCAAI,KAAK,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,cAAc;QACV,IAAI,WAAyB,CAAC;QAC9B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,6DAA6D;YAC7D,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACJ,qBAAqB;YACrB,WAAW,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,iBAAiB,CACxB,IAAI,EAAE,aAAa;QACnB,IAAI,YAAY,CAAC,WAAW,CAAC,EAC7B,IAAI,UAAU,CACV,IAAI,gBAAgB,CAChB,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAC1C,IAAI,CACP,EACD,IAAI,CAAC,QAAQ;SAChB,EACD,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,iBAAiB;QACvB,IAAI,CAAE,YAAY;SACrB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,aAAa;QACT,OAAO,IAAI,iBAAiB,CACxB,IAAI,EAAE,aAAa;QACnB,IAAI,YAAY,CAAC;YACb,IAAI,UAAU,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;SAClF,CAAC,EACF,IAAI,UAAU,CACV,IAAI,gBAAgB,CAChB,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAC1C,IAAI,CACP,EACD,IAAI,CAAC,QAAQ;SAChB,EACD,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,iBAAiB;QACvB,IAAI,CAAE,YAAY;SACrB,CAAC;IACN,CAAC;;AA9ED,mDAAmD;AAC5C,qBAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ // filepath: src/models/InsertQuery.ts
2
+ // Represents an INSERT query in SQL.
3
+ // Supports single/multi-row VALUES and INSERT ... SELECT.
4
+ import { SqlComponent } from "./SqlComponent";
5
+ import { IdentifierString } from "./ValueComponent";
6
+ export class InsertQuery extends SqlComponent {
7
+ /**
8
+ * @param params.table Table name (string or IdentifierString)
9
+ * @param params.columns Array of column names (string[] or IdentifierString[])
10
+ * @param params.selectQuery SELECT/VALUES query (required)
11
+ */
12
+ constructor(params) {
13
+ var _a;
14
+ super();
15
+ this.namespaces = params.namespaces
16
+ ? params.namespaces.map(ns => typeof ns === "string" ? new IdentifierString(ns) : ns)
17
+ : null;
18
+ this.table = typeof params.table === "string" ? new IdentifierString(params.table) : params.table;
19
+ this.columns = params.columns.map(c => typeof c === "string" ? new IdentifierString(c) : c);
20
+ this.selectQuery = (_a = params.selectQuery) !== null && _a !== void 0 ? _a : null;
21
+ }
22
+ }
23
+ InsertQuery.kind = Symbol("InsertQuery");
24
+ //# sourceMappingURL=InsertQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InsertQuery.js","sourceRoot":"","sources":["../../../src/models/InsertQuery.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qCAAqC;AACrC,0DAA0D;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAkB,MAAM,kBAAkB,CAAC;AAGpE,MAAM,OAAO,WAAY,SAAQ,YAAY;IAOzC;;;;OAIG;IACH,YAAY,MAKX;;QACG,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;YAC/B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrF,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAClG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,WAAW,GAAG,MAAA,MAAM,CAAC,WAAW,mCAAI,IAAI,CAAC;IAClD,CAAC;;AAxBM,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC"}
@@ -1,18 +1,19 @@
1
1
  export var TokenType;
2
2
  (function (TokenType) {
3
- TokenType[TokenType["Literal"] = 0] = "Literal";
4
- TokenType[TokenType["Operator"] = 1] = "Operator";
5
- TokenType[TokenType["OpenParen"] = 2] = "OpenParen";
6
- TokenType[TokenType["CloseParen"] = 3] = "CloseParen";
7
- TokenType[TokenType["Comma"] = 4] = "Comma";
8
- TokenType[TokenType["Dot"] = 5] = "Dot";
9
- TokenType[TokenType["Identifier"] = 6] = "Identifier";
10
- TokenType[TokenType["Command"] = 7] = "Command";
11
- TokenType[TokenType["Parameter"] = 8] = "Parameter";
12
- TokenType[TokenType["OpenBracket"] = 9] = "OpenBracket";
13
- TokenType[TokenType["CloseBracket"] = 10] = "CloseBracket";
14
- TokenType[TokenType["Function"] = 11] = "Function";
15
- TokenType[TokenType["StringSpecifier"] = 12] = "StringSpecifier";
16
- TokenType[TokenType["Type"] = 13] = "Type";
3
+ TokenType[TokenType["None"] = 0] = "None";
4
+ TokenType[TokenType["Literal"] = 1] = "Literal";
5
+ TokenType[TokenType["Operator"] = 2] = "Operator";
6
+ TokenType[TokenType["OpenParen"] = 4] = "OpenParen";
7
+ TokenType[TokenType["CloseParen"] = 8] = "CloseParen";
8
+ TokenType[TokenType["Comma"] = 16] = "Comma";
9
+ TokenType[TokenType["Dot"] = 32] = "Dot";
10
+ TokenType[TokenType["Identifier"] = 64] = "Identifier";
11
+ TokenType[TokenType["Command"] = 128] = "Command";
12
+ TokenType[TokenType["Parameter"] = 256] = "Parameter";
13
+ TokenType[TokenType["OpenBracket"] = 512] = "OpenBracket";
14
+ TokenType[TokenType["CloseBracket"] = 1024] = "CloseBracket";
15
+ TokenType[TokenType["Function"] = 2048] = "Function";
16
+ TokenType[TokenType["StringSpecifier"] = 4096] = "StringSpecifier";
17
+ TokenType[TokenType["Type"] = 8192] = "Type";
17
18
  })(TokenType || (TokenType = {}));
18
19
  //# sourceMappingURL=Lexeme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Lexeme.js","sourceRoot":"","sources":["../../../src/models/Lexeme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAeX;AAfD,WAAY,SAAS;IACjB,+CAAO,CAAA;IACP,iDAAQ,CAAA;IACR,mDAAS,CAAA;IACT,qDAAU,CAAA;IACV,2CAAK,CAAA;IACL,uCAAG,CAAA;IACH,qDAAU,CAAA;IACV,+CAAO,CAAA;IACP,mDAAS,CAAA;IACT,uDAAW,CAAA;IACX,0DAAY,CAAA;IACZ,kDAAQ,CAAA;IACR,gEAAe,CAAA;IACf,0CAAI,CAAA;AACR,CAAC,EAfW,SAAS,KAAT,SAAS,QAepB"}
1
+ {"version":3,"file":"Lexeme.js","sourceRoot":"","sources":["../../../src/models/Lexeme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAgBX;AAhBD,WAAY,SAAS;IACjB,yCAAQ,CAAA;IACR,+CAAgB,CAAA;IAChB,iDAAiB,CAAA;IACjB,mDAAkB,CAAA;IAClB,qDAAmB,CAAA;IACnB,4CAAc,CAAA;IACd,wCAAY,CAAA;IACZ,sDAAmB,CAAA;IACnB,iDAAgB,CAAA;IAChB,qDAAkB,CAAA;IAClB,yDAAoB,CAAA;IACpB,4DAAsB,CAAA;IACtB,oDAAkB,CAAA;IAClB,kEAAyB,CAAA;IACzB,4CAAc,CAAA;AAClB,CAAC,EAhBW,SAAS,KAAT,SAAS,QAgBpB"}
@@ -1,5 +1,6 @@
1
+ import { InsertQuery } from "./InsertQuery";
1
2
  import { SimpleSelectQuery } from "./SimpleSelectQuery";
2
3
  import { BinarySelectQuery } from "./BinarySelectQuery";
3
4
  import { ValuesQuery } from "./ValuesQuery";
4
- export { SimpleSelectQuery, BinarySelectQuery, ValuesQuery };
5
+ export { SimpleSelectQuery, BinarySelectQuery, ValuesQuery, InsertQuery };
5
6
  //# sourceMappingURL=SelectQuery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectQuery.js","sourceRoot":"","sources":["../../../src/models/SelectQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"SelectQuery.js","sourceRoot":"","sources":["../../../src/models/SelectQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}