rawsql-ts 0.24.4 → 0.25.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 (66) hide show
  1. package/dist/esm/index.d.ts +6 -0
  2. package/dist/esm/index.js +6 -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/NamedQueryDefinitionExtractor.d.ts +53 -0
  19. package/dist/esm/transformers/NamedQueryDefinitionExtractor.js +370 -0
  20. package/dist/esm/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
  21. package/dist/esm/transformers/SelectBodyExtractor.d.ts +21 -0
  22. package/dist/esm/transformers/SelectBodyExtractor.js +137 -0
  23. package/dist/esm/transformers/SelectBodyExtractor.js.map +1 -0
  24. package/dist/esm/transformers/SelectOutputCollector.d.ts +47 -0
  25. package/dist/esm/transformers/SelectOutputCollector.js +281 -0
  26. package/dist/esm/transformers/SelectOutputCollector.js.map +1 -0
  27. package/dist/esm/transformers/SelectValueCollector.d.ts +9 -1
  28. package/dist/esm/transformers/SelectValueCollector.js +83 -58
  29. package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
  30. package/dist/esm/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
  31. package/dist/esm/transformers/WildcardColumnInferenceCollector.js +373 -0
  32. package/dist/esm/transformers/WildcardColumnInferenceCollector.js.map +1 -0
  33. package/dist/index.js +6 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/index.min.js +5 -5
  36. package/dist/index.min.js.map +4 -4
  37. package/dist/parsers/FunctionExpressionParser.js +49 -1
  38. package/dist/parsers/FunctionExpressionParser.js.map +1 -1
  39. package/dist/parsers/SqlPrintTokenParser.js +11 -1
  40. package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
  41. package/dist/src/index.d.ts +6 -0
  42. package/dist/src/parsers/FunctionExpressionParser.d.ts +3 -0
  43. package/dist/src/parsers/SqlPrintTokenParser.d.ts +1 -0
  44. package/dist/src/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
  45. package/dist/src/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
  46. package/dist/src/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
  47. package/dist/src/transformers/SelectBodyExtractor.d.ts +21 -0
  48. package/dist/src/transformers/SelectOutputCollector.d.ts +47 -0
  49. package/dist/src/transformers/SelectValueCollector.d.ts +9 -1
  50. package/dist/src/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
  51. package/dist/transformers/AstCommentAttachmentExtractor.js +231 -0
  52. package/dist/transformers/AstCommentAttachmentExtractor.js.map +1 -0
  53. package/dist/transformers/ClauseScopedColumnReferenceCollector.js +239 -0
  54. package/dist/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
  55. package/dist/transformers/NamedQueryDefinitionExtractor.js +374 -0
  56. package/dist/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
  57. package/dist/transformers/SelectBodyExtractor.js +141 -0
  58. package/dist/transformers/SelectBodyExtractor.js.map +1 -0
  59. package/dist/transformers/SelectOutputCollector.js +291 -0
  60. package/dist/transformers/SelectOutputCollector.js.map +1 -0
  61. package/dist/transformers/SelectValueCollector.js +83 -58
  62. package/dist/transformers/SelectValueCollector.js.map +1 -1
  63. package/dist/transformers/WildcardColumnInferenceCollector.js +377 -0
  64. package/dist/transformers/WildcardColumnInferenceCollector.js.map +1 -0
  65. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  66. package/package.json +1 -1
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectBodyExtractor = void 0;
4
+ const CreateTableQuery_1 = require("../models/CreateTableQuery");
5
+ const InsertQuery_1 = require("../models/InsertQuery");
6
+ const Lexeme_1 = require("../models/Lexeme");
7
+ const ValuesQuery_1 = require("../models/ValuesQuery");
8
+ const Clause_1 = require("../models/Clause");
9
+ const FullNameParser_1 = require("../parsers/FullNameParser");
10
+ const SelectQueryParser_1 = require("../parsers/SelectQueryParser");
11
+ const SqlParser_1 = require("../parsers/SqlParser");
12
+ const SqlTokenizer_1 = require("../parsers/SqlTokenizer");
13
+ class SelectBodyExtractor {
14
+ static extract(input) {
15
+ if (typeof input === "string") {
16
+ return this.extractFromSql(input);
17
+ }
18
+ return this.extractFromStatement(input);
19
+ }
20
+ static extractFromSql(sql) {
21
+ const lexemes = new SqlTokenizer_1.SqlTokenizer(sql).readLexemes();
22
+ if (this.isCreateViewStatement(lexemes)) {
23
+ return this.extractCreateViewFromLexemes(lexemes);
24
+ }
25
+ return this.extractFromStatement(SqlParser_1.SqlParser.parse(sql));
26
+ }
27
+ static extractFromStatement(statement) {
28
+ if (statement instanceof CreateTableQuery_1.CreateTableQuery) {
29
+ const targetName = this.createTableTargetName(statement);
30
+ if (!statement.asSelectQuery) {
31
+ return this.unsupported(targetName);
32
+ }
33
+ return {
34
+ supported: true,
35
+ kind: "create-table-as",
36
+ targetName,
37
+ selectQuery: statement.asSelectQuery
38
+ };
39
+ }
40
+ if (statement instanceof InsertQuery_1.InsertQuery) {
41
+ const targetName = this.insertTargetName(statement);
42
+ if (!statement.selectQuery || statement.selectQuery instanceof ValuesQuery_1.ValuesQuery) {
43
+ return this.unsupported(targetName);
44
+ }
45
+ return {
46
+ supported: true,
47
+ kind: "insert-select",
48
+ targetName,
49
+ selectQuery: statement.selectQuery
50
+ };
51
+ }
52
+ return {
53
+ supported: false,
54
+ kind: null,
55
+ targetName: null,
56
+ selectQuery: null,
57
+ reason: "Statement type is not supported."
58
+ };
59
+ }
60
+ static extractCreateViewFromLexemes(lexemes) {
61
+ var _a, _b, _c, _d, _e, _f;
62
+ let idx = 0;
63
+ idx++; // CREATE
64
+ const materialized = ((_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.value.toLowerCase()) === "materialized";
65
+ if (materialized) {
66
+ idx++;
67
+ }
68
+ if (((_b = lexemes[idx]) === null || _b === void 0 ? void 0 : _b.value.toLowerCase()) !== "view") {
69
+ return this.unsupported(null, "Statement type is not supported.");
70
+ }
71
+ idx++;
72
+ if (((_c = lexemes[idx]) === null || _c === void 0 ? void 0 : _c.value.toLowerCase()) === "if not exists") {
73
+ idx++;
74
+ }
75
+ const targetResult = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx);
76
+ idx = targetResult.newIndex;
77
+ const targetName = [...((_d = targetResult.namespaces) !== null && _d !== void 0 ? _d : []), targetResult.name.name].join(".");
78
+ if (((_e = lexemes[idx]) === null || _e === void 0 ? void 0 : _e.type) === Lexeme_1.TokenType.OpenParen) {
79
+ idx = this.consumeBalancedParentheses(lexemes, idx);
80
+ }
81
+ if (((_f = lexemes[idx]) === null || _f === void 0 ? void 0 : _f.value.toLowerCase()) !== "as") {
82
+ return this.unsupported(targetName);
83
+ }
84
+ idx++;
85
+ const selectResult = SelectQueryParser_1.SelectQueryParser.parseFromLexeme(lexemes, idx);
86
+ return {
87
+ supported: true,
88
+ kind: materialized ? "create-materialized-view" : "create-view",
89
+ targetName,
90
+ selectQuery: selectResult.value
91
+ };
92
+ }
93
+ static isCreateViewStatement(lexemes) {
94
+ var _a, _b, _c;
95
+ if (((_a = lexemes[0]) === null || _a === void 0 ? void 0 : _a.value.toLowerCase()) !== "create") {
96
+ return false;
97
+ }
98
+ const second = (_b = lexemes[1]) === null || _b === void 0 ? void 0 : _b.value.toLowerCase();
99
+ const third = (_c = lexemes[2]) === null || _c === void 0 ? void 0 : _c.value.toLowerCase();
100
+ return second === "view" || (second === "materialized" && third === "view");
101
+ }
102
+ static consumeBalancedParentheses(lexemes, index) {
103
+ let idx = index;
104
+ let depth = 0;
105
+ while (idx < lexemes.length) {
106
+ if (lexemes[idx].type === Lexeme_1.TokenType.OpenParen) {
107
+ depth++;
108
+ }
109
+ else if (lexemes[idx].type === Lexeme_1.TokenType.CloseParen) {
110
+ depth--;
111
+ if (depth === 0) {
112
+ return idx + 1;
113
+ }
114
+ }
115
+ idx++;
116
+ }
117
+ return idx;
118
+ }
119
+ static createTableTargetName(query) {
120
+ var _a;
121
+ return [...((_a = query.namespaces) !== null && _a !== void 0 ? _a : []), query.tableName.name].join(".");
122
+ }
123
+ static insertTargetName(query) {
124
+ const source = query.insertClause.source;
125
+ if (source.datasource instanceof Clause_1.TableSource) {
126
+ return source.datasource.getSourceName();
127
+ }
128
+ return source.getAliasName();
129
+ }
130
+ static unsupported(targetName, reason = "No embedded SELECT body found.") {
131
+ return {
132
+ supported: false,
133
+ kind: null,
134
+ targetName,
135
+ selectQuery: null,
136
+ reason
137
+ };
138
+ }
139
+ }
140
+ exports.SelectBodyExtractor = SelectBodyExtractor;
141
+ //# sourceMappingURL=SelectBodyExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectBodyExtractor.js","sourceRoot":"","sources":["../../src/transformers/SelectBodyExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectOutputCollector = void 0;
4
+ const Clause_1 = require("../models/Clause");
5
+ const InsertQuery_1 = require("../models/InsertQuery");
6
+ const DeleteQuery_1 = require("../models/DeleteQuery");
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 CTECollector_1 = require("./CTECollector");
12
+ /**
13
+ * Collects SELECT output columns without collapsing duplicate output names.
14
+ *
15
+ * This collector is intended for callers that need stable SELECT-list positions.
16
+ * It keeps output order and assigns outputIndex after supported wildcard expansion.
17
+ */
18
+ class SelectOutputCollector {
19
+ constructor(tableColumnResolver = null, initialCommonTables = null) {
20
+ this.tableColumnResolver = tableColumnResolver;
21
+ this.commonTableCollector = new CTECollector_1.CTECollector();
22
+ this.commonTables = initialCommonTables !== null && initialCommonTables !== void 0 ? initialCommonTables : [];
23
+ }
24
+ collect(arg) {
25
+ const rawColumns = this.collectRaw(arg);
26
+ return rawColumns.map((item, outputIndex) => ({
27
+ ...item,
28
+ outputIndex
29
+ }));
30
+ }
31
+ collectRaw(arg) {
32
+ if (arg instanceof SelectQuery_1.SimpleSelectQuery) {
33
+ return this.collectSimpleSelectQuery(arg);
34
+ }
35
+ if (arg instanceof Clause_1.SourceExpression) {
36
+ return this.collectSourceExpression(arg.getAliasName(), arg);
37
+ }
38
+ if (arg instanceof Clause_1.FromClause) {
39
+ return this.collectFromClause(arg, true);
40
+ }
41
+ return [];
42
+ }
43
+ collectSimpleSelectQuery(query) {
44
+ const previousCommonTables = this.commonTables;
45
+ if (this.commonTables.length === 0) {
46
+ this.commonTables = this.commonTableCollector.collect(query);
47
+ }
48
+ try {
49
+ const outputs = [];
50
+ for (const item of query.selectClause.items) {
51
+ outputs.push(...this.collectSelectItem(item, query.fromClause));
52
+ }
53
+ return outputs;
54
+ }
55
+ finally {
56
+ this.commonTables = previousCommonTables;
57
+ }
58
+ }
59
+ collectSelectItem(item, fromClause) {
60
+ if (item.identifier) {
61
+ return [this.createExplicitOutput(item.identifier.name, item.value, fromClause)];
62
+ }
63
+ if (!(item.value instanceof ValueComponent_1.ColumnReference)) {
64
+ return [];
65
+ }
66
+ const columnName = item.value.column.name;
67
+ if (columnName === "*") {
68
+ return this.expandWildcard(item.value, fromClause);
69
+ }
70
+ return [this.createExplicitOutput(columnName, item.value, fromClause)];
71
+ }
72
+ expandWildcard(value, fromClause) {
73
+ var _a;
74
+ if (!fromClause) {
75
+ return [];
76
+ }
77
+ if (value.namespaces === null) {
78
+ return this.collectFromClause(fromClause, true);
79
+ }
80
+ const sourceName = value.getNamespace();
81
+ if (fromClause.getSourceAliasName() === sourceName) {
82
+ return this.collectFromClause(fromClause, false);
83
+ }
84
+ const join = (_a = fromClause.joins) === null || _a === void 0 ? void 0 : _a.find(item => this.getJoinSourceName(item) === sourceName);
85
+ return join ? this.collectJoinClause(join) : [];
86
+ }
87
+ collectFromClause(clause, joinCascade) {
88
+ const outputs = this.collectSourceExpression(clause.getSourceAliasName(), clause.source);
89
+ if (clause.joins && joinCascade) {
90
+ for (const join of clause.joins) {
91
+ outputs.push(...this.collectJoinClause(join));
92
+ }
93
+ }
94
+ return outputs;
95
+ }
96
+ collectJoinClause(clause) {
97
+ return this.collectSourceExpression(this.getJoinSourceName(clause), clause.source);
98
+ }
99
+ getJoinSourceName(clause) {
100
+ return clause.source.getAliasName();
101
+ }
102
+ collectSourceExpression(sourceName, source) {
103
+ var _a;
104
+ if ((_a = source.aliasExpression) === null || _a === void 0 ? void 0 : _a.columns) {
105
+ return source.aliasExpression.columns.map(column => ({
106
+ name: column.name,
107
+ value: new ValueComponent_1.ColumnReference(sourceName ? [sourceName] : null, column.name),
108
+ sourceAlias: sourceName,
109
+ sourceName: null,
110
+ sourceColumnName: column.name
111
+ }));
112
+ }
113
+ const cte = this.findCommonTable(source);
114
+ if (cte) {
115
+ const innerCommonTables = this.commonTables.filter(item => item.getSourceAliasName() !== cte.getSourceAliasName());
116
+ const innerOutputs = this.collectCteQuery(cte.query, innerCommonTables);
117
+ return this.qualifyOutputs(innerOutputs, sourceName, cte.getSourceAliasName());
118
+ }
119
+ if (source.datasource instanceof Clause_1.TableSource) {
120
+ return this.collectTableSource(sourceName, source.datasource);
121
+ }
122
+ if (source.datasource instanceof Clause_1.SubQuerySource) {
123
+ const innerOutputs = this.collectNestedSelectQuery(source.datasource.query);
124
+ return this.qualifyOutputs(innerOutputs, sourceName, null);
125
+ }
126
+ if (source.datasource instanceof Clause_1.ParenSource) {
127
+ return [];
128
+ }
129
+ return [];
130
+ }
131
+ findCommonTable(source) {
132
+ var _a;
133
+ if (!(source.datasource instanceof Clause_1.TableSource)) {
134
+ return null;
135
+ }
136
+ const tableName = source.datasource.getSourceName();
137
+ return (_a = this.commonTables.find(item => item.getSourceAliasName() === tableName)) !== null && _a !== void 0 ? _a : null;
138
+ }
139
+ collectTableSource(sourceName, source) {
140
+ if (!this.tableColumnResolver) {
141
+ return [];
142
+ }
143
+ const tableName = source.getSourceName();
144
+ const qualifier = sourceName !== null && sourceName !== void 0 ? sourceName : tableName;
145
+ return this.tableColumnResolver(tableName).map(column => ({
146
+ name: column,
147
+ value: new ValueComponent_1.ColumnReference([qualifier], column),
148
+ sourceAlias: sourceName,
149
+ sourceName: tableName,
150
+ sourceColumnName: column
151
+ }));
152
+ }
153
+ collectNestedSelectQuery(query) {
154
+ const collector = new SelectOutputCollector(this.tableColumnResolver, this.commonTables);
155
+ return collector.collect(query).map(({ name, value, sourceAlias, sourceName, sourceColumnName }) => ({
156
+ name,
157
+ value,
158
+ sourceAlias,
159
+ sourceName,
160
+ sourceColumnName
161
+ }));
162
+ }
163
+ collectCteQuery(query, commonTables) {
164
+ if (this.isSelectQuery(query)) {
165
+ const collector = new SelectOutputCollector(this.tableColumnResolver, commonTables);
166
+ return collector.collect(query).map(({ name, value, sourceAlias, sourceName, sourceColumnName }) => ({
167
+ name,
168
+ value,
169
+ sourceAlias,
170
+ sourceName,
171
+ sourceColumnName
172
+ }));
173
+ }
174
+ return this.collectReturningOutputs(query);
175
+ }
176
+ collectReturningOutputs(query) {
177
+ if (!(query instanceof InsertQuery_1.InsertQuery || query instanceof UpdateQuery_1.UpdateQuery || query instanceof DeleteQuery_1.DeleteQuery || query instanceof MergeQuery_1.MergeQuery)) {
178
+ return [];
179
+ }
180
+ if (!query.returningClause) {
181
+ return [];
182
+ }
183
+ return this.extractReturningOutputs(query.returningClause);
184
+ }
185
+ extractReturningOutputs(clause) {
186
+ var _a, _b;
187
+ const outputs = [];
188
+ for (const item of clause.items) {
189
+ const name = (_b = (_a = item.identifier) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : this.extractSelectItemName(item);
190
+ if (name) {
191
+ outputs.push(this.createExplicitOutput(name, item.value));
192
+ }
193
+ }
194
+ return outputs;
195
+ }
196
+ extractSelectItemName(item) {
197
+ if (item.identifier) {
198
+ return item.identifier.name;
199
+ }
200
+ if (item.value instanceof ValueComponent_1.ColumnReference) {
201
+ return item.value.column.name;
202
+ }
203
+ return null;
204
+ }
205
+ qualifyOutputs(outputs, sourceAlias, sourceName) {
206
+ return outputs.map(item => ({
207
+ name: item.name,
208
+ value: new ValueComponent_1.ColumnReference(sourceAlias ? [sourceAlias] : null, item.name),
209
+ sourceAlias,
210
+ sourceName,
211
+ sourceColumnName: item.name
212
+ }));
213
+ }
214
+ createExplicitOutput(name, value, fromClause = null) {
215
+ if (value instanceof ValueComponent_1.ColumnReference && value.column.name !== "*") {
216
+ const sourceMetadata = this.resolveColumnSourceMetadata(value, fromClause);
217
+ if (sourceMetadata) {
218
+ return {
219
+ name,
220
+ value,
221
+ ...sourceMetadata
222
+ };
223
+ }
224
+ }
225
+ return {
226
+ name,
227
+ value,
228
+ sourceAlias: null,
229
+ sourceName: null,
230
+ sourceColumnName: null
231
+ };
232
+ }
233
+ resolveColumnSourceMetadata(value, fromClause) {
234
+ if (!fromClause || value.namespaces === null) {
235
+ return null;
236
+ }
237
+ const namespace = value.getNamespace();
238
+ const matches = fromClause.getSources().filter(source => this.getSourceMatchNames(source).includes(namespace));
239
+ if (matches.length !== 1) {
240
+ return null;
241
+ }
242
+ const source = matches[0];
243
+ const sourceAlias = this.getColumnReferenceSourceAlias(source, namespace);
244
+ return {
245
+ sourceAlias,
246
+ sourceName: this.getColumnReferenceSourceName(source),
247
+ sourceColumnName: value.column.name
248
+ };
249
+ }
250
+ getSourceMatchNames(source) {
251
+ const names = new Set();
252
+ if (source.aliasExpression) {
253
+ names.add(source.aliasExpression.table.name);
254
+ return [...names];
255
+ }
256
+ const aliasName = source.getAliasName();
257
+ if (aliasName) {
258
+ names.add(aliasName);
259
+ }
260
+ if (source.datasource instanceof Clause_1.TableSource) {
261
+ names.add(source.datasource.table.name);
262
+ names.add(source.datasource.getSourceName());
263
+ }
264
+ return [...names];
265
+ }
266
+ getColumnReferenceSourceAlias(source, namespace) {
267
+ if (source.aliasExpression) {
268
+ return source.aliasExpression.table.name;
269
+ }
270
+ return namespace;
271
+ }
272
+ getColumnReferenceSourceName(source) {
273
+ var _a;
274
+ const cte = this.findCommonTable(source);
275
+ if (cte) {
276
+ return cte.getSourceAliasName();
277
+ }
278
+ if ((_a = source.aliasExpression) === null || _a === void 0 ? void 0 : _a.columns) {
279
+ return null;
280
+ }
281
+ if (source.datasource instanceof Clause_1.TableSource) {
282
+ return source.datasource.getSourceName();
283
+ }
284
+ return null;
285
+ }
286
+ isSelectQuery(query) {
287
+ return "__selectQueryType" in query && query.__selectQueryType === "SelectQuery";
288
+ }
289
+ }
290
+ exports.SelectOutputCollector = SelectOutputCollector;
291
+ //# sourceMappingURL=SelectOutputCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectOutputCollector.js","sourceRoot":"","sources":["../../src/transformers/SelectOutputCollector.ts"],"names":[],"mappings":"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"}