typesql-cli 0.10.0 → 0.10.2
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.
- package/README.md +1 -1
- package/cli.js +9 -20
- package/cli.js.map +1 -1
- package/code-generator.d.ts.map +1 -1
- package/code-generator.js +46 -111
- package/code-generator.js.map +1 -1
- package/describe-dynamic-query.d.ts.map +1 -1
- package/describe-dynamic-query.js +6 -13
- package/describe-dynamic-query.js.map +1 -1
- package/describe-nested-query.d.ts.map +1 -1
- package/describe-nested-query.js +11 -27
- package/describe-nested-query.js.map +1 -1
- package/describe-query.d.ts.map +1 -1
- package/describe-query.js +9 -18
- package/describe-query.js.map +1 -1
- package/drivers/libsql.d.ts.map +1 -1
- package/drivers/libsql.js +1 -2
- package/drivers/libsql.js.map +1 -1
- package/mysql-mapping.d.ts.map +1 -1
- package/mysql-mapping.js +4 -4
- package/mysql-mapping.js.map +1 -1
- package/mysql-query-analyzer/collect-constraints.d.ts.map +1 -1
- package/mysql-query-analyzer/collect-constraints.js +17 -24
- package/mysql-query-analyzer/collect-constraints.js.map +1 -1
- package/mysql-query-analyzer/infer-column-nullability.d.ts.map +1 -1
- package/mysql-query-analyzer/infer-column-nullability.js +13 -29
- package/mysql-query-analyzer/infer-column-nullability.js.map +1 -1
- package/mysql-query-analyzer/infer-param-nullability.d.ts.map +1 -1
- package/mysql-query-analyzer/infer-param-nullability.js +8 -10
- package/mysql-query-analyzer/infer-param-nullability.js.map +1 -1
- package/mysql-query-analyzer/parse.d.ts.map +1 -1
- package/mysql-query-analyzer/parse.js +15 -20
- package/mysql-query-analyzer/parse.js.map +1 -1
- package/mysql-query-analyzer/select-columns.d.ts +1 -0
- package/mysql-query-analyzer/select-columns.d.ts.map +1 -1
- package/mysql-query-analyzer/select-columns.js +51 -43
- package/mysql-query-analyzer/select-columns.js.map +1 -1
- package/mysql-query-analyzer/traverse.d.ts.map +1 -1
- package/mysql-query-analyzer/traverse.js +61 -144
- package/mysql-query-analyzer/traverse.js.map +1 -1
- package/mysql-query-analyzer/types.d.ts +2 -2
- package/mysql-query-analyzer/types.d.ts.map +1 -1
- package/mysql-query-analyzer/unify.d.ts.map +1 -1
- package/mysql-query-analyzer/unify.js +15 -59
- package/mysql-query-analyzer/unify.js.map +1 -1
- package/mysql-query-analyzer/util.d.ts.map +1 -1
- package/mysql-query-analyzer/util.js +2 -3
- package/mysql-query-analyzer/util.js.map +1 -1
- package/mysql-query-analyzer/verify-multiple-result.d.ts.map +1 -1
- package/mysql-query-analyzer/verify-multiple-result.js +3 -7
- package/mysql-query-analyzer/verify-multiple-result.js.map +1 -1
- package/package.json +47 -46
- package/queryExectutor.d.ts.map +1 -1
- package/queryExectutor.js +37 -38
- package/queryExectutor.js.map +1 -1
- package/sql-generator.d.ts.map +1 -1
- package/sql-generator.js +5 -8
- package/sql-generator.js.map +1 -1
- package/sqlite-query-analyzer/code-generator.d.ts +2 -2
- package/sqlite-query-analyzer/code-generator.d.ts.map +1 -1
- package/sqlite-query-analyzer/code-generator.js +119 -219
- package/sqlite-query-analyzer/code-generator.js.map +1 -1
- package/sqlite-query-analyzer/parser.d.ts.map +1 -1
- package/sqlite-query-analyzer/parser.js +9 -23
- package/sqlite-query-analyzer/parser.js.map +1 -1
- package/sqlite-query-analyzer/query-executor.d.ts +6 -2
- package/sqlite-query-analyzer/query-executor.d.ts.map +1 -1
- package/sqlite-query-analyzer/query-executor.js +34 -22
- package/sqlite-query-analyzer/query-executor.js.map +1 -1
- package/sqlite-query-analyzer/replace-list-params.d.ts.map +1 -1
- package/sqlite-query-analyzer/replace-list-params.js +1 -2
- package/sqlite-query-analyzer/replace-list-params.js.map +1 -1
- package/sqlite-query-analyzer/sqlite-describe-nested-query.d.ts.map +1 -1
- package/sqlite-query-analyzer/sqlite-describe-nested-query.js +9 -22
- package/sqlite-query-analyzer/sqlite-describe-nested-query.js.map +1 -1
- package/sqlite-query-analyzer/traverse.d.ts.map +1 -1
- package/sqlite-query-analyzer/traverse.js +55 -98
- package/sqlite-query-analyzer/traverse.js.map +1 -1
- package/sqlite-query-analyzer/types.d.ts +1 -1
- package/sqlite-query-analyzer/types.d.ts.map +1 -1
- package/ts-dynamic-query-descriptor.d.ts.map +1 -1
- package/ts-dynamic-query-descriptor.js +3 -4
- package/ts-dynamic-query-descriptor.js.map +1 -1
- package/ts-nested-descriptor.d.ts.map +1 -1
- package/ts-nested-descriptor.js +2 -3
- package/ts-nested-descriptor.js.map +1 -1
- package/types.d.ts +6 -2
- package/types.d.ts.map +1 -1
- package/util.d.ts.map +1 -1
- package/util.js.map +1 -1
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.describeNestedQuery =
|
3
|
+
exports.describeNestedQuery = describeNestedQuery;
|
4
4
|
const Either_1 = require("fp-ts/lib/Either");
|
5
5
|
function describeNestedQuery(columns, relations) {
|
6
6
|
const isJunctionTableMap = new Map();
|
@@ -14,11 +14,8 @@ function describeNestedQuery(columns, relations) {
|
|
14
14
|
const filterJunctionTables = relations.filter((relation) => !isJunctionTableMap.get(relation.alias || relation.name));
|
15
15
|
const result = [];
|
16
16
|
for (const [index, relation] of filterJunctionTables.entries()) {
|
17
|
-
const parent = isJunctionTableMap.get(relation.parentRelation)
|
18
|
-
|
19
|
-
: undefined;
|
20
|
-
const groupIndex = columns.findIndex((col) => col.columnName === relation.joinColumn &&
|
21
|
-
(col.table === relation.name || col.table === relation.alias));
|
17
|
+
const parent = isJunctionTableMap.get(relation.parentRelation) ? parentRef.get(relation.parentRelation) : undefined;
|
18
|
+
const groupIndex = columns.findIndex((col) => col.columnName === relation.joinColumn && (col.table === relation.name || col.table === relation.alias));
|
22
19
|
if (groupIndex === -1) {
|
23
20
|
const error = {
|
24
21
|
name: 'Error during nested result creation',
|
@@ -32,9 +29,7 @@ function describeNestedQuery(columns, relations) {
|
|
32
29
|
alias: relation.alias,
|
33
30
|
fields: columns
|
34
31
|
.map((item, index) => ({ item, index }))
|
35
|
-
.filter((col) => (parent != null &&
|
36
|
-
(col.item.table === parent.name ||
|
37
|
-
col.item.table === parent.alias)) ||
|
32
|
+
.filter((col) => (parent != null && (col.item.table === parent.name || col.item.table === parent.alias)) ||
|
38
33
|
col.item.table === relation.name ||
|
39
34
|
col.item.table === relation.alias ||
|
40
35
|
(relation.parentRelation === '' && col.item.table === ''))
|
@@ -42,30 +37,22 @@ function describeNestedQuery(columns, relations) {
|
|
42
37
|
relations: filterJunctionTables
|
43
38
|
.slice(index + 1)
|
44
39
|
.filter((child) => {
|
45
|
-
const parent = isJunctionTableMap.get(child.parentRelation)
|
46
|
-
|
47
|
-
: relation;
|
48
|
-
return (child.parentRelation === parent.name ||
|
49
|
-
(child.alias !== '' && child.parentRelation === parent.alias));
|
40
|
+
const parent = isJunctionTableMap.get(child.parentRelation) ? parentRef.get(child.parentRelation) : relation;
|
41
|
+
return child.parentRelation === parent.name || (child.alias !== '' && child.parentRelation === parent.alias);
|
50
42
|
})
|
51
43
|
.map((relation) => ({
|
52
44
|
name: relation.name,
|
53
45
|
alias: relation.alias,
|
54
|
-
cardinality: isJunctionTableMap.get(relation.parentRelation)
|
55
|
-
? 'many'
|
56
|
-
: relation.cardinality
|
46
|
+
cardinality: isJunctionTableMap.get(relation.parentRelation) ? 'many' : relation.cardinality
|
57
47
|
}))
|
58
48
|
};
|
59
49
|
result.push(relationInfo);
|
60
50
|
}
|
61
51
|
return (0, Either_1.right)(result);
|
62
52
|
}
|
63
|
-
exports.describeNestedQuery = describeNestedQuery;
|
64
53
|
function isJunctionTable(relation, relations) {
|
65
|
-
const childRelation = relations.find((r) => r.parentRelation === relation.name ||
|
66
|
-
|
67
|
-
const isJunctionTable = relation.cardinality === 'many' &&
|
68
|
-
(childRelation === null || childRelation === void 0 ? void 0 : childRelation.parentCardinality) === 'many';
|
54
|
+
const childRelation = relations.find((r) => r.parentRelation === relation.name || (r.alias !== '' && r.parentRelation === relation.alias));
|
55
|
+
const isJunctionTable = relation.cardinality === 'many' && (childRelation === null || childRelation === void 0 ? void 0 : childRelation.parentCardinality) === 'many';
|
69
56
|
return isJunctionTable;
|
70
57
|
}
|
71
58
|
//# sourceMappingURL=sqlite-describe-nested-query.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sqlite-describe-nested-query.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sqlite-describe-nested-query.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"sqlite-describe-nested-query.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sqlite-describe-nested-query.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,WAAW,EAYX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,WAAW,EAYX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAa,eAAe,EAA2C,MAAM,+BAA+B,CAAC;AAGpI,OAAO,EAKN,KAAK,eAAe,EAGpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA2B7C,wBAAgB,2BAA2B,CAC1C,QAAQ,EAAE,eAAe,EACzB,eAAe,EAAE,eAAe,GAC9B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAWvC;AA6rCD,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAehF;AA8BD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,WA2B5F"}
|
@@ -1,6 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.tryTraverse_Sql_stmtContext = tryTraverse_Sql_stmtContext;
|
4
|
+
exports.isNotNull = isNotNull;
|
5
|
+
exports.isMultipleRowResult = isMultipleRowResult;
|
4
6
|
const sqlite_1 = require("@wsporto/ts-mysql-parser/dist/sqlite");
|
5
7
|
const select_columns_1 = require("../mysql-query-analyzer/select-columns");
|
6
8
|
const collect_constraints_1 = require("../mysql-query-analyzer/collect-constraints");
|
@@ -42,7 +44,6 @@ function tryTraverse_Sql_stmtContext(sql_stmt, traverseContext) {
|
|
42
44
|
});
|
43
45
|
}
|
44
46
|
}
|
45
|
-
exports.tryTraverse_Sql_stmtContext = tryTraverse_Sql_stmtContext;
|
46
47
|
function traverse_select_stmt(select_stmt, traverseContext, subQuery = false, recursive = false, recursiveNames = []) {
|
47
48
|
const common_table_stmt = select_stmt.common_table_stmt();
|
48
49
|
if (common_table_stmt) {
|
@@ -50,16 +51,14 @@ function traverse_select_stmt(select_stmt, traverseContext, subQuery = false, re
|
|
50
51
|
const common_table_expression = common_table_stmt.common_table_expression_list();
|
51
52
|
common_table_expression.forEach((common_table_expression) => {
|
52
53
|
const table_name = common_table_expression.table_name();
|
53
|
-
const recursiveNames = common_table_expression
|
54
|
-
.column_name_list()
|
55
|
-
.map((column_name) => column_name.getText());
|
54
|
+
const recursiveNames = common_table_expression.column_name_list().map((column_name) => column_name.getText());
|
56
55
|
const select_stmt = common_table_expression.select_stmt();
|
57
56
|
const select_stmt_result = traverse_select_stmt(select_stmt, Object.assign(Object.assign({}, traverseContext), { subQuery: true }), subQuery, recursive, recursiveNames);
|
58
57
|
select_stmt_result.columns.forEach((col, index) => {
|
59
58
|
var _a;
|
60
59
|
traverseContext.withSchema.push({
|
61
60
|
table: table_name.getText(),
|
62
|
-
columnName: recursive ? (_a = recursiveNames[index]) !== null && _a !== void 0 ? _a : col.name : col.name,
|
61
|
+
columnName: recursive ? ((_a = recursiveNames[index]) !== null && _a !== void 0 ? _a : col.name) : col.name,
|
63
62
|
columnType: col.type,
|
64
63
|
columnKey: '',
|
65
64
|
notNull: col.notNull
|
@@ -109,7 +108,7 @@ function traverse_select_stmt(select_stmt, traverseContext, subQuery = false, re
|
|
109
108
|
hasOrderByParameter = true;
|
110
109
|
}
|
111
110
|
else {
|
112
|
-
traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns: fromColumns.concat(selectColumns) }));
|
111
|
+
traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns: mainQueryResult.fromColumns.concat(selectColumns) }));
|
113
112
|
}
|
114
113
|
});
|
115
114
|
if (hasOrderByParameter) {
|
@@ -177,9 +176,7 @@ function traverse_select_core(select_core, traverseContext, subQuery = false, re
|
|
177
176
|
columnsResult.push(...fields);
|
178
177
|
}
|
179
178
|
const result_column = select_core.result_column_list();
|
180
|
-
const fromColumns = subQuery || recursive
|
181
|
-
? traverseContext.fromColumns.concat(columnsResult)
|
182
|
-
: columnsResult;
|
179
|
+
const fromColumns = subQuery || recursive ? traverseContext.fromColumns.concat(columnsResult) : columnsResult;
|
183
180
|
result_column.forEach((result_column) => {
|
184
181
|
var _a, _b;
|
185
182
|
if (result_column.STAR()) {
|
@@ -210,9 +207,7 @@ function traverse_select_core(select_core, traverseContext, subQuery = false, re
|
|
210
207
|
const exprType = traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns: fromColumns }));
|
211
208
|
if (alias) {
|
212
209
|
traverseContext.relations
|
213
|
-
.filter((relation) => relation.joinColumn === exprType.name &&
|
214
|
-
(relation.name === exprType.table ||
|
215
|
-
relation.alias === exprType.table))
|
210
|
+
.filter((relation) => relation.joinColumn === exprType.name && (relation.name === exprType.table || relation.alias === exprType.table))
|
216
211
|
.forEach((relation) => {
|
217
212
|
relation.joinColumn = alias;
|
218
213
|
});
|
@@ -266,9 +261,7 @@ function traverse_select_core(select_core, traverseContext, subQuery = false, re
|
|
266
261
|
traverse_expr(havingExpr, Object.assign(Object.assign({}, traverseContext), { fromColumns: newColumns.concat(fromColumns) }));
|
267
262
|
}
|
268
263
|
const querySpecification = {
|
269
|
-
columns: listType.map((col) => (Object.assign(Object.assign({}, col), { notNull: col.notNull ||
|
270
|
-
isNotNull(col.name, whereExpr) ||
|
271
|
-
isNotNull(col.name, havingExpr) }))),
|
264
|
+
columns: listType.map((col) => (Object.assign(Object.assign({}, col), { notNull: col.notNull || isNotNull(col.name, whereExpr) || isNotNull(col.name, havingExpr) }))),
|
272
265
|
fromColumns: columnsResult //TODO - return isMultipleRowResult instead
|
273
266
|
};
|
274
267
|
return querySpecification;
|
@@ -279,7 +272,7 @@ function extractRelationsAndParams(expr, fromColumns, parameters) {
|
|
279
272
|
.filter((expr) => !expr.isSubQuery)
|
280
273
|
.map((colRef) => {
|
281
274
|
const fieldName = (0, select_columns_1.splitName)(colRef.expr.parentCtx.getText());
|
282
|
-
const column = (0, select_columns_1.
|
275
|
+
const column = (0, select_columns_1.findColumnOrVT)(fieldName, fromColumns);
|
283
276
|
return column.tableAlias || column.table;
|
284
277
|
});
|
285
278
|
const expressionList = (0, select_columns_1.getExpressions)(expr, sqlite_1.ExprContext);
|
@@ -297,9 +290,7 @@ function traverse_table_or_subquery(table_or_subquery_list, join_constraint_list
|
|
297
290
|
table_or_subquery_list.forEach((table_or_subquery, index) => {
|
298
291
|
var _a, _b, _c, _d, _e;
|
299
292
|
const numParamsBefore = traverseContext.parameters.length;
|
300
|
-
const isLeftJoin = index > 0 && join_operator_list
|
301
|
-
? ((_a = join_operator_list[index - 1]) === null || _a === void 0 ? void 0 : _a.LEFT_()) != null
|
302
|
-
: false;
|
293
|
+
const isLeftJoin = index > 0 && join_operator_list ? ((_a = join_operator_list[index - 1]) === null || _a === void 0 ? void 0 : _a.LEFT_()) != null : false;
|
303
294
|
const table_name = table_or_subquery.table_name();
|
304
295
|
const table_alias_temp = ((_b = table_or_subquery.table_alias()) === null || _b === void 0 ? void 0 : _b.getText()) || '';
|
305
296
|
let tableOrSubqueryFields = [];
|
@@ -312,14 +303,10 @@ function traverse_table_or_subquery(table_or_subquery_list, join_constraint_list
|
|
312
303
|
table_alias_temp.toLowerCase() === 'cross'
|
313
304
|
? ''
|
314
305
|
: table_alias_temp;
|
315
|
-
const join_constraint = join_constraint_list && index > 0
|
316
|
-
? join_constraint_list[index - 1]
|
317
|
-
: undefined;
|
306
|
+
const join_constraint = join_constraint_list && index > 0 ? join_constraint_list[index - 1] : undefined;
|
318
307
|
const asAlias = table_or_subquery.AS_() || false;
|
319
308
|
const tableAlias = (_c = table_or_subquery.table_alias()) === null || _c === void 0 ? void 0 : _c.getText();
|
320
|
-
const tableOrSubqueryName = table_name
|
321
|
-
? table_name.any_name().getText()
|
322
|
-
: '';
|
309
|
+
const tableOrSubqueryName = table_name ? table_name.any_name().getText() : '';
|
323
310
|
const schema = ((_d = table_or_subquery.schema_name()) === null || _d === void 0 ? void 0 : _d.getText()) || '';
|
324
311
|
if (table_name) {
|
325
312
|
const tableName = {
|
@@ -327,12 +314,8 @@ function traverse_table_or_subquery(table_or_subquery_list, join_constraint_list
|
|
327
314
|
prefix: schema
|
328
315
|
};
|
329
316
|
tableOrSubqueryFields = (0, select_columns_1.filterColumns)(traverseContext.dbSchema, traverseContext.withSchema, table_alias, tableName);
|
330
|
-
const usingFields = (join_constraint === null || join_constraint === void 0 ? void 0 : join_constraint.USING_())
|
331
|
-
|
332
|
-
: [];
|
333
|
-
const filteredFields = usingFields.length > 0
|
334
|
-
? filterUsingFields(tableOrSubqueryFields, usingFields)
|
335
|
-
: tableOrSubqueryFields;
|
317
|
+
const usingFields = (join_constraint === null || join_constraint === void 0 ? void 0 : join_constraint.USING_()) ? join_constraint === null || join_constraint === void 0 ? void 0 : join_constraint.column_name_list().map((column_name) => column_name.getText()) : [];
|
318
|
+
const filteredFields = usingFields.length > 0 ? filterUsingFields(tableOrSubqueryFields, usingFields) : tableOrSubqueryFields;
|
336
319
|
if (isLeftJoin) {
|
337
320
|
allFields.push(...filteredFields.map((field) => (Object.assign(Object.assign({}, field), { notNull: false }))));
|
338
321
|
}
|
@@ -377,24 +360,17 @@ function traverse_table_or_subquery(table_or_subquery_list, join_constraint_list
|
|
377
360
|
traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns: allFields }));
|
378
361
|
const allJoinColumsn = getAllColumns(expr);
|
379
362
|
allJoinColumsn.forEach((joinColumn) => {
|
380
|
-
const column = allFields.find((col) => col.columnName === joinColumn.name &&
|
381
|
-
|
382
|
-
col.table === joinColumn.prefix));
|
383
|
-
const filterUniqueKeys = allFields.filter((col) => (joinColumn.prefix === col.table ||
|
384
|
-
joinColumn.prefix === col.tableAlias) &&
|
385
|
-
col.columnKey === 'PRI');
|
363
|
+
const column = allFields.find((col) => col.columnName === joinColumn.name && (col.tableAlias === joinColumn.prefix || col.table === joinColumn.prefix));
|
364
|
+
const filterUniqueKeys = allFields.filter((col) => (joinColumn.prefix === col.table || joinColumn.prefix === col.tableAlias) && col.columnKey === 'PRI');
|
386
365
|
const compositeKey = filterUniqueKeys.find((uni) => uni.columnName === column.columnName);
|
387
|
-
const notUnique = (filterUniqueKeys.length > 1 && compositeKey) ||
|
388
|
-
|
389
|
-
if (joinColumn.prefix !== relation.name &&
|
390
|
-
joinColumn.prefix !== relation.alias) {
|
366
|
+
const notUnique = (filterUniqueKeys.length > 1 && compositeKey) || ((column === null || column === void 0 ? void 0 : column.columnKey) !== 'UNI' && (column === null || column === void 0 ? void 0 : column.columnKey) !== 'PRI');
|
367
|
+
if (joinColumn.prefix !== relation.name && joinColumn.prefix !== relation.alias) {
|
391
368
|
relation.parentRelation = joinColumn.prefix;
|
392
369
|
if (notUnique) {
|
393
370
|
relation.parentCardinality = 'many';
|
394
371
|
}
|
395
372
|
}
|
396
|
-
if (joinColumn.prefix === relation.name ||
|
397
|
-
joinColumn.prefix === relation.alias) {
|
373
|
+
if (joinColumn.prefix === relation.name || joinColumn.prefix === relation.alias) {
|
398
374
|
if (notUnique) {
|
399
375
|
relation.cardinality = 'many';
|
400
376
|
}
|
@@ -405,12 +381,8 @@ function traverse_table_or_subquery(table_or_subquery_list, join_constraint_list
|
|
405
381
|
if (!traverseContext.subQuery) {
|
406
382
|
traverseContext.relations.push(relation);
|
407
383
|
//dynamic query
|
408
|
-
const fragment = `${join_operator_list != null && index > 0
|
409
|
-
|
410
|
-
: 'FROM'} ${extractOriginalSql(table_or_subquery_list[index])}${join_constraint != null ? ` ${extractOriginalSql(join_constraint)}` : ''}`;
|
411
|
-
const params = traverseContext.parameters
|
412
|
-
.slice(numParamsBefore)
|
413
|
-
.map((_, index) => index + numParamsBefore);
|
384
|
+
const fragment = `${join_operator_list != null && index > 0 ? extractOriginalSql(join_operator_list[index - 1]) : 'FROM'} ${extractOriginalSql(table_or_subquery_list[index])}${join_constraint != null ? ` ${extractOriginalSql(join_constraint)}` : ''}`;
|
385
|
+
const params = traverseContext.parameters.slice(numParamsBefore).map((_, index) => index + numParamsBefore);
|
414
386
|
traverseContext.dynamicSqlInfo2.from.push({
|
415
387
|
fragment: fragment,
|
416
388
|
relationName: relation.name,
|
@@ -606,9 +578,7 @@ function traverse_expr(expr, traverseContext) {
|
|
606
578
|
table: functionType.table || ''
|
607
579
|
};
|
608
580
|
}
|
609
|
-
if (function_name === 'date' ||
|
610
|
-
function_name === 'time' ||
|
611
|
-
function_name === 'datetime') {
|
581
|
+
if (function_name === 'date' || function_name === 'time' || function_name === 'datetime') {
|
612
582
|
const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), 'DATE');
|
613
583
|
const paramExpr = expr.expr(0);
|
614
584
|
const paramType = traverse_expr(paramExpr, traverseContext);
|
@@ -680,9 +650,7 @@ function traverse_expr(expr, traverseContext) {
|
|
680
650
|
table: functionType.table || ''
|
681
651
|
};
|
682
652
|
}
|
683
|
-
if (function_name === 'row_number' ||
|
684
|
-
function_name === 'rank' ||
|
685
|
-
function_name === 'dense_rank') {
|
653
|
+
if (function_name === 'row_number' || function_name === 'rank' || function_name === 'dense_rank') {
|
686
654
|
const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), 'INTEGER');
|
687
655
|
return {
|
688
656
|
name: functionType.name,
|
@@ -868,8 +836,7 @@ function traverse_expr(expr, traverseContext) {
|
|
868
836
|
type1: returnType,
|
869
837
|
type2: typeLeft.type
|
870
838
|
});
|
871
|
-
const isDateFunctionContext = expr.parentCtx instanceof sqlite_1.ExprContext &&
|
872
|
-
((_b = expr.parentCtx.function_name()) === null || _b === void 0 ? void 0 : _b.getText().toLowerCase()) === 'date';
|
839
|
+
const isDateFunctionContext = expr.parentCtx instanceof sqlite_1.ExprContext && ((_b = expr.parentCtx.function_name()) === null || _b === void 0 ? void 0 : _b.getText().toLowerCase()) === 'date';
|
873
840
|
if (!isDateFunctionContext) {
|
874
841
|
traverseContext.constraints.push({
|
875
842
|
expression: exprRight.getText(),
|
@@ -1077,6 +1044,22 @@ function traverse_expr(expr, traverseContext) {
|
|
1077
1044
|
table: type.table || ''
|
1078
1045
|
};
|
1079
1046
|
}
|
1047
|
+
if (expr.MATCH_()) {
|
1048
|
+
const exprLeft = expr.expr(0);
|
1049
|
+
const exprRight = expr.expr(1);
|
1050
|
+
const typeRight = traverse_expr(exprRight, traverseContext);
|
1051
|
+
if (typeRight.name === '?') {
|
1052
|
+
typeRight.notNull = true;
|
1053
|
+
typeRight.type = (0, collect_constraints_1.freshVar)(exprRight.getText(), 'TEXT');
|
1054
|
+
}
|
1055
|
+
const type = (0, collect_constraints_1.freshVar)(expr.getText(), 'INTEGER');
|
1056
|
+
return {
|
1057
|
+
name: type.name,
|
1058
|
+
type: type,
|
1059
|
+
notNull: true,
|
1060
|
+
table: type.table || ''
|
1061
|
+
};
|
1062
|
+
}
|
1080
1063
|
const select_stmt = expr.select_stmt();
|
1081
1064
|
if (select_stmt) {
|
1082
1065
|
const subQueryType = traverse_select_stmt(select_stmt, Object.assign(Object.assign({}, traverseContext), { subQuery: true }), true);
|
@@ -1111,8 +1094,7 @@ function traverse_expr(expr, traverseContext) {
|
|
1111
1094
|
const whenTypes = [];
|
1112
1095
|
expr.expr_list().forEach((expr_, index) => {
|
1113
1096
|
const type = traverse_expr(expr_, traverseContext);
|
1114
|
-
if (index % 2 === 0 &&
|
1115
|
-
(!expr.ELSE_() || index < expr.expr_list().length - 1)) {
|
1097
|
+
if (index % 2 === 0 && (!expr.ELSE_() || index < expr.expr_list().length - 1)) {
|
1116
1098
|
whenTypes.push(type);
|
1117
1099
|
}
|
1118
1100
|
else {
|
@@ -1157,7 +1139,7 @@ function traverse_column_name(column_name, table_name, traverseContext) {
|
|
1157
1139
|
name: column_name.getText(),
|
1158
1140
|
prefix: (table_name === null || table_name === void 0 ? void 0 : table_name.getText()) || ''
|
1159
1141
|
};
|
1160
|
-
const column = (0, select_columns_1.
|
1142
|
+
const column = (0, select_columns_1.findColumnOrVT)(fieldName, traverseContext.fromColumns);
|
1161
1143
|
// const typeVar = freshVar(column.columnName, column.columnType.type, column.tableAlias || column.table);
|
1162
1144
|
return column;
|
1163
1145
|
}
|
@@ -1166,22 +1148,17 @@ function isNotNull(columnName, where) {
|
|
1166
1148
|
return false;
|
1167
1149
|
}
|
1168
1150
|
if (where.AND_()) {
|
1169
|
-
const ifNullList = where
|
1170
|
-
.expr_list()
|
1171
|
-
.map((expr) => isNotNull(columnName, expr));
|
1151
|
+
const ifNullList = where.expr_list().map((expr) => isNotNull(columnName, expr));
|
1172
1152
|
const result = ifNullList.some((v) => v);
|
1173
1153
|
return result;
|
1174
1154
|
}
|
1175
1155
|
if (where.OR_()) {
|
1176
|
-
const possibleNullList = where
|
1177
|
-
.expr_list()
|
1178
|
-
.map((expr) => isNotNull(columnName, expr));
|
1156
|
+
const possibleNullList = where.expr_list().map((expr) => isNotNull(columnName, expr));
|
1179
1157
|
const result = possibleNullList.every((v) => v);
|
1180
1158
|
return result;
|
1181
1159
|
}
|
1182
1160
|
return isNotNullExpr(columnName, where);
|
1183
1161
|
}
|
1184
|
-
exports.isNotNull = isNotNull;
|
1185
1162
|
function isNotNullExpr(columnName, expr) {
|
1186
1163
|
if (expr.OPEN_PAR() && expr.CLOSE_PAR()) {
|
1187
1164
|
const innerExpr = expr.expr(0);
|
@@ -1192,9 +1169,7 @@ function isNotNullExpr(columnName, expr) {
|
|
1192
1169
|
expr.GT_EQ() ||
|
1193
1170
|
expr.LT() ||
|
1194
1171
|
expr.LT_EQ() ||
|
1195
|
-
(expr.IS_() &&
|
1196
|
-
expr.expr_list().length === 2 &&
|
1197
|
-
expr.expr(1).getText() === 'notnull')) {
|
1172
|
+
(expr.IS_() && expr.expr_list().length === 2 && expr.expr(1).getText() === 'notnull')) {
|
1198
1173
|
const exprLeft = expr.expr(0);
|
1199
1174
|
const exprRight = expr.expr(1);
|
1200
1175
|
const column_name_left = exprLeft.column_name();
|
@@ -1217,22 +1192,16 @@ function isMultipleRowResult(select_stmt, fromColumns) {
|
|
1217
1192
|
if (!from) {
|
1218
1193
|
return false;
|
1219
1194
|
}
|
1220
|
-
const groupBy = select_stmt
|
1221
|
-
.select_core_list()
|
1222
|
-
.some((select_core) => select_core.GROUP_() != null);
|
1195
|
+
const groupBy = select_stmt.select_core_list().some((select_core) => select_core.GROUP_() != null);
|
1223
1196
|
if (groupBy) {
|
1224
1197
|
return true;
|
1225
1198
|
}
|
1226
|
-
const agreegateFunction = select_core
|
1227
|
-
.result_column_list()
|
1228
|
-
.some((result_column) => isAgregateFunction(result_column));
|
1199
|
+
const agreegateFunction = select_core.result_column_list().some((result_column) => isAgregateFunction(result_column));
|
1229
1200
|
if (agreegateFunction) {
|
1230
1201
|
return false;
|
1231
1202
|
}
|
1232
1203
|
const _whereExpr = select_core._whereExpr;
|
1233
|
-
const isSingleResult = select_core.join_clause() == null &&
|
1234
|
-
_whereExpr &&
|
1235
|
-
where_is_single_result(_whereExpr, fromColumns);
|
1204
|
+
const isSingleResult = select_core.join_clause() == null && _whereExpr && where_is_single_result(_whereExpr, fromColumns);
|
1236
1205
|
if (isSingleResult === true) {
|
1237
1206
|
return false;
|
1238
1207
|
}
|
@@ -1242,7 +1211,6 @@ function isMultipleRowResult(select_stmt, fromColumns) {
|
|
1242
1211
|
}
|
1243
1212
|
return true;
|
1244
1213
|
}
|
1245
|
-
exports.isMultipleRowResult = isMultipleRowResult;
|
1246
1214
|
function isAgregateFunction(result_column) {
|
1247
1215
|
var _a;
|
1248
1216
|
if (((_a = result_column.expr()) === null || _a === void 0 ? void 0 : _a.over_clause()) != null) {
|
@@ -1321,9 +1289,7 @@ function traverse_insert_stmt(insert_stmt, traverseContext) {
|
|
1321
1289
|
type1: col.columnType,
|
1322
1290
|
type2: exprType.type
|
1323
1291
|
});
|
1324
|
-
const notNullColumn = col.columnKey === 'PRI' && col.columnType.type === 'INTEGER'
|
1325
|
-
? false
|
1326
|
-
: col.notNull;
|
1292
|
+
const notNullColumn = col.columnKey === 'PRI' && col.columnType.type === 'INTEGER' ? false : col.notNull;
|
1327
1293
|
insertColumns.push(Object.assign(Object.assign({}, param), { notNull: exprType.name === '?' ? notNullColumn : param.notNull }));
|
1328
1294
|
});
|
1329
1295
|
});
|
@@ -1339,15 +1305,11 @@ function traverse_insert_stmt(insert_stmt, traverseContext) {
|
|
1339
1305
|
type1: col.columnType,
|
1340
1306
|
type2: selectColumn.type
|
1341
1307
|
});
|
1342
|
-
const notNullColumn = col.columnKey === 'PRI' && col.columnType.type === 'INTEGER'
|
1343
|
-
? false
|
1344
|
-
: col.notNull;
|
1308
|
+
const notNullColumn = col.columnKey === 'PRI' && col.columnType.type === 'INTEGER' ? false : col.notNull;
|
1345
1309
|
columnNullability.set(selectColumn.type.id, notNullColumn);
|
1346
1310
|
});
|
1347
1311
|
traverseContext.parameters.forEach((param) => {
|
1348
|
-
insertColumns.push(Object.assign(Object.assign({}, param), { notNull: columnNullability.get(param.type.id) != null
|
1349
|
-
? columnNullability.get(param.type.id)
|
1350
|
-
: param.notNull }));
|
1312
|
+
insertColumns.push(Object.assign(Object.assign({}, param), { notNull: columnNullability.get(param.type.id) != null ? columnNullability.get(param.type.id) : param.notNull }));
|
1351
1313
|
});
|
1352
1314
|
}
|
1353
1315
|
const upsert_clause = insert_stmt.upsert_clause();
|
@@ -1359,9 +1321,7 @@ function traverse_insert_stmt(insert_stmt, traverseContext) {
|
|
1359
1321
|
const col = traverse_column_name(column_name, null, Object.assign(Object.assign({}, traverseContext), { fromColumns }));
|
1360
1322
|
const expr = upsert_clause.expr(index);
|
1361
1323
|
const table_name = expr.table_name();
|
1362
|
-
const excludedColumns = table_name && table_name.getText() === 'excluded'
|
1363
|
-
? fromColumns.map((col) => (Object.assign(Object.assign({}, col), { table: 'excluded' })))
|
1364
|
-
: [];
|
1324
|
+
const excludedColumns = table_name && table_name.getText() === 'excluded' ? fromColumns.map((col) => (Object.assign(Object.assign({}, col), { table: 'excluded' }))) : [];
|
1365
1325
|
const exprType = traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns: fromColumns.concat(excludedColumns) }));
|
1366
1326
|
traverseContext.constraints.push({
|
1367
1327
|
expression: column_name.getText(),
|
@@ -1374,9 +1334,7 @@ function traverse_insert_stmt(insert_stmt, traverseContext) {
|
|
1374
1334
|
});
|
1375
1335
|
}
|
1376
1336
|
const returning_clause = insert_stmt.returning_clause();
|
1377
|
-
const returninColumns = returning_clause
|
1378
|
-
? traverse_returning_clause(returning_clause, fromColumns)
|
1379
|
-
: [];
|
1337
|
+
const returninColumns = returning_clause ? traverse_returning_clause(returning_clause, fromColumns) : [];
|
1380
1338
|
const queryResult = {
|
1381
1339
|
queryType: 'Insert',
|
1382
1340
|
constraints: traverseContext.constraints,
|
@@ -1420,8 +1378,7 @@ function traverse_update_stmt(update_stmt, traverseContext) {
|
|
1420
1378
|
expr_list.forEach((expr, index) => {
|
1421
1379
|
paramsBefore = traverseContext.parameters.length;
|
1422
1380
|
const exprType = traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns }));
|
1423
|
-
if (!update_stmt.WHERE_() ||
|
1424
|
-
expr.start.start < update_stmt.WHERE_().symbol.start) {
|
1381
|
+
if (!update_stmt.WHERE_() || expr.start.start < update_stmt.WHERE_().symbol.start) {
|
1425
1382
|
const col = columns[index];
|
1426
1383
|
traverseContext.constraints.push({
|
1427
1384
|
expression: expr.getText(),
|