typesql-cli 0.8.0-alpha.6 → 0.8.0-alpha.7
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/cli.js +36 -39
- package/cli.js.map +1 -1
- package/code-generator.d.ts +4 -4
- package/code-generator.d.ts.map +1 -1
- package/code-generator.js +17 -19
- package/code-generator.js.map +1 -1
- package/describe-query.d.ts +2 -3
- package/describe-query.d.ts.map +1 -1
- package/describe-query.js +3 -2
- package/describe-query.js.map +1 -1
- package/mysql-query-analyzer/collect-constraints.d.ts +2 -2
- package/mysql-query-analyzer/collect-constraints.d.ts.map +1 -1
- package/mysql-query-analyzer/collect-constraints.js +1 -1
- package/mysql-query-analyzer/collect-constraints.js.map +1 -1
- package/mysql-query-analyzer/traverse.d.ts.map +1 -1
- package/mysql-query-analyzer/traverse.js +15 -15
- package/mysql-query-analyzer/traverse.js.map +1 -1
- package/mysql-query-analyzer/types.d.ts +1 -1
- package/mysql-query-analyzer/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/queryExectutor.d.ts +8 -15
- package/queryExectutor.d.ts.map +1 -1
- package/queryExectutor.js +119 -121
- package/queryExectutor.js.map +1 -1
- package/sql-generator.d.ts +5 -4
- package/sql-generator.d.ts.map +1 -1
- package/sql-generator.js +24 -21
- package/sql-generator.js.map +1 -1
- package/sqlite-query-analyzer/code-generator.d.ts +3 -1
- package/sqlite-query-analyzer/code-generator.d.ts.map +1 -1
- package/sqlite-query-analyzer/code-generator.js +28 -13
- package/sqlite-query-analyzer/code-generator.js.map +1 -1
- package/sqlite-query-analyzer/parser.d.ts +2 -0
- package/sqlite-query-analyzer/parser.d.ts.map +1 -1
- package/sqlite-query-analyzer/parser.js +19 -6
- package/sqlite-query-analyzer/parser.js.map +1 -1
- package/sqlite-query-analyzer/query-executor.d.ts +7 -3
- package/sqlite-query-analyzer/query-executor.d.ts.map +1 -1
- package/sqlite-query-analyzer/query-executor.js +65 -6
- package/sqlite-query-analyzer/query-executor.js.map +1 -1
- package/sqlite-query-analyzer/sql-generator.d.ts +6 -0
- package/sqlite-query-analyzer/sql-generator.d.ts.map +1 -0
- package/sqlite-query-analyzer/sql-generator.js +96 -0
- package/sqlite-query-analyzer/sql-generator.js.map +1 -0
- package/sqlite-query-analyzer/sqlite-crud-generator.d.ts +6 -0
- package/sqlite-query-analyzer/sqlite-crud-generator.d.ts.map +1 -0
- package/sqlite-query-analyzer/sqlite-crud-generator.js +96 -0
- package/sqlite-query-analyzer/sqlite-crud-generator.js.map +1 -0
- package/sqlite-query-analyzer/traverse.d.ts.map +1 -1
- package/sqlite-query-analyzer/traverse.js +59 -39
- package/sqlite-query-analyzer/traverse.js.map +1 -1
- package/types.d.ts +15 -1
- package/types.d.ts.map +1 -1
@@ -1,20 +1,33 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.parseSql = void 0;
|
3
|
+
exports.parseSql = exports.prepareAndParse = void 0;
|
4
4
|
const Either_1 = require("fp-ts/lib/Either");
|
5
5
|
const sqlite_1 = require("@wsporto/ts-mysql-parser/dist/sqlite");
|
6
6
|
const traverse_1 = require("./traverse");
|
7
7
|
const collect_constraints_1 = require("../mysql-query-analyzer/collect-constraints");
|
8
8
|
const unify_1 = require("../mysql-query-analyzer/unify");
|
9
9
|
const describe_query_1 = require("../describe-query");
|
10
|
+
const query_executor_1 = require("./query-executor");
|
11
|
+
function prepareAndParse(db, sql, dbSchema) {
|
12
|
+
const { sql: processedSql } = (0, describe_query_1.preprocessSql)(sql);
|
13
|
+
const explainSqlResult = (0, query_executor_1.explainSql)(db, processedSql);
|
14
|
+
if ((0, Either_1.isLeft)(explainSqlResult)) {
|
15
|
+
return (0, Either_1.left)({
|
16
|
+
name: 'Invalid sql',
|
17
|
+
description: explainSqlResult.left.description
|
18
|
+
});
|
19
|
+
}
|
20
|
+
return parseSql(sql, dbSchema);
|
21
|
+
}
|
22
|
+
exports.prepareAndParse = prepareAndParse;
|
10
23
|
function parseSql(sql, dbSchema) {
|
11
24
|
const { sql: processedSql, namedParameters } = (0, describe_query_1.preprocessSql)(sql);
|
12
25
|
const parser = (0, sqlite_1.parseSql)(processedSql);
|
13
26
|
const sql_stmt = parser.sql_stmt();
|
14
|
-
return
|
27
|
+
return createSchemaDefinition(processedSql, sql_stmt, dbSchema, namedParameters);
|
15
28
|
}
|
16
29
|
exports.parseSql = parseSql;
|
17
|
-
function
|
30
|
+
function createSchemaDefinition(sql, sql_stmtContext, dbSchema, namedParameters) {
|
18
31
|
const traverseContext = {
|
19
32
|
dbSchema,
|
20
33
|
withSchema: [],
|
@@ -47,8 +60,8 @@ function describeSQL(sql, sql_stmtContext, dbSchema, namedParameters) {
|
|
47
60
|
return colInfo;
|
48
61
|
});
|
49
62
|
const paramsResult = traverseContext.parameters.map((param, index) => {
|
50
|
-
const columnType = (0, collect_constraints_1.getVarType)(substitutions, param);
|
51
|
-
const columnNotNull =
|
63
|
+
const columnType = (0, collect_constraints_1.getVarType)(substitutions, param.type);
|
64
|
+
const columnNotNull = param.notNull;
|
52
65
|
const colInfo = {
|
53
66
|
name: namedParameters && namedParameters[index] ? namedParameters[index] : 'param' + (index + 1),
|
54
67
|
columnType: (0, describe_query_1.verifyNotInferred)(columnType),
|
@@ -114,7 +127,7 @@ function describeSQL(sql, sql_stmtContext, dbSchema, namedParameters) {
|
|
114
127
|
const columnType = (0, collect_constraints_1.getVarType)(substitutions, param.type);
|
115
128
|
const columnNotNull = param.notNull;
|
116
129
|
const colInfo = {
|
117
|
-
name: param
|
130
|
+
name: namedParameters && namedParameters[index] ? namedParameters[index] : 'param' + (index + 1),
|
118
131
|
columnType: (0, describe_query_1.verifyNotInferred)(columnType),
|
119
132
|
notNull: columnNotNull
|
120
133
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/parser.ts"],"names":[],"mappings":";;;AAAA,
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/parser.ts"],"names":[],"mappings":"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"}
|
@@ -1,5 +1,9 @@
|
|
1
1
|
import { Either } from "fp-ts/lib/Either";
|
2
|
-
import { TypeSqlError } from "../types";
|
3
|
-
import { ColumnSchema } from "../mysql-query-analyzer/types";
|
4
|
-
|
2
|
+
import { DatabaseClient, TypeSqlError } from "../types";
|
3
|
+
import { ColumnSchema, Table } from "../mysql-query-analyzer/types";
|
4
|
+
import { Database as DatabaseType } from 'better-sqlite3';
|
5
|
+
export declare function createSqliteClient(databaseUri: string): Either<TypeSqlError, DatabaseClient>;
|
6
|
+
export declare function loadDbSchema(db: DatabaseType): Either<TypeSqlError, ColumnSchema[]>;
|
7
|
+
export declare function selectSqliteTablesFromSchema(db: DatabaseType): Either<TypeSqlError, Table[]>;
|
8
|
+
export declare function explainSql(db: DatabaseType, sql: string): Either<TypeSqlError, boolean>;
|
5
9
|
//# sourceMappingURL=query-executor.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"query-executor.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/query-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"query-executor.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/query-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAiB,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEpE,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAM5F;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAiCnF;AAED,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAsB5F;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAYvF"}
|
@@ -3,11 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.loadDbSchema = void 0;
|
6
|
+
exports.explainSql = exports.selectSqliteTablesFromSchema = exports.loadDbSchema = exports.createSqliteClient = void 0;
|
7
7
|
const Either_1 = require("fp-ts/lib/Either");
|
8
8
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
9
|
-
function
|
9
|
+
function createSqliteClient(databaseUri) {
|
10
10
|
const db = new better_sqlite3_1.default(databaseUri);
|
11
|
+
return (0, Either_1.right)({
|
12
|
+
type: 'sqlite',
|
13
|
+
client: db
|
14
|
+
});
|
15
|
+
}
|
16
|
+
exports.createSqliteClient = createSqliteClient;
|
17
|
+
function loadDbSchema(db) {
|
11
18
|
const sql = `
|
12
19
|
WITH all_tables AS (
|
13
20
|
SELECT name FROM sqlite_schema WHERE type = 'table'
|
@@ -16,14 +23,66 @@ function loadDbSchema(databaseUri) {
|
|
16
23
|
'' AS schema,
|
17
24
|
t.name as 'table',
|
18
25
|
ti.name as 'column',
|
19
|
-
|
26
|
+
CASE
|
27
|
+
WHEN ti.type LIKE '%INT%' THEN 'INTEGER'
|
28
|
+
WHEN ti.type LIKE '%CHAR%' OR ti.type LIKE '%CLOB%' OR ti.type like '%TEXT%' THEN 'TEXT'
|
29
|
+
WHEN ti.type LIKE '%BLOB%' OR ti.type = '' THEN 'BLOB'
|
30
|
+
WHEN ti.type LIKE '%REAL%' OR ti.type LIKE '%FLOA%' OR ti.type like '%DOUB%' THEN 'REAL'
|
31
|
+
ELSE 'NUMERIC'
|
32
|
+
END as column_type,
|
20
33
|
ti.'notnull' or ti.pk = 1 as 'notNull',
|
21
34
|
IIF(ti.pk = 1, 'PRI', '') as columnKey
|
22
35
|
FROM all_tables t INNER JOIN pragma_table_info(t.name) ti
|
23
36
|
`;
|
24
|
-
|
25
|
-
.
|
26
|
-
|
37
|
+
try {
|
38
|
+
const result = db.prepare(sql)
|
39
|
+
.all();
|
40
|
+
return (0, Either_1.right)(result.map(col => (Object.assign(Object.assign({}, col), { notNull: !!col.notNull }))));
|
41
|
+
}
|
42
|
+
catch (err_) {
|
43
|
+
const err = err_;
|
44
|
+
return (0, Either_1.left)({
|
45
|
+
name: err.name,
|
46
|
+
description: err.message
|
47
|
+
});
|
48
|
+
}
|
27
49
|
}
|
28
50
|
exports.loadDbSchema = loadDbSchema;
|
51
|
+
function selectSqliteTablesFromSchema(db) {
|
52
|
+
const sql = `
|
53
|
+
SELECT
|
54
|
+
'' as schema,
|
55
|
+
name as 'table'
|
56
|
+
FROM sqlite_schema
|
57
|
+
WHERE type='table'
|
58
|
+
ORDER BY name
|
59
|
+
`;
|
60
|
+
try {
|
61
|
+
const result = db.prepare(sql)
|
62
|
+
.all();
|
63
|
+
return (0, Either_1.right)(result);
|
64
|
+
}
|
65
|
+
catch (e) {
|
66
|
+
const err = e;
|
67
|
+
return (0, Either_1.left)({
|
68
|
+
name: err.name,
|
69
|
+
description: err.message
|
70
|
+
});
|
71
|
+
}
|
72
|
+
}
|
73
|
+
exports.selectSqliteTablesFromSchema = selectSqliteTablesFromSchema;
|
74
|
+
function explainSql(db, sql) {
|
75
|
+
try {
|
76
|
+
db.prepare(sql);
|
77
|
+
return (0, Either_1.right)(true);
|
78
|
+
}
|
79
|
+
catch (err_) {
|
80
|
+
const err = err_;
|
81
|
+
return (0, Either_1.left)({
|
82
|
+
name: err.name,
|
83
|
+
description: err.message
|
84
|
+
});
|
85
|
+
}
|
86
|
+
}
|
87
|
+
exports.explainSql = explainSql;
|
29
88
|
//# sourceMappingURL=query-executor.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"query-executor.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/query-executor.ts"],"names":[],"mappings":";;;;;;AAAA,
|
1
|
+
{"version":3,"file":"query-executor.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/query-executor.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAuD;AAGvD,oEAAoE;AAEpE,SAAgB,kBAAkB,CAAC,WAAmB;IACrD,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,WAAW,CAAC,CAAC;IACrC,OAAO,IAAA,cAAK,EAAC;QACZ,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,EAAE;KACV,CAAC,CAAC;AACJ,CAAC;AAND,gDAMC;AAED,SAAgB,YAAY,CAAC,EAAgB;IAE5C,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;GAkBV,CAAA;IACF,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,GAAG,EAAoB,CAAC;QAC1B,OAAO,IAAA,cAAK,EAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,iCAAM,GAAG,KAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,IAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAa,CAAC;QAC1B,OAAO,IAAA,aAAI,EAAC;YACX,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,OAAO;SACxB,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AAjCD,oCAiCC;AAED,SAAgB,4BAA4B,CAAC,EAAgB;IAC5D,MAAM,GAAG,GAAG;;;;;;;KAOR,CAAA;IAEJ,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,GAAG,EAAa,CAAC;QACnB,OAAO,IAAA,cAAK,EAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,CAAU,CAAC;QACvB,OAAO,IAAA,aAAI,EAAC;YACX,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,OAAO;SACxB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAtBD,oEAsBC;AAED,SAAgB,UAAU,CAAC,EAAgB,EAAE,GAAW;IACvD,IAAI,CAAC;QACJ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,IAAA,cAAK,EAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAa,CAAC;QAC1B,OAAO,IAAA,aAAI,EAAC;YACX,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,OAAO;SACxB,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AAZD,gCAYC"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { ColumnSchema } from "./mysql-query-analyzer/types";
|
2
|
+
export declare function generateSelectStatement(tableName: string, columns: ColumnSchema[]): string;
|
3
|
+
export declare function generateInsertStatement(tableName: string, dbSchema: ColumnSchema[]): string;
|
4
|
+
export declare function generateUpdateStatement(tableName: string, dbSchema: ColumnSchema[]): string;
|
5
|
+
export declare function generateDeleteStatement(tableName: string, dbSchema: ColumnSchema[]): string;
|
6
|
+
//# sourceMappingURL=sql-generator.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sql-generator.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sql-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,UAuBjF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAwBlF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAsBlF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAclF"}
|
@@ -0,0 +1,96 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.generateDeleteStatement = exports.generateUpdateStatement = exports.generateInsertStatement = exports.generateSelectStatement = void 0;
|
7
|
+
const code_block_writer_1 = __importDefault(require("code-block-writer"));
|
8
|
+
function generateSelectStatement(tableName, columns) {
|
9
|
+
const keys = columns.filter(col => col.columnKey = 'PRI');
|
10
|
+
if (keys.length == 0) {
|
11
|
+
keys.push(...columns.filter(col => col.columnKey == 'UNI'));
|
12
|
+
}
|
13
|
+
const writer = new code_block_writer_1.default();
|
14
|
+
writer.writeLine("SELECT");
|
15
|
+
columns.forEach((col, columnIndex) => {
|
16
|
+
writer.indent().write(escapeColumn(col.column));
|
17
|
+
writer.conditionalWrite(columnIndex < columns.length - 1, ',');
|
18
|
+
writer.newLine();
|
19
|
+
});
|
20
|
+
writer.writeLine(`FROM ${escapeTableName(tableName)}`);
|
21
|
+
if (keys.length > 0) {
|
22
|
+
writer.write(`WHERE `);
|
23
|
+
writer.write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
|
24
|
+
}
|
25
|
+
return writer.toString();
|
26
|
+
}
|
27
|
+
exports.generateSelectStatement = generateSelectStatement;
|
28
|
+
function generateInsertStatement(tableName, dbSchema) {
|
29
|
+
const columns = dbSchema.filter(col => !col.autoincrement);
|
30
|
+
const writer = new code_block_writer_1.default();
|
31
|
+
writer.writeLine(`INSERT INTO ${escapeTableName(tableName)}`);
|
32
|
+
writer.writeLine("(");
|
33
|
+
columns.forEach((col, columnIndex) => {
|
34
|
+
writer.indent().write(escapeColumn(col.column));
|
35
|
+
writer.conditionalWrite(columnIndex != columns.length - 1, ',');
|
36
|
+
writer.newLine();
|
37
|
+
});
|
38
|
+
writer.writeLine(')');
|
39
|
+
writer.writeLine("VALUES");
|
40
|
+
writer.writeLine("(");
|
41
|
+
columns.forEach((col, columnIndex) => {
|
42
|
+
writer.indent().write(':' + col.column);
|
43
|
+
writer.conditionalWrite(columnIndex < columns.length - 1, ',');
|
44
|
+
writer.newLine();
|
45
|
+
});
|
46
|
+
writer.write(")");
|
47
|
+
return writer.toString();
|
48
|
+
}
|
49
|
+
exports.generateInsertStatement = generateInsertStatement;
|
50
|
+
function generateUpdateStatement(tableName, dbSchema) {
|
51
|
+
const columns = dbSchema.filter(col => !col.autoincrement);
|
52
|
+
const keys = dbSchema.filter(col => col.columnKey = 'PRI');
|
53
|
+
if (keys.length == 0) {
|
54
|
+
keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
|
55
|
+
}
|
56
|
+
const writer = new code_block_writer_1.default();
|
57
|
+
writer.writeLine(`UPDATE ${escapeTableName(tableName)}`);
|
58
|
+
writer.writeLine("SET");
|
59
|
+
columns.forEach((col, columnIndex) => {
|
60
|
+
writer.indent().write(`${escapeColumn(col.column)} = IF(:${col.column}Set, :${col.column}, ${escapeColumn(col.column)})`);
|
61
|
+
writer.conditionalWrite(columnIndex != columns.length - 1, ',');
|
62
|
+
writer.newLine();
|
63
|
+
});
|
64
|
+
if (keys.length > 0) {
|
65
|
+
writer.writeLine('WHERE');
|
66
|
+
writer.indent().write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
|
67
|
+
}
|
68
|
+
return writer.toString();
|
69
|
+
}
|
70
|
+
exports.generateUpdateStatement = generateUpdateStatement;
|
71
|
+
function generateDeleteStatement(tableName, dbSchema) {
|
72
|
+
const keys = dbSchema.filter(col => col.columnKey = 'PRI');
|
73
|
+
if (keys.length == 0) {
|
74
|
+
keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
|
75
|
+
}
|
76
|
+
const writer = new code_block_writer_1.default();
|
77
|
+
writer.writeLine(`DELETE FROM ${escapeTableName(tableName)}`);
|
78
|
+
if (keys.length > 0) {
|
79
|
+
writer.write('WHERE ');
|
80
|
+
writer.write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
|
81
|
+
}
|
82
|
+
return writer.toString();
|
83
|
+
}
|
84
|
+
exports.generateDeleteStatement = generateDeleteStatement;
|
85
|
+
//Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_]
|
86
|
+
function escapeTableName(tableName) {
|
87
|
+
const validPattern = /^[a-zA-Z0-9_$]+$/g;
|
88
|
+
if (!validPattern.test(tableName)) {
|
89
|
+
return `\`${tableName}\``;
|
90
|
+
}
|
91
|
+
return tableName;
|
92
|
+
}
|
93
|
+
function escapeColumn(column) {
|
94
|
+
return `\`${column}\``;
|
95
|
+
}
|
96
|
+
//# sourceMappingURL=sql-generator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sql-generator.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sql-generator.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { ColumnSchema } from "../mysql-query-analyzer/types";
|
2
|
+
export declare function generateSelectStatement(tableName: string, columns: ColumnSchema[]): string;
|
3
|
+
export declare function generateInsertStatement(tableName: string, dbSchema: ColumnSchema[]): string;
|
4
|
+
export declare function generateUpdateStatement(tableName: string, dbSchema: ColumnSchema[]): string;
|
5
|
+
export declare function generateDeleteStatement(tableName: string, dbSchema: ColumnSchema[]): string;
|
6
|
+
//# sourceMappingURL=sqlite-crud-generator.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sqlite-crud-generator.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sqlite-crud-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,UAuBjF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAwBlF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAsBlF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAclF"}
|
@@ -0,0 +1,96 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.generateDeleteStatement = exports.generateUpdateStatement = exports.generateInsertStatement = exports.generateSelectStatement = void 0;
|
7
|
+
const code_block_writer_1 = __importDefault(require("code-block-writer"));
|
8
|
+
function generateSelectStatement(tableName, columns) {
|
9
|
+
const keys = columns.filter(col => col.columnKey = 'PRI');
|
10
|
+
if (keys.length == 0) {
|
11
|
+
keys.push(...columns.filter(col => col.columnKey == 'UNI'));
|
12
|
+
}
|
13
|
+
const writer = new code_block_writer_1.default();
|
14
|
+
writer.writeLine("SELECT");
|
15
|
+
columns.forEach((col, columnIndex) => {
|
16
|
+
writer.indent().write(escapeColumn(col.column));
|
17
|
+
writer.conditionalWrite(columnIndex < columns.length - 1, ',');
|
18
|
+
writer.newLine();
|
19
|
+
});
|
20
|
+
writer.writeLine(`FROM ${escapeTableName(tableName)}`);
|
21
|
+
if (keys.length > 0) {
|
22
|
+
writer.write(`WHERE `);
|
23
|
+
writer.write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
|
24
|
+
}
|
25
|
+
return writer.toString();
|
26
|
+
}
|
27
|
+
exports.generateSelectStatement = generateSelectStatement;
|
28
|
+
function generateInsertStatement(tableName, dbSchema) {
|
29
|
+
const columns = dbSchema.filter(col => !col.autoincrement);
|
30
|
+
const writer = new code_block_writer_1.default();
|
31
|
+
writer.writeLine(`INSERT INTO ${escapeTableName(tableName)}`);
|
32
|
+
writer.writeLine("(");
|
33
|
+
columns.forEach((col, columnIndex) => {
|
34
|
+
writer.indent().write(escapeColumn(col.column));
|
35
|
+
writer.conditionalWrite(columnIndex != columns.length - 1, ',');
|
36
|
+
writer.newLine();
|
37
|
+
});
|
38
|
+
writer.writeLine(')');
|
39
|
+
writer.writeLine("VALUES");
|
40
|
+
writer.writeLine("(");
|
41
|
+
columns.forEach((col, columnIndex) => {
|
42
|
+
writer.indent().write(':' + col.column);
|
43
|
+
writer.conditionalWrite(columnIndex < columns.length - 1, ',');
|
44
|
+
writer.newLine();
|
45
|
+
});
|
46
|
+
writer.write(")");
|
47
|
+
return writer.toString();
|
48
|
+
}
|
49
|
+
exports.generateInsertStatement = generateInsertStatement;
|
50
|
+
function generateUpdateStatement(tableName, dbSchema) {
|
51
|
+
const columns = dbSchema.filter(col => !col.autoincrement);
|
52
|
+
const keys = dbSchema.filter(col => col.columnKey = 'PRI');
|
53
|
+
if (keys.length == 0) {
|
54
|
+
keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
|
55
|
+
}
|
56
|
+
const writer = new code_block_writer_1.default();
|
57
|
+
writer.writeLine(`UPDATE ${escapeTableName(tableName)}`);
|
58
|
+
writer.writeLine("SET");
|
59
|
+
columns.forEach((col, columnIndex) => {
|
60
|
+
writer.indent().write(`${escapeColumn(col.column)} = CASE WHEN :${col.column}Set THEN :${col.column} ELSE ${escapeColumn(col.column)}) END`);
|
61
|
+
writer.conditionalWrite(columnIndex != columns.length - 1, ',');
|
62
|
+
writer.newLine();
|
63
|
+
});
|
64
|
+
if (keys.length > 0) {
|
65
|
+
writer.writeLine('WHERE');
|
66
|
+
writer.indent().write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
|
67
|
+
}
|
68
|
+
return writer.toString();
|
69
|
+
}
|
70
|
+
exports.generateUpdateStatement = generateUpdateStatement;
|
71
|
+
function generateDeleteStatement(tableName, dbSchema) {
|
72
|
+
const keys = dbSchema.filter(col => col.columnKey = 'PRI');
|
73
|
+
if (keys.length == 0) {
|
74
|
+
keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
|
75
|
+
}
|
76
|
+
const writer = new code_block_writer_1.default();
|
77
|
+
writer.writeLine(`DELETE FROM ${escapeTableName(tableName)}`);
|
78
|
+
if (keys.length > 0) {
|
79
|
+
writer.write('WHERE ');
|
80
|
+
writer.write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
|
81
|
+
}
|
82
|
+
return writer.toString();
|
83
|
+
}
|
84
|
+
exports.generateDeleteStatement = generateDeleteStatement;
|
85
|
+
//Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_]
|
86
|
+
function escapeTableName(tableName) {
|
87
|
+
const validPattern = /^[a-zA-Z0-9_$]+$/g;
|
88
|
+
if (!validPattern.test(tableName)) {
|
89
|
+
return `[${tableName}]`;
|
90
|
+
}
|
91
|
+
return tableName;
|
92
|
+
}
|
93
|
+
function escapeColumn(column) {
|
94
|
+
return `[${column}]`;
|
95
|
+
}
|
96
|
+
//# sourceMappingURL=sqlite-crud-generator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sqlite-crud-generator.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sqlite-crud-generator.ts"],"names":[],"mappings":";;;;;;AACA,0EAAgD;AAEhD,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,OAAuB;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,SAAS,CAAC,QAAQ,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEvD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAvBD,0DAuBC;AAED,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,QAAwB;IAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,CAAC,SAAS,CAAC,eAAe,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACrB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,EAAE,CAAC;IAErB,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAxBD,0DAwBC;AAED,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,QAAwB;IAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,CAAC,SAAS,CAAC,UAAU,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACvB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,SAAS,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7I,MAAM,CAAC,gBAAgB,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,CAAA;IACF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAtBD,0DAsBC;AAED,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,QAAwB;IAC/E,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,CAAC,SAAS,CAAC,eAAe,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAdD,0DAcC;AAED,sEAAsE;AACtE,SAAS,eAAe,CAAC,SAAiB;IACtC,MAAM,YAAY,GAAG,mBAAmB,CAAC;IACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,SAAS,GAAG,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAChC,OAAO,IAAI,MAAM,GAAG,CAAC;AACzB,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAyL,MAAM,sCAAsC,CAAC;AAClR,OAAO,EAAE,SAAS,EAAE,eAAe,EAA6B,MAAM,+BAA+B,CAAC;AAGtG,OAAO,EAAsE,eAAe,EAAgB,MAAM,kCAAkC,CAAC;AAErJ,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,GAAG,eAAe,CA2BrH;
|
1
|
+
{"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAyL,MAAM,sCAAsC,CAAC;AAClR,OAAO,EAAE,SAAS,EAAE,eAAe,EAA6B,MAAM,+BAA+B,CAAC;AAGtG,OAAO,EAAsE,eAAe,EAAgB,MAAM,kCAAkC,CAAC;AAErJ,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,GAAG,eAAe,CA2BrH;AA6hBD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,WAsB5F"}
|
@@ -218,10 +218,29 @@ function traverse_expr(expr, traverseContext) {
|
|
218
218
|
table: functionType.table || ''
|
219
219
|
};
|
220
220
|
}
|
221
|
+
if (function_name == 'coalesce') {
|
222
|
+
const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), '?');
|
223
|
+
const paramTypes = expr.expr_list().map(paramExpr => {
|
224
|
+
const paramType = traverse_expr(paramExpr, traverseContext);
|
225
|
+
traverseContext.constraints.push({
|
226
|
+
expression: expr.getText(),
|
227
|
+
type1: functionType,
|
228
|
+
type2: paramType.type
|
229
|
+
});
|
230
|
+
return paramType;
|
231
|
+
});
|
232
|
+
return {
|
233
|
+
name: functionType.name,
|
234
|
+
type: functionType,
|
235
|
+
notNull: paramTypes.some(param => param.notNull),
|
236
|
+
table: functionType.table || ''
|
237
|
+
};
|
238
|
+
}
|
221
239
|
if (function_name == 'strftime') {
|
222
240
|
const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), 'TEXT');
|
223
241
|
const paramExpr = expr.expr(1);
|
224
242
|
const paramType = traverse_expr(paramExpr, traverseContext);
|
243
|
+
paramType.notNull = true;
|
225
244
|
traverseContext.constraints.push({
|
226
245
|
expression: paramExpr.getText(),
|
227
246
|
type1: (0, collect_constraints_1.freshVar)(paramExpr.getText(), 'DATE'),
|
@@ -238,6 +257,7 @@ function traverse_expr(expr, traverseContext) {
|
|
238
257
|
const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), 'TEXT');
|
239
258
|
const paramExpr = expr.expr(0);
|
240
259
|
const paramType = traverse_expr(paramExpr, traverseContext);
|
260
|
+
paramType.notNull = true;
|
241
261
|
traverseContext.constraints.push({
|
242
262
|
expression: paramExpr.getText(),
|
243
263
|
type1: (0, collect_constraints_1.freshVar)(paramExpr.getText(), 'DATE'),
|
@@ -254,7 +274,9 @@ function traverse_expr(expr, traverseContext) {
|
|
254
274
|
const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), '?');
|
255
275
|
const paramTypes = expr.expr_list().map(paramExpr => {
|
256
276
|
const paramType = traverse_expr(paramExpr, traverseContext);
|
257
|
-
paramType.
|
277
|
+
if (paramType.name == '?') {
|
278
|
+
paramType.notNull = false;
|
279
|
+
}
|
258
280
|
traverseContext.constraints.push({
|
259
281
|
expression: expr.getText(),
|
260
282
|
type1: functionType,
|
@@ -311,10 +333,10 @@ function traverse_expr(expr, traverseContext) {
|
|
311
333
|
const type = {
|
312
334
|
name: param.name,
|
313
335
|
type: param,
|
314
|
-
notNull:
|
336
|
+
notNull: false,
|
315
337
|
table: param.table || ''
|
316
338
|
};
|
317
|
-
traverseContext.parameters.push(type
|
339
|
+
traverseContext.parameters.push(type);
|
318
340
|
return type;
|
319
341
|
}
|
320
342
|
if (expr.STAR() || expr.DIV() || expr.MOD()) {
|
@@ -342,6 +364,12 @@ function traverse_expr(expr, traverseContext) {
|
|
342
364
|
const exprRight = expr.expr(1);
|
343
365
|
const typeLeft = traverse_expr(exprLeft, traverseContext);
|
344
366
|
const typeRight = traverse_expr(exprRight, traverseContext);
|
367
|
+
if (typeLeft.name == '?') {
|
368
|
+
typeLeft.notNull = true;
|
369
|
+
}
|
370
|
+
if (typeRight.name == '?') {
|
371
|
+
typeRight.notNull = true;
|
372
|
+
}
|
345
373
|
traverseContext.constraints.push({
|
346
374
|
expression: expr.getText(),
|
347
375
|
type1: typeLeft.type,
|
@@ -371,6 +399,12 @@ function traverse_expr(expr, traverseContext) {
|
|
371
399
|
const exprRight = expr.expr(1);
|
372
400
|
const typeLeft = traverse_expr(exprLeft, traverseContext);
|
373
401
|
const typeRight = traverse_expr(exprRight, traverseContext);
|
402
|
+
if (typeLeft.name == '?') {
|
403
|
+
typeLeft.notNull = true;
|
404
|
+
}
|
405
|
+
if (typeRight.name == '?') {
|
406
|
+
typeRight.notNull = true;
|
407
|
+
}
|
374
408
|
traverseContext.constraints.push({
|
375
409
|
expression: expr.getText(),
|
376
410
|
type1: typeLeft.type,
|
@@ -388,6 +422,12 @@ function traverse_expr(expr, traverseContext) {
|
|
388
422
|
const exprType = traverse_expr(expr.expr(0), traverseContext);
|
389
423
|
const between1 = traverse_expr(expr.expr(1), traverseContext);
|
390
424
|
const between2 = traverse_expr(expr.expr(2), traverseContext);
|
425
|
+
if (between1.name == '?') {
|
426
|
+
between1.notNull = true;
|
427
|
+
}
|
428
|
+
if (between2.name == '?') {
|
429
|
+
between2.notNull = true;
|
430
|
+
}
|
391
431
|
traverseContext.constraints.push({
|
392
432
|
expression: expr.getText(),
|
393
433
|
type1: exprType.type,
|
@@ -467,15 +507,10 @@ function traverse_expr(expr, traverseContext) {
|
|
467
507
|
const whenTypes = [];
|
468
508
|
expr.expr_list().forEach((expr_, index) => {
|
469
509
|
const type = traverse_expr(expr_, traverseContext);
|
470
|
-
if (
|
471
|
-
|
472
|
-
whenTypes.push(type.type);
|
473
|
-
}
|
474
|
-
else {
|
475
|
-
resultTypes.push(type.type);
|
476
|
-
}
|
510
|
+
if (index % 2 == 0 && (!expr.ELSE_() || index < expr.expr_list().length - 1)) {
|
511
|
+
whenTypes.push(type.type);
|
477
512
|
}
|
478
|
-
|
513
|
+
else {
|
479
514
|
resultTypes.push(type.type);
|
480
515
|
}
|
481
516
|
});
|
@@ -488,6 +523,13 @@ function traverse_expr(expr, traverseContext) {
|
|
488
523
|
});
|
489
524
|
}
|
490
525
|
});
|
526
|
+
whenTypes.forEach((whenType) => {
|
527
|
+
traverseContext.constraints.push({
|
528
|
+
expression: expr.getText(),
|
529
|
+
type1: (0, collect_constraints_1.freshVar)('INTEGER', 'INTEGER'),
|
530
|
+
type2: whenType
|
531
|
+
});
|
532
|
+
});
|
491
533
|
const type = resultTypes[0];
|
492
534
|
return {
|
493
535
|
name: type.name,
|
@@ -593,12 +635,7 @@ function traverse_insert_stmt(insert_stmt, traverseContext) {
|
|
593
635
|
type1: col.type,
|
594
636
|
type2: exprType.type
|
595
637
|
});
|
596
|
-
insertColumns.push({
|
597
|
-
name: param.name,
|
598
|
-
type: param,
|
599
|
-
notNull: exprType.notNull && col.notNull,
|
600
|
-
table: ""
|
601
|
-
});
|
638
|
+
insertColumns.push(Object.assign(Object.assign({}, param), { notNull: exprType.name == '?' ? col.notNull : param.notNull }));
|
602
639
|
});
|
603
640
|
});
|
604
641
|
});
|
@@ -623,28 +660,20 @@ function traverse_update_stmt(update_stmt, traverseContext) {
|
|
623
660
|
expr_list.forEach((expr, index) => {
|
624
661
|
paramsBefore = traverseContext.parameters.length;
|
625
662
|
const exprType = traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns }));
|
626
|
-
if (
|
663
|
+
if (!update_stmt.WHERE_() || expr.start.start < update_stmt.WHERE_().symbol.start) {
|
627
664
|
const col = columns[index];
|
628
665
|
traverseContext.constraints.push({
|
629
666
|
expression: expr.getText(),
|
630
667
|
type1: col.type,
|
631
668
|
type2: exprType.type
|
632
669
|
});
|
633
|
-
|
634
|
-
|
635
|
-
type: exprType.type,
|
636
|
-
notNull: exprType.notNull && col.notNull,
|
637
|
-
table: ""
|
670
|
+
traverseContext.parameters.slice(paramsBefore).forEach((param, index) => {
|
671
|
+
updateColumns.push(Object.assign(Object.assign({}, param), { notNull: param.notNull && col.notNull }));
|
638
672
|
});
|
639
673
|
}
|
640
674
|
else {
|
641
675
|
traverseContext.parameters.slice(paramsBefore).forEach((param, index) => {
|
642
|
-
whereParams.push(
|
643
|
-
name: param.name,
|
644
|
-
type: param,
|
645
|
-
notNull: true,
|
646
|
-
table: ''
|
647
|
-
});
|
676
|
+
whereParams.push(param);
|
648
677
|
});
|
649
678
|
}
|
650
679
|
});
|
@@ -660,18 +689,9 @@ function traverse_delete_stmt(delete_stmt, traverseContext) {
|
|
660
689
|
const fromColumns = (0, select_columns_1.filterColumns)(traverseContext.dbSchema, [], '', (0, select_columns_1.splitName)(table_name));
|
661
690
|
const expr = delete_stmt.expr();
|
662
691
|
traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns }));
|
663
|
-
const params = traverseContext.parameters.map(param => {
|
664
|
-
const paramResult = {
|
665
|
-
name: param.name,
|
666
|
-
type: param,
|
667
|
-
notNull: true,
|
668
|
-
table: param.table || ''
|
669
|
-
};
|
670
|
-
return paramResult;
|
671
|
-
});
|
672
692
|
const queryResult = {
|
673
693
|
queryType: 'Delete',
|
674
|
-
params:
|
694
|
+
params: traverseContext.parameters
|
675
695
|
};
|
676
696
|
return queryResult;
|
677
697
|
}
|