rawsql-ts 0.24.4 → 0.26.0

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 (78) hide show
  1. package/dist/esm/index.d.ts +8 -0
  2. package/dist/esm/index.js +8 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/index.min.js +5 -5
  5. package/dist/esm/index.min.js.map +4 -4
  6. package/dist/esm/parsers/FunctionExpressionParser.d.ts +3 -0
  7. package/dist/esm/parsers/FunctionExpressionParser.js +50 -2
  8. package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -1
  9. package/dist/esm/parsers/SqlPrintTokenParser.d.ts +1 -0
  10. package/dist/esm/parsers/SqlPrintTokenParser.js +11 -1
  11. package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
  12. package/dist/esm/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
  13. package/dist/esm/transformers/AstCommentAttachmentExtractor.js +221 -0
  14. package/dist/esm/transformers/AstCommentAttachmentExtractor.js.map +1 -0
  15. package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
  16. package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.js +235 -0
  17. package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
  18. package/dist/esm/transformers/ConditionOptimization.d.ts +66 -0
  19. package/dist/esm/transformers/ConditionOptimization.js +294 -0
  20. package/dist/esm/transformers/ConditionOptimization.js.map +1 -0
  21. package/dist/esm/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
  22. package/dist/esm/transformers/NamedQueryDefinitionExtractor.js +370 -0
  23. package/dist/esm/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
  24. package/dist/esm/transformers/ParameterConditionPlacementOptimizer.d.ts +85 -0
  25. package/dist/esm/transformers/ParameterConditionPlacementOptimizer.js +942 -0
  26. package/dist/esm/transformers/ParameterConditionPlacementOptimizer.js.map +1 -0
  27. package/dist/esm/transformers/SelectBodyExtractor.d.ts +21 -0
  28. package/dist/esm/transformers/SelectBodyExtractor.js +137 -0
  29. package/dist/esm/transformers/SelectBodyExtractor.js.map +1 -0
  30. package/dist/esm/transformers/SelectOutputCollector.d.ts +47 -0
  31. package/dist/esm/transformers/SelectOutputCollector.js +281 -0
  32. package/dist/esm/transformers/SelectOutputCollector.js.map +1 -0
  33. package/dist/esm/transformers/SelectValueCollector.d.ts +9 -1
  34. package/dist/esm/transformers/SelectValueCollector.js +83 -58
  35. package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
  36. package/dist/esm/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
  37. package/dist/esm/transformers/WildcardColumnInferenceCollector.js +373 -0
  38. package/dist/esm/transformers/WildcardColumnInferenceCollector.js.map +1 -0
  39. package/dist/index.js +8 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.min.js +5 -5
  42. package/dist/index.min.js.map +4 -4
  43. package/dist/parsers/FunctionExpressionParser.js +49 -1
  44. package/dist/parsers/FunctionExpressionParser.js.map +1 -1
  45. package/dist/parsers/SqlPrintTokenParser.js +11 -1
  46. package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
  47. package/dist/src/index.d.ts +8 -0
  48. package/dist/src/parsers/FunctionExpressionParser.d.ts +3 -0
  49. package/dist/src/parsers/SqlPrintTokenParser.d.ts +1 -0
  50. package/dist/src/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
  51. package/dist/src/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
  52. package/dist/src/transformers/ConditionOptimization.d.ts +66 -0
  53. package/dist/src/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
  54. package/dist/src/transformers/ParameterConditionPlacementOptimizer.d.ts +85 -0
  55. package/dist/src/transformers/SelectBodyExtractor.d.ts +21 -0
  56. package/dist/src/transformers/SelectOutputCollector.d.ts +47 -0
  57. package/dist/src/transformers/SelectValueCollector.d.ts +9 -1
  58. package/dist/src/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
  59. package/dist/transformers/AstCommentAttachmentExtractor.js +231 -0
  60. package/dist/transformers/AstCommentAttachmentExtractor.js.map +1 -0
  61. package/dist/transformers/ClauseScopedColumnReferenceCollector.js +239 -0
  62. package/dist/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
  63. package/dist/transformers/ConditionOptimization.js +311 -0
  64. package/dist/transformers/ConditionOptimization.js.map +1 -0
  65. package/dist/transformers/NamedQueryDefinitionExtractor.js +374 -0
  66. package/dist/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
  67. package/dist/transformers/ParameterConditionPlacementOptimizer.js +952 -0
  68. package/dist/transformers/ParameterConditionPlacementOptimizer.js.map +1 -0
  69. package/dist/transformers/SelectBodyExtractor.js +141 -0
  70. package/dist/transformers/SelectBodyExtractor.js.map +1 -0
  71. package/dist/transformers/SelectOutputCollector.js +291 -0
  72. package/dist/transformers/SelectOutputCollector.js.map +1 -0
  73. package/dist/transformers/SelectValueCollector.js +83 -58
  74. package/dist/transformers/SelectValueCollector.js.map +1 -1
  75. package/dist/transformers/WildcardColumnInferenceCollector.js +377 -0
  76. package/dist/transformers/WildcardColumnInferenceCollector.js.map +1 -0
  77. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  78. package/package.json +1 -1
