typesql-cli 0.4.8 → 0.4.9
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.d.ts +2 -2
- package/cli.js +228 -224
- package/cli.js.map +1 -1
- package/code-generator.d.ts +19 -19
- package/code-generator.d.ts.map +1 -1
- package/code-generator.js +269 -265
- package/code-generator.js.map +1 -1
- package/describe-query.d.ts +9 -9
- package/describe-query.js +168 -168
- package/describe-query.js.map +1 -1
- package/mysql-mapping.d.ts +18 -18
- package/mysql-mapping.d.ts.map +1 -1
- package/mysql-mapping.js +146 -146
- package/mysql-mapping.js.map +1 -1
- package/mysql-query-analyzer/collect-constraints.d.ts +50 -50
- package/mysql-query-analyzer/collect-constraints.d.ts.map +1 -1
- package/mysql-query-analyzer/collect-constraints.js +1196 -1195
- package/mysql-query-analyzer/collect-constraints.js.map +1 -1
- package/mysql-query-analyzer/infer-column-nullability.d.ts +5 -5
- package/mysql-query-analyzer/infer-column-nullability.js +307 -307
- package/mysql-query-analyzer/infer-column-nullability.js.map +1 -1
- package/mysql-query-analyzer/infer-param-nullability.d.ts +6 -6
- package/mysql-query-analyzer/infer-param-nullability.js +78 -78
- package/mysql-query-analyzer/infer-param-nullability.js.map +1 -1
- package/mysql-query-analyzer/parse.d.ts +14 -14
- package/mysql-query-analyzer/parse.d.ts.map +1 -1
- package/mysql-query-analyzer/parse.js +219 -215
- package/mysql-query-analyzer/parse.js.map +1 -1
- package/mysql-query-analyzer/select-columns.d.ts +12 -12
- package/mysql-query-analyzer/select-columns.js +373 -373
- package/mysql-query-analyzer/select-columns.js.map +1 -1
- package/mysql-query-analyzer/types.d.ts +72 -72
- package/mysql-query-analyzer/types.d.ts.map +1 -1
- package/mysql-query-analyzer/types.js +2 -2
- package/mysql-query-analyzer/unify.d.ts +4 -4
- package/mysql-query-analyzer/unify.js +157 -157
- package/mysql-query-analyzer/util.d.ts +6 -6
- package/mysql-query-analyzer/util.d.ts.map +1 -1
- package/mysql-query-analyzer/util.js +30 -30
- package/mysql-query-analyzer/verify-multiple-result.d.ts +3 -3
- package/mysql-query-analyzer/verify-multiple-result.js +47 -47
- package/mysql-query-analyzer/verify-multiple-result.js.map +1 -1
- package/package.json +4 -5
- package/queryExectutor.d.ts +15 -13
- package/queryExectutor.d.ts.map +1 -1
- package/queryExectutor.js +107 -104
- package/queryExectutor.js.map +1 -1
- package/sql-generator.d.ts +5 -5
- package/sql-generator.js +88 -88
- package/types.d.ts +89 -89
- package/types.d.ts.map +1 -1
- package/types.js +2 -2
- package/utility-types.d.ts +4 -4
- package/utility-types.d.ts.map +1 -1
- package/utility-types.js +2 -2
- package/sqls/index.d.ts +0 -2
- package/sqls/index.d.ts.map +0 -1
- package/sqls/index.js +0 -14
- package/sqls/index.js.map +0 -1
- package/sqls/select-projects.d.ts +0 -6
- package/sqls/select-projects.d.ts.map +0 -1
- package/sqls/select-projects.js +0 -23
- package/sqls/select-projects.js.map +0 -1
@@ -1,48 +1,48 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.verifyMultipleResult = void 0;
|
4
|
-
const ts_mysql_parser_1 = require("ts-mysql-parser");
|
5
|
-
const select_columns_1 = require("./select-columns");
|
6
|
-
function verifyMultipleResult(exprContext, fromColumns) {
|
7
|
-
if (exprContext instanceof ts_mysql_parser_1.ExprIsContext) {
|
8
|
-
const boolPri = exprContext.boolPri();
|
9
|
-
if (boolPri instanceof ts_mysql_parser_1.PrimaryExprCompareContext) {
|
10
|
-
if (boolPri.compOp().EQUAL_OPERATOR()) {
|
11
|
-
let compareLeft = boolPri.boolPri();
|
12
|
-
let compareRight = boolPri.predicate();
|
13
|
-
if (isUniqueKeyComparation(compareLeft, fromColumns) || isUniqueKeyComparation(compareRight, fromColumns)) {
|
14
|
-
return false; //multipleRow = false
|
15
|
-
}
|
16
|
-
}
|
17
|
-
return true; //multipleRow = true
|
18
|
-
}
|
19
|
-
return true; //multipleRow
|
20
|
-
}
|
21
|
-
if (exprContext instanceof ts_mysql_parser_1.ExprNotContext) {
|
22
|
-
return true;
|
23
|
-
}
|
24
|
-
if (exprContext instanceof ts_mysql_parser_1.ExprAndContext) {
|
25
|
-
const oneIsSingleResult = exprContext.expr().some(expr => verifyMultipleResult(expr, fromColumns) == false);
|
26
|
-
return oneIsSingleResult == false;
|
27
|
-
}
|
28
|
-
// if (exprContext instanceof ExprXorContext) {
|
29
|
-
// const expressions = exprContext.expr();
|
30
|
-
// }
|
31
|
-
if (exprContext instanceof ts_mysql_parser_1.ExprOrContext) {
|
32
|
-
return true; //multipleRow = true
|
33
|
-
}
|
34
|
-
throw Error('Unknow type:' + exprContext.constructor.name);
|
35
|
-
}
|
36
|
-
exports.verifyMultipleResult = verifyMultipleResult;
|
37
|
-
function isUniqueKeyComparation(compare, fromColumns) {
|
38
|
-
const tokens = select_columns_1.getSimpleExpressions(compare);
|
39
|
-
if (tokens.length == 1 && tokens[0] instanceof ts_mysql_parser_1.SimpleExprColumnRefContext) {
|
40
|
-
const fieldName = select_columns_1.splitName(tokens[0].text);
|
41
|
-
const col = select_columns_1.findColumn(fieldName, fromColumns);
|
42
|
-
if (col.columnKey == 'PRI' || col.columnKey == 'UNI') {
|
43
|
-
return true; //isUniqueKeyComparation = true
|
44
|
-
}
|
45
|
-
}
|
46
|
-
return false; //isUniqueKeyComparation = false
|
47
|
-
}
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.verifyMultipleResult = void 0;
|
4
|
+
const ts_mysql_parser_1 = require("ts-mysql-parser");
|
5
|
+
const select_columns_1 = require("./select-columns");
|
6
|
+
function verifyMultipleResult(exprContext, fromColumns) {
|
7
|
+
if (exprContext instanceof ts_mysql_parser_1.ExprIsContext) {
|
8
|
+
const boolPri = exprContext.boolPri();
|
9
|
+
if (boolPri instanceof ts_mysql_parser_1.PrimaryExprCompareContext) {
|
10
|
+
if (boolPri.compOp().EQUAL_OPERATOR()) {
|
11
|
+
let compareLeft = boolPri.boolPri();
|
12
|
+
let compareRight = boolPri.predicate();
|
13
|
+
if (isUniqueKeyComparation(compareLeft, fromColumns) || isUniqueKeyComparation(compareRight, fromColumns)) {
|
14
|
+
return false; //multipleRow = false
|
15
|
+
}
|
16
|
+
}
|
17
|
+
return true; //multipleRow = true
|
18
|
+
}
|
19
|
+
return true; //multipleRow
|
20
|
+
}
|
21
|
+
if (exprContext instanceof ts_mysql_parser_1.ExprNotContext) {
|
22
|
+
return true;
|
23
|
+
}
|
24
|
+
if (exprContext instanceof ts_mysql_parser_1.ExprAndContext) {
|
25
|
+
const oneIsSingleResult = exprContext.expr().some(expr => verifyMultipleResult(expr, fromColumns) == false);
|
26
|
+
return oneIsSingleResult == false;
|
27
|
+
}
|
28
|
+
// if (exprContext instanceof ExprXorContext) {
|
29
|
+
// const expressions = exprContext.expr();
|
30
|
+
// }
|
31
|
+
if (exprContext instanceof ts_mysql_parser_1.ExprOrContext) {
|
32
|
+
return true; //multipleRow = true
|
33
|
+
}
|
34
|
+
throw Error('Unknow type:' + exprContext.constructor.name);
|
35
|
+
}
|
36
|
+
exports.verifyMultipleResult = verifyMultipleResult;
|
37
|
+
function isUniqueKeyComparation(compare, fromColumns) {
|
38
|
+
const tokens = (0, select_columns_1.getSimpleExpressions)(compare);
|
39
|
+
if (tokens.length == 1 && tokens[0] instanceof ts_mysql_parser_1.SimpleExprColumnRefContext) {
|
40
|
+
const fieldName = (0, select_columns_1.splitName)(tokens[0].text);
|
41
|
+
const col = (0, select_columns_1.findColumn)(fieldName, fromColumns);
|
42
|
+
if (col.columnKey == 'PRI' || col.columnKey == 'UNI') {
|
43
|
+
return true; //isUniqueKeyComparation = true
|
44
|
+
}
|
45
|
+
}
|
46
|
+
return false; //isUniqueKeyComparation = false
|
47
|
+
}
|
48
48
|
//# sourceMappingURL=verify-multiple-result.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"verify-multiple-result.js","sourceRoot":"","sources":["../../../src/mysql-query-analyzer/verify-multiple-result.ts"],"names":[],"mappings":";;;AAAA,qDAGyB;AACzB,qDAA+E;AAG/E,SAAgB,oBAAoB,CAAC,WAAwB,EAAE,WAAwB;IACnF,IAAI,WAAW,YAAY,+BAAa,EAAE;QAEtC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;QAEtC,IAAI,OAAO,YAAY,2CAAyB,EAAE;YAC9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAE;gBACnC,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAI,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE;oBACvG,OAAO,KAAK,CAAC,CAAC,qBAAqB;iBACtC;aACJ;YACD,OAAO,IAAI,CAAC,CAAC,oBAAoB;SAEpC;QACD,OAAO,IAAI,CAAC,CAAC,aAAa;KAE7B;IACD,IAAI,WAAW,YAAY,gCAAc,EAAE;QACvC,OAAO,IAAI,CAAC;KACf;IACD,IAAI,WAAW,YAAY,gCAAc,EAAE;QACvC,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,CAAA;QAC3G,OAAO,iBAAiB,IAAI,KAAK,CAAC;KACrC;IACD,+CAA+C;IAC/C,8CAA8C;IAC9C,IAAI;IACJ,IAAI,WAAW,YAAY,+BAAa,EAAE;QACtC,OAAO,IAAI,CAAC,CAAC,oBAAoB;KACpC;IAED,MAAM,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAlCD,oDAkCC;AAED,SAAS,sBAAsB,CAAC,OAA0C,EAAE,WAAwB;IAChG,MAAM,MAAM,GAAG,qCAAoB,
|
1
|
+
{"version":3,"file":"verify-multiple-result.js","sourceRoot":"","sources":["../../../src/mysql-query-analyzer/verify-multiple-result.ts"],"names":[],"mappings":";;;AAAA,qDAGyB;AACzB,qDAA+E;AAG/E,SAAgB,oBAAoB,CAAC,WAAwB,EAAE,WAAwB;IACnF,IAAI,WAAW,YAAY,+BAAa,EAAE;QAEtC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;QAEtC,IAAI,OAAO,YAAY,2CAAyB,EAAE;YAC9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAE;gBACnC,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAI,sBAAsB,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,sBAAsB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE;oBACvG,OAAO,KAAK,CAAC,CAAC,qBAAqB;iBACtC;aACJ;YACD,OAAO,IAAI,CAAC,CAAC,oBAAoB;SAEpC;QACD,OAAO,IAAI,CAAC,CAAC,aAAa;KAE7B;IACD,IAAI,WAAW,YAAY,gCAAc,EAAE;QACvC,OAAO,IAAI,CAAC;KACf;IACD,IAAI,WAAW,YAAY,gCAAc,EAAE;QACvC,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,CAAA;QAC3G,OAAO,iBAAiB,IAAI,KAAK,CAAC;KACrC;IACD,+CAA+C;IAC/C,8CAA8C;IAC9C,IAAI;IACJ,IAAI,WAAW,YAAY,+BAAa,EAAE;QACtC,OAAO,IAAI,CAAC,CAAC,oBAAoB;KACpC;IAED,MAAM,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAlCD,oDAkCC;AAED,SAAS,sBAAsB,CAAC,OAA0C,EAAE,WAAwB;IAChG,MAAM,MAAM,GAAG,IAAA,qCAAoB,EAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,4CAA0B,EAAE;QACvE,MAAM,SAAS,GAAG,IAAA,0BAAS,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAA,2BAAU,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC/C,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,EAAE;YAClD,OAAO,IAAI,CAAC,CAAC,+BAA+B;SAC/C;KACJ;IACD,OAAO,KAAK,CAAC,CAAC,gCAAgC;AAClD,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "typesql-cli",
|
3
|
-
"version": "0.4.
|
3
|
+
"version": "0.4.9",
|
4
4
|
"description": "",
|
5
5
|
"main": "index.js",
|
6
6
|
"bin": {
|
@@ -21,14 +21,13 @@
|
|
21
21
|
"devDependencies": {
|
22
22
|
"@types/camelcase": "^5.2.0",
|
23
23
|
"@types/mocha": "^7.0.2",
|
24
|
-
"@types/
|
25
|
-
"@types/node": "^14.6.2",
|
24
|
+
"@types/node": "^20.4.0",
|
26
25
|
"@types/yargs": "^15.0.5",
|
27
26
|
"antlr4ts-cli": "^0.5.0-alpha.3",
|
28
27
|
"mocha": "^8.1.3",
|
29
28
|
"shx": "^0.3.3",
|
30
29
|
"ts-node": "^8.10.2",
|
31
|
-
"typescript": "^
|
30
|
+
"typescript": "^5.1.6"
|
32
31
|
},
|
33
32
|
"dependencies": {
|
34
33
|
"antlr4ts": "^0.5.0-alpha.3",
|
@@ -37,7 +36,7 @@
|
|
37
36
|
"code-block-writer": "^10.1.0",
|
38
37
|
"fp-ts": "^2.8.2",
|
39
38
|
"moment": "^2.27.0",
|
40
|
-
"mysql2": "^
|
39
|
+
"mysql2": "^3.4.5",
|
41
40
|
"ts-mysql-parser": "^0.2.0",
|
42
41
|
"yargs": "^15.4.1"
|
43
42
|
}
|
package/queryExectutor.d.ts
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
import { Either } from "fp-ts/lib/Either";
|
2
|
-
import { TypeSqlError } from "./types";
|
3
|
-
import { ColumnSchema, ColumnSchema2 } from "./mysql-query-analyzer/types";
|
4
|
-
export declare class DbClient {
|
5
|
-
private connection;
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
import { Either } from "fp-ts/lib/Either";
|
2
|
+
import { TypeSqlError } from "./types";
|
3
|
+
import { ColumnSchema, ColumnSchema2 } from "./mysql-query-analyzer/types";
|
4
|
+
export declare class DbClient {
|
5
|
+
private connection;
|
6
|
+
mySqlVersion: string;
|
7
|
+
connect(connectionUri: string): Promise<Either<TypeSqlError, true>>;
|
8
|
+
closeConnection(): Promise<void>;
|
9
|
+
loadDbSchema(): Promise<Either<TypeSqlError, ColumnSchema[]>>;
|
10
|
+
loadTableSchema(tableName: string): Promise<Either<TypeSqlError, ColumnSchema2[]>>;
|
11
|
+
createParams(sql: string, paramValue: '1' | '?'): string[];
|
12
|
+
explainSql(sql: string): Promise<Either<TypeSqlError, boolean>>;
|
13
|
+
createInvalidSqlError(err: any): Either<TypeSqlError, never>;
|
14
|
+
isVersion8(): boolean;
|
15
|
+
}
|
14
16
|
//# sourceMappingURL=queryExectutor.d.ts.map
|
package/queryExectutor.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queryExectutor.d.ts","sourceRoot":"","sources":["../../src/queryExectutor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAe,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAO3E,qBAAa,QAAQ;IAEjB,OAAO,CAAC,UAAU,CAAoB;
|
1
|
+
{"version":3,"file":"queryExectutor.d.ts","sourceRoot":"","sources":["../../src/queryExectutor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAe,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAO3E,qBAAa,QAAQ;IAEjB,OAAO,CAAC,UAAU,CAAoB;IACtC,YAAY,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAgBnE,eAAe;IAMf,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;IAoB7D,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;IA0BxF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,GAAG;IAQzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAYrE,qBAAqB,CAAC,GAAG,EAAE,GAAG;IAQ9B,UAAU;CAGb"}
|
package/queryExectutor.js
CHANGED
@@ -1,67 +1,67 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
-
});
|
10
|
-
};
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
return this.connection.execute(sql)
|
55
|
-
.then(res => {
|
56
|
-
const columns = res[0];
|
57
|
-
return Either_1.right(columns.map(col => (Object.assign(Object.assign({}, col), { notNull: !!+col.notNull })))); //convert 1 to true, 0 to false
|
58
|
-
});
|
59
|
-
}
|
60
|
-
return Either_1.left(connectionNotOpenError);
|
61
|
-
});
|
62
|
-
}
|
63
|
-
loadTableSchema(tableName) {
|
64
|
-
return __awaiter(this, void 0, void 0, function* () {
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.DbClient = void 0;
|
13
|
+
const promise_1 = require("mysql2/promise");
|
14
|
+
const Either_1 = require("fp-ts/lib/Either");
|
15
|
+
const connectionNotOpenError = {
|
16
|
+
name: 'Connection error',
|
17
|
+
description: 'The database connection is not open.'
|
18
|
+
};
|
19
|
+
class DbClient {
|
20
|
+
connect(connectionUri) {
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
22
|
+
try {
|
23
|
+
this.connection = yield (0, promise_1.createConnection)(connectionUri);
|
24
|
+
const [rows] = yield this.connection.execute("select @@version as version");
|
25
|
+
this.mySqlVersion = rows[0].version;
|
26
|
+
return (0, Either_1.right)(true);
|
27
|
+
}
|
28
|
+
catch (e) {
|
29
|
+
const connError = {
|
30
|
+
name: 'Connection error',
|
31
|
+
description: e.message
|
32
|
+
};
|
33
|
+
return (0, Either_1.left)(connError);
|
34
|
+
}
|
35
|
+
});
|
36
|
+
}
|
37
|
+
closeConnection() {
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
39
|
+
if (this.connection != null) {
|
40
|
+
this.connection.end();
|
41
|
+
}
|
42
|
+
});
|
43
|
+
}
|
44
|
+
loadDbSchema() {
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
46
|
+
if (this.connection != null) {
|
47
|
+
const sql = `
|
48
|
+
SELECT TABLE_SCHEMA as "schema", TABLE_NAME as "table", COLUMN_NAME as "column", DATA_TYPE as "column_type", if(IS_NULLABLE='NO', true, false) as "notNull",
|
49
|
+
COLUMN_KEY as "columnKey"
|
50
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
51
|
+
WHERE TABLE_SCHEMA = "${this.connection.config.database}"
|
52
|
+
ORDER BY TABLE_NAME, ORDINAL_POSITION
|
53
|
+
`;
|
54
|
+
return this.connection.execute(sql)
|
55
|
+
.then(res => {
|
56
|
+
const columns = res[0];
|
57
|
+
return (0, Either_1.right)(columns.map(col => (Object.assign(Object.assign({}, col), { notNull: !!+col.notNull })))); //convert 1 to true, 0 to false
|
58
|
+
});
|
59
|
+
}
|
60
|
+
return (0, Either_1.left)(connectionNotOpenError);
|
61
|
+
});
|
62
|
+
}
|
63
|
+
loadTableSchema(tableName) {
|
64
|
+
return __awaiter(this, void 0, void 0, function* () {
|
65
65
|
const sql = `
|
66
66
|
SELECT
|
67
67
|
TABLE_SCHEMA as "schema",
|
@@ -74,44 +74,47 @@ class DbClient {
|
|
74
74
|
FROM INFORMATION_SCHEMA.COLUMNS
|
75
75
|
WHERE TABLE_NAME = ?
|
76
76
|
ORDER BY TABLE_NAME, ORDINAL_POSITION
|
77
|
-
`;
|
78
|
-
if (this.connection) {
|
79
|
-
return this.connection.execute(sql, [tableName])
|
80
|
-
.then(res => {
|
81
|
-
const columns = res[0];
|
82
|
-
return Either_1.right(columns);
|
83
|
-
});
|
84
|
-
}
|
85
|
-
return Either_1.left(connectionNotOpenError);
|
86
|
-
});
|
87
|
-
}
|
88
|
-
createParams(sql, paramValue) {
|
89
|
-
let params = [];
|
90
|
-
for (var i = 0; i < sql.length; i++) {
|
91
|
-
if (sql[i] === "?")
|
92
|
-
params.push(paramValue);
|
93
|
-
}
|
94
|
-
return params;
|
95
|
-
}
|
96
|
-
explainSql(sql) {
|
97
|
-
return __awaiter(this, void 0, void 0, function* () {
|
98
|
-
if (this.connection) {
|
99
|
-
//@ts-ignore
|
100
|
-
return this.connection.prepare(sql)
|
101
|
-
.then(() => {
|
102
|
-
return Either_1.right(true);
|
103
|
-
}).catch((err) => this.createInvalidSqlError(err));
|
104
|
-
}
|
105
|
-
return Either_1.left(connectionNotOpenError);
|
106
|
-
});
|
107
|
-
}
|
108
|
-
createInvalidSqlError(err) {
|
109
|
-
const error = {
|
110
|
-
name: 'Invalid sql',
|
111
|
-
description: err.message
|
112
|
-
};
|
113
|
-
return Either_1.left(error);
|
114
|
-
}
|
115
|
-
|
116
|
-
|
77
|
+
`;
|
78
|
+
if (this.connection) {
|
79
|
+
return this.connection.execute(sql, [tableName])
|
80
|
+
.then(res => {
|
81
|
+
const columns = res[0];
|
82
|
+
return (0, Either_1.right)(columns);
|
83
|
+
});
|
84
|
+
}
|
85
|
+
return (0, Either_1.left)(connectionNotOpenError);
|
86
|
+
});
|
87
|
+
}
|
88
|
+
createParams(sql, paramValue) {
|
89
|
+
let params = [];
|
90
|
+
for (var i = 0; i < sql.length; i++) {
|
91
|
+
if (sql[i] === "?")
|
92
|
+
params.push(paramValue);
|
93
|
+
}
|
94
|
+
return params;
|
95
|
+
}
|
96
|
+
explainSql(sql) {
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
98
|
+
if (this.connection) {
|
99
|
+
//@ts-ignore
|
100
|
+
return this.connection.prepare(sql)
|
101
|
+
.then(() => {
|
102
|
+
return (0, Either_1.right)(true);
|
103
|
+
}).catch((err) => this.createInvalidSqlError(err));
|
104
|
+
}
|
105
|
+
return (0, Either_1.left)(connectionNotOpenError);
|
106
|
+
});
|
107
|
+
}
|
108
|
+
createInvalidSqlError(err) {
|
109
|
+
const error = {
|
110
|
+
name: 'Invalid sql',
|
111
|
+
description: err.message
|
112
|
+
};
|
113
|
+
return (0, Either_1.left)(error);
|
114
|
+
}
|
115
|
+
isVersion8() {
|
116
|
+
return this.mySqlVersion.startsWith("8.");
|
117
|
+
}
|
118
|
+
}
|
119
|
+
exports.DbClient = DbClient;
|
117
120
|
//# sourceMappingURL=queryExectutor.js.map
|
package/queryExectutor.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"queryExectutor.js","sourceRoot":"","sources":["../../src/queryExectutor.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"queryExectutor.js","sourceRoot":"","sources":["../../src/queryExectutor.ts"],"names":[],"mappings":"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"}
|
package/sql-generator.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import { ColumnSchema2 } from "./mysql-query-analyzer/types";
|
2
|
-
export declare function generateSelectStatment(tableName: string, columns: ColumnSchema2[]): string;
|
3
|
-
export declare function generateInsertStatment(tableName: string, dbSchema: ColumnSchema2[]): string;
|
4
|
-
export declare function generateUpdateStatment(tableName: string, dbSchema: ColumnSchema2[]): string;
|
5
|
-
export declare function generateDeleteStatment(tableName: string, dbSchema: ColumnSchema2[]): string;
|
1
|
+
import { ColumnSchema2 } from "./mysql-query-analyzer/types";
|
2
|
+
export declare function generateSelectStatment(tableName: string, columns: ColumnSchema2[]): string;
|
3
|
+
export declare function generateInsertStatment(tableName: string, dbSchema: ColumnSchema2[]): string;
|
4
|
+
export declare function generateUpdateStatment(tableName: string, dbSchema: ColumnSchema2[]): string;
|
5
|
+
export declare function generateDeleteStatment(tableName: string, dbSchema: ColumnSchema2[]): string;
|
6
6
|
//# sourceMappingURL=sql-generator.d.ts.map
|
package/sql-generator.js
CHANGED
@@ -1,89 +1,89 @@
|
|
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.generateDeleteStatment = exports.generateUpdateStatment = exports.generateInsertStatment = exports.generateSelectStatment = void 0;
|
7
|
-
const code_block_writer_1 = __importDefault(require("code-block-writer"));
|
8
|
-
function generateSelectStatment(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(col.column);
|
17
|
-
writer.conditionalWrite(columnIndex < columns.length - 1, ',');
|
18
|
-
writer.newLine();
|
19
|
-
});
|
20
|
-
writer.write(`FROM ${escapeTableName(tableName)}`);
|
21
|
-
return writer.toString();
|
22
|
-
}
|
23
|
-
exports.generateSelectStatment = generateSelectStatment;
|
24
|
-
function generateInsertStatment(tableName, dbSchema) {
|
25
|
-
const columns = dbSchema.filter(col => !col.autoincrement);
|
26
|
-
const writer = new code_block_writer_1.default();
|
27
|
-
writer.writeLine(`INSERT INTO ${escapeTableName(tableName)}`);
|
28
|
-
writer.writeLine("(");
|
29
|
-
columns.forEach((col, columnIndex) => {
|
30
|
-
writer.indent().write(col.column);
|
31
|
-
writer.conditionalWrite(columnIndex != columns.length - 1, ',');
|
32
|
-
writer.newLine();
|
33
|
-
});
|
34
|
-
writer.writeLine(')');
|
35
|
-
writer.writeLine("VALUES");
|
36
|
-
writer.writeLine("(");
|
37
|
-
columns.forEach((col, columnIndex) => {
|
38
|
-
writer.indent().write(':' + col.column);
|
39
|
-
writer.conditionalWrite(columnIndex < columns.length - 1, ',');
|
40
|
-
writer.newLine();
|
41
|
-
});
|
42
|
-
writer.write(")");
|
43
|
-
return writer.toString();
|
44
|
-
}
|
45
|
-
exports.generateInsertStatment = generateInsertStatment;
|
46
|
-
function generateUpdateStatment(tableName, dbSchema) {
|
47
|
-
const columns = dbSchema.filter(col => !col.autoincrement);
|
48
|
-
const keys = dbSchema.filter(col => col.columnKey = 'PRI');
|
49
|
-
if (keys.length == 0) {
|
50
|
-
keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
|
51
|
-
}
|
52
|
-
const writer = new code_block_writer_1.default();
|
53
|
-
writer.writeLine(`UPDATE ${escapeTableName(tableName)}`);
|
54
|
-
writer.writeLine("SET");
|
55
|
-
columns.forEach((col, columnIndex) => {
|
56
|
-
writer.indent().write(`${col.column} = :${col.column}`);
|
57
|
-
writer.conditionalWrite(columnIndex != columns.length - 1, ',');
|
58
|
-
writer.newLine();
|
59
|
-
});
|
60
|
-
writer.writeLine('WHERE');
|
61
|
-
if (keys.length > 0) {
|
62
|
-
writer.indent().write(`${keys[0].column} = :${keys[0].column}`);
|
63
|
-
}
|
64
|
-
return writer.toString();
|
65
|
-
}
|
66
|
-
exports.generateUpdateStatment = generateUpdateStatment;
|
67
|
-
function generateDeleteStatment(tableName, dbSchema) {
|
68
|
-
const keys = dbSchema.filter(col => col.columnKey = 'PRI');
|
69
|
-
if (keys.length == 0) {
|
70
|
-
keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
|
71
|
-
}
|
72
|
-
const writer = new code_block_writer_1.default();
|
73
|
-
writer.writeLine(`DELETE FROM ${escapeTableName(tableName)}`);
|
74
|
-
writer.write('WHERE ');
|
75
|
-
if (keys.length > 0) {
|
76
|
-
writer.write(`${keys[0].column} = :${keys[0].column}`);
|
77
|
-
}
|
78
|
-
return writer.toString();
|
79
|
-
}
|
80
|
-
exports.generateDeleteStatment = generateDeleteStatment;
|
81
|
-
//Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_]
|
82
|
-
function escapeTableName(tableName) {
|
83
|
-
const validPattern = /^[a-zA-Z0-9_$]+$/g;
|
84
|
-
if (!validPattern.test(tableName)) {
|
85
|
-
return `\`${tableName}\``;
|
86
|
-
}
|
87
|
-
return tableName;
|
88
|
-
}
|
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.generateDeleteStatment = exports.generateUpdateStatment = exports.generateInsertStatment = exports.generateSelectStatment = void 0;
|
7
|
+
const code_block_writer_1 = __importDefault(require("code-block-writer"));
|
8
|
+
function generateSelectStatment(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(col.column);
|
17
|
+
writer.conditionalWrite(columnIndex < columns.length - 1, ',');
|
18
|
+
writer.newLine();
|
19
|
+
});
|
20
|
+
writer.write(`FROM ${escapeTableName(tableName)}`);
|
21
|
+
return writer.toString();
|
22
|
+
}
|
23
|
+
exports.generateSelectStatment = generateSelectStatment;
|
24
|
+
function generateInsertStatment(tableName, dbSchema) {
|
25
|
+
const columns = dbSchema.filter(col => !col.autoincrement);
|
26
|
+
const writer = new code_block_writer_1.default();
|
27
|
+
writer.writeLine(`INSERT INTO ${escapeTableName(tableName)}`);
|
28
|
+
writer.writeLine("(");
|
29
|
+
columns.forEach((col, columnIndex) => {
|
30
|
+
writer.indent().write(col.column);
|
31
|
+
writer.conditionalWrite(columnIndex != columns.length - 1, ',');
|
32
|
+
writer.newLine();
|
33
|
+
});
|
34
|
+
writer.writeLine(')');
|
35
|
+
writer.writeLine("VALUES");
|
36
|
+
writer.writeLine("(");
|
37
|
+
columns.forEach((col, columnIndex) => {
|
38
|
+
writer.indent().write(':' + col.column);
|
39
|
+
writer.conditionalWrite(columnIndex < columns.length - 1, ',');
|
40
|
+
writer.newLine();
|
41
|
+
});
|
42
|
+
writer.write(")");
|
43
|
+
return writer.toString();
|
44
|
+
}
|
45
|
+
exports.generateInsertStatment = generateInsertStatment;
|
46
|
+
function generateUpdateStatment(tableName, dbSchema) {
|
47
|
+
const columns = dbSchema.filter(col => !col.autoincrement);
|
48
|
+
const keys = dbSchema.filter(col => col.columnKey = 'PRI');
|
49
|
+
if (keys.length == 0) {
|
50
|
+
keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
|
51
|
+
}
|
52
|
+
const writer = new code_block_writer_1.default();
|
53
|
+
writer.writeLine(`UPDATE ${escapeTableName(tableName)}`);
|
54
|
+
writer.writeLine("SET");
|
55
|
+
columns.forEach((col, columnIndex) => {
|
56
|
+
writer.indent().write(`${col.column} = :${col.column}`);
|
57
|
+
writer.conditionalWrite(columnIndex != columns.length - 1, ',');
|
58
|
+
writer.newLine();
|
59
|
+
});
|
60
|
+
writer.writeLine('WHERE');
|
61
|
+
if (keys.length > 0) {
|
62
|
+
writer.indent().write(`${keys[0].column} = :${keys[0].column}`);
|
63
|
+
}
|
64
|
+
return writer.toString();
|
65
|
+
}
|
66
|
+
exports.generateUpdateStatment = generateUpdateStatment;
|
67
|
+
function generateDeleteStatment(tableName, dbSchema) {
|
68
|
+
const keys = dbSchema.filter(col => col.columnKey = 'PRI');
|
69
|
+
if (keys.length == 0) {
|
70
|
+
keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
|
71
|
+
}
|
72
|
+
const writer = new code_block_writer_1.default();
|
73
|
+
writer.writeLine(`DELETE FROM ${escapeTableName(tableName)}`);
|
74
|
+
writer.write('WHERE ');
|
75
|
+
if (keys.length > 0) {
|
76
|
+
writer.write(`${keys[0].column} = :${keys[0].column}`);
|
77
|
+
}
|
78
|
+
return writer.toString();
|
79
|
+
}
|
80
|
+
exports.generateDeleteStatment = generateDeleteStatment;
|
81
|
+
//Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_]
|
82
|
+
function escapeTableName(tableName) {
|
83
|
+
const validPattern = /^[a-zA-Z0-9_$]+$/g;
|
84
|
+
if (!validPattern.test(tableName)) {
|
85
|
+
return `\`${tableName}\``;
|
86
|
+
}
|
87
|
+
return tableName;
|
88
|
+
}
|
89
89
|
//# sourceMappingURL=sql-generator.js.map
|