typesql-cli 0.8.0-alpha.6 → 0.8.0-alpha.7
Sign up to get free protection for your applications and to get access to all the features.
- 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":"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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,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
|
}
|