@@ -0,0 +1,374 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NamedQueryDefinitionExtractor = void 0;
4
+ const Clause_1 = require("../models/Clause");
5
+ const DeleteQuery_1 = require("../models/DeleteQuery");
6
+ const InsertQuery_1 = require("../models/InsertQuery");
7
+ const MergeQuery_1 = require("../models/MergeQuery");
8
+ const SelectQuery_1 = require("../models/SelectQuery");
9
+ const UpdateQuery_1 = require("../models/UpdateQuery");
10
+ const ValueComponent_1 = require("../models/ValueComponent");
11
+ const SelectQueryWithClauseHelper_1 = require("../utils/SelectQueryWithClauseHelper");
12
+ /**
13
+ * Extracts named query definitions, starting with CTE definitions from `WITH` clauses.
14
+ *
15
+ * @remarks Definitions are emitted in SQL source order. For nested CTEs, the outer
16
+ * CTE definition is emitted when its name is encountered, then definitions inside
17
+ * that CTE body are emitted before later sibling CTE definitions.
18
+ */
19
+ class NamedQueryDefinitionExtractor {
20
+ constructor() {
21
+ this.definitions = [];
22
+ this.visited = new Set();
23
+ }
24
+ /**
25
+ * Extract named query definitions from an AST component.
26
+ */
27
+ static extract(input) {
28
+ if (!input) {
29
+ return [];
30
+ }
31
+ const extractor = new NamedQueryDefinitionExtractor();
32
+ extractor.visit(input);
33
+ return extractor.definitions;
34
+ }
35
+ visit(value) {
36
+ if (!value || typeof value !== "object") {
37
+ return;
38
+ }
39
+ if (this.visited.has(value)) {
40
+ return;
41
+ }
42
+ this.visited.add(value);
43
+ if (value instanceof Clause_1.WithClause) {
44
+ this.visitWithClause(value);
45
+ return;
46
+ }
47
+ if (value instanceof Clause_1.CommonTable) {
48
+ this.visitCommonTable(value);
49
+ return;
50
+ }
51
+ if (value instanceof SelectQuery_1.SimpleSelectQuery || value instanceof SelectQuery_1.BinarySelectQuery || value instanceof SelectQuery_1.ValuesQuery) {
52
+ this.visitSelectQuery(value);
53
+ return;
54
+ }
55
+ if (value instanceof InsertQuery_1.InsertQuery) {
56
+ this.visitInsertQuery(value);
57
+ return;
58
+ }
59
+ if (value instanceof UpdateQuery_1.UpdateQuery) {
60
+ this.visitUpdateQuery(value);
61
+ return;
62
+ }
63
+ if (value instanceof DeleteQuery_1.DeleteQuery) {
64
+ this.visitDeleteQuery(value);
65
+ return;
66
+ }
67
+ if (value instanceof MergeQuery_1.MergeQuery) {
68
+ this.visitMergeQuery(value);
69
+ return;
70
+ }
71
+ if (this.visitKnownValueComponent(value)) {
72
+ return;
73
+ }
74
+ if (this.visitKnownSqlComponent(value)) {
75
+ return;
76
+ }
77
+ if (Array.isArray(value)) {
78
+ for (const item of value) {
79
+ this.visit(item);
80
+ }
81
+ return;
82
+ }
83
+ for (const key of Object.keys(value)) {
84
+ this.visit(value[key]);
85
+ }
86
+ }
87
+ visitSelectQuery(query, includeWith = true) {
88
+ if (query instanceof SelectQuery_1.SimpleSelectQuery) {
89
+ this.visitSimpleSelectQuery(query, includeWith);
90
+ return;
91
+ }
92
+ if (query instanceof SelectQuery_1.BinarySelectQuery) {
93
+ this.visitSelectQuery(query.left, includeWith);
94
+ this.visitSelectQuery(query.right);
95
+ return;
96
+ }
97
+ if (query instanceof SelectQuery_1.ValuesQuery) {
98
+ if (includeWith) {
99
+ this.visit(query.withClause);
100
+ }
101
+ this.visit(query.tuples);
102
+ }
103
+ }
104
+ visitSimpleSelectQuery(query, includeWith) {
105
+ if (includeWith) {
106
+ this.visit(query.withClause);
107
+ }
108
+ this.visit(query.selectClause);
109
+ this.visit(query.fromClause);
110
+ this.visit(query.whereClause);
111
+ this.visit(query.groupByClause);
112
+ this.visit(query.havingClause);
113
+ this.visit(query.windowClause);
114
+ this.visit(query.orderByClause);
115
+ this.visit(query.limitClause);
116
+ this.visit(query.offsetClause);
117
+ this.visit(query.fetchClause);
118
+ this.visit(query.forClause);
119
+ }
120
+ visitInsertQuery(query) {
121
+ const withClause = SelectQueryWithClauseHelper_1.SelectQueryWithClauseHelper.getWithClause(query.selectQuery);
122
+ this.visit(withClause);
123
+ this.visit(query.insertClause);
124
+ if (query.selectQuery) {
125
+ this.visitSelectQuery(query.selectQuery, false);
126
+ }
127
+ this.visit(query.onConflictClause);
128
+ this.visit(query.returningClause);
129
+ }
130
+ visitUpdateQuery(query) {
131
+ this.visit(query.withClause);
132
+ this.visit(query.updateClause);
133
+ this.visit(query.setClause);
134
+ this.visit(query.fromClause);
135
+ this.visit(query.whereClause);
136
+ this.visit(query.returningClause);
137
+ }
138
+ visitDeleteQuery(query) {
139
+ this.visit(query.withClause);
140
+ this.visit(query.deleteClause);
141
+ this.visit(query.usingClause);
142
+ this.visit(query.whereClause);
143
+ this.visit(query.returningClause);
144
+ }
145
+ visitMergeQuery(query) {
146
+ this.visit(query.withClause);
147
+ this.visit(query.target);
148
+ this.visit(query.source);
149
+ this.visit(query.onCondition);
150
+ this.visit(query.whenClauses);
151
+ this.visit(query.returningClause);
152
+ }
153
+ visitWithClause(withClause) {
154
+ for (const commonTable of withClause.tables) {
155
+ this.visitCommonTable(commonTable, withClause.recursive);
156
+ }
157
+ }
158
+ visitCommonTable(commonTable, recursive) {
159
+ const definition = {
160
+ name: commonTable.getSourceAliasName(),
161
+ query: commonTable.query,
162
+ range: null,
163
+ nameRange: null
164
+ };
165
+ if (recursive !== undefined) {
166
+ definition.recursive = recursive;
167
+ }
168
+ this.definitions.push(definition);
169
+ this.visit(commonTable.query);
170
+ }
171
+ visitKnownSqlComponent(value) {
172
+ if (value instanceof Clause_1.SelectClause) {
173
+ this.visit(value.distinct);
174
+ this.visit(value.hints);
175
+ this.visit(value.items);
176
+ return true;
177
+ }
178
+ if (value instanceof Clause_1.SelectItem) {
179
+ this.visit(value.value);
180
+ return true;
181
+ }
182
+ if (value instanceof Clause_1.FromClause) {
183
+ this.visit(value.source);
184
+ this.visit(value.joins);
185
+ return true;
186
+ }
187
+ if (value instanceof Clause_1.JoinClause) {
188
+ this.visit(value.source);
189
+ this.visit(value.condition);
190
+ return true;
191
+ }
192
+ if (value instanceof Clause_1.JoinOnClause || value instanceof Clause_1.JoinUsingClause) {
193
+ this.visit(value.condition);
194
+ return true;
195
+ }
196
+ if (value instanceof Clause_1.SourceExpression) {
197
+ this.visit(value.datasource);
198
+ return true;
199
+ }
200
+ if (value instanceof Clause_1.SubQuerySource) {
201
+ this.visitSelectQuery(value.query);
202
+ return true;
203
+ }
204
+ if (value instanceof Clause_1.FunctionSource) {
205
+ this.visit(value.argument);
206
+ return true;
207
+ }
208
+ if (value instanceof Clause_1.ParenSource) {
209
+ this.visit(value.source);
210
+ return true;
211
+ }
212
+ if (value instanceof Clause_1.WhereClause || value instanceof Clause_1.HavingClause) {
213
+ this.visit(value.condition);
214
+ return true;
215
+ }
216
+ if (value instanceof Clause_1.LimitClause) {
217
+ this.visit(value.value);
218
+ return true;
219
+ }
220
+ if (value instanceof Clause_1.GroupByClause) {
221
+ this.visit(value.grouping);
222
+ return true;
223
+ }
224
+ if (value instanceof Clause_1.WindowsClause) {
225
+ this.visit(value.windows);
226
+ return true;
227
+ }
228
+ if (value instanceof Clause_1.WindowFrameClause) {
229
+ this.visit(value.expression);
230
+ return true;
231
+ }
232
+ if (value instanceof Clause_1.OrderByClause) {
233
+ this.visit(value.order);
234
+ return true;
235
+ }
236
+ if (value instanceof Clause_1.OrderByItem) {
237
+ this.visit(value.value);
238
+ return true;
239
+ }
240
+ if (value instanceof Clause_1.ReturningClause) {
241
+ this.visit(value.items);
242
+ return true;
243
+ }
244
+ if (value instanceof Clause_1.OnConflictClause) {
245
+ this.visit(value.setClause);
246
+ this.visit(value.whereClause);
247
+ this.visit(value.forClause);
248
+ return true;
249
+ }
250
+ if (value instanceof Clause_1.SetClause) {
251
+ for (const item of value.items) {
252
+ this.visit(item.value);
253
+ }
254
+ return true;
255
+ }
256
+ if (value instanceof Clause_1.UpdateClause || value instanceof Clause_1.DeleteClause || value instanceof Clause_1.InsertClause) {
257
+ this.visit(value.source);
258
+ return true;
259
+ }
260
+ if (value instanceof Clause_1.UsingClause) {
261
+ this.visit(value.sources);
262
+ return true;
263
+ }
264
+ if (value instanceof MergeQuery_1.MergeWhenClause) {
265
+ this.visit(value.condition);
266
+ this.visit(value.action);
267
+ return true;
268
+ }
269
+ if (value instanceof MergeQuery_1.MergeUpdateAction) {
270
+ this.visit(value.setClause);
271
+ this.visit(value.whereClause);
272
+ return true;
273
+ }
274
+ if (value instanceof MergeQuery_1.MergeDeleteAction) {
275
+ this.visit(value.whereClause);
276
+ return true;
277
+ }
278
+ if (value instanceof MergeQuery_1.MergeInsertAction) {
279
+ this.visit(value.values);
280
+ return true;
281
+ }
282
+ return false;
283
+ }
284
+ visitKnownValueComponent(value) {
285
+ if (value instanceof ValueComponent_1.ValueList || value instanceof ValueComponent_1.TupleExpression) {
286
+ this.visit(value.values);
287
+ return true;
288
+ }
289
+ if (value instanceof ValueComponent_1.FunctionCall) {
290
+ this.visit(value.argument);
291
+ this.visit(value.internalOrderBy);
292
+ this.visit(value.withinGroup);
293
+ this.visit(value.filterCondition);
294
+ this.visit(value.over);
295
+ return true;
296
+ }
297
+ if (value instanceof ValueComponent_1.WindowFrameExpression) {
298
+ this.visit(value.partition);
299
+ this.visit(value.order);
300
+ this.visit(value.frameSpec);
301
+ return true;
302
+ }
303
+ if (value instanceof ValueComponent_1.WindowFrameSpec) {
304
+ this.visit(value.startBound);
305
+ this.visit(value.endBound);
306
+ return true;
307
+ }
308
+ if (value instanceof ValueComponent_1.WindowFrameBoundaryValue) {
309
+ this.visit(value.value);
310
+ return true;
311
+ }
312
+ if (value instanceof ValueComponent_1.UnaryExpression || value instanceof ValueComponent_1.ParenExpression || value instanceof ValueComponent_1.ArrayExpression || value instanceof ValueComponent_1.JsonPredicateExpression) {
313
+ this.visit(value.expression);
314
+ return true;
315
+ }
316
+ if (value instanceof ValueComponent_1.BinaryExpression) {
317
+ this.visit(value.left);
318
+ this.visit(value.right);
319
+ return true;
320
+ }
321
+ if (value instanceof ValueComponent_1.SwitchCaseArgument) {
322
+ this.visit(value.cases);
323
+ this.visit(value.elseValue);
324
+ return true;
325
+ }
326
+ if (value instanceof ValueComponent_1.CaseKeyValuePair) {
327
+ this.visit(value.key);
328
+ this.visit(value.value);
329
+ return true;
330
+ }
331
+ if (value instanceof ValueComponent_1.CastExpression) {
332
+ this.visit(value.input);
333
+ this.visit(value.castType);
334
+ return true;
335
+ }
336
+ if (value instanceof ValueComponent_1.CaseExpression) {
337
+ this.visit(value.condition);
338
+ this.visit(value.switchCase);
339
+ return true;
340
+ }
341
+ if (value instanceof ValueComponent_1.ArrayQueryExpression) {
342
+ this.visitSelectQuery(value.query);
343
+ return true;
344
+ }
345
+ if (value instanceof ValueComponent_1.InlineQuery) {
346
+ this.visitSelectQuery(value.selectQuery);
347
+ return true;
348
+ }
349
+ if (value instanceof ValueComponent_1.BetweenExpression) {
350
+ this.visit(value.expression);
351
+ this.visit(value.lower);
352
+ this.visit(value.upper);
353
+ return true;
354
+ }
355
+ if (value instanceof ValueComponent_1.TypeValue) {
356
+ this.visit(value.argument);
357
+ return true;
358
+ }
359
+ if (value instanceof ValueComponent_1.ArraySliceExpression) {
360
+ this.visit(value.array);
361
+ this.visit(value.startIndex);
362
+ this.visit(value.endIndex);
363
+ return true;
364
+ }
365
+ if (value instanceof ValueComponent_1.ArrayIndexExpression) {
366
+ this.visit(value.array);
367
+ this.visit(value.index);
368
+ return true;
369
+ }
370
+ return false;
371
+ }
372
+ }
373
+ exports.NamedQueryDefinitionExtractor = NamedQueryDefinitionExtractor;
374
+ //# sourceMappingURL=NamedQueryDefinitionExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NamedQueryDefinitionExtractor.js","sourceRoot":"","sources":["../../src/transformers/NamedQueryDefinitionExtractor.ts"],"names":[],"mappings":"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"}