typesql-cli 0.8.0-alpha.6 → 0.8.0-alpha.8
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 +60 -40
- 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"}
|