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.
Files changed (63) hide show
  1. package/cli.d.ts +2 -2
  2. package/cli.js +228 -224
  3. package/cli.js.map +1 -1
  4. package/code-generator.d.ts +19 -19
  5. package/code-generator.d.ts.map +1 -1
  6. package/code-generator.js +269 -265
  7. package/code-generator.js.map +1 -1
  8. package/describe-query.d.ts +9 -9
  9. package/describe-query.js +168 -168
  10. package/describe-query.js.map +1 -1
  11. package/mysql-mapping.d.ts +18 -18
  12. package/mysql-mapping.d.ts.map +1 -1
  13. package/mysql-mapping.js +146 -146
  14. package/mysql-mapping.js.map +1 -1
  15. package/mysql-query-analyzer/collect-constraints.d.ts +50 -50
  16. package/mysql-query-analyzer/collect-constraints.d.ts.map +1 -1
  17. package/mysql-query-analyzer/collect-constraints.js +1196 -1195
  18. package/mysql-query-analyzer/collect-constraints.js.map +1 -1
  19. package/mysql-query-analyzer/infer-column-nullability.d.ts +5 -5
  20. package/mysql-query-analyzer/infer-column-nullability.js +307 -307
  21. package/mysql-query-analyzer/infer-column-nullability.js.map +1 -1
  22. package/mysql-query-analyzer/infer-param-nullability.d.ts +6 -6
  23. package/mysql-query-analyzer/infer-param-nullability.js +78 -78
  24. package/mysql-query-analyzer/infer-param-nullability.js.map +1 -1
  25. package/mysql-query-analyzer/parse.d.ts +14 -14
  26. package/mysql-query-analyzer/parse.d.ts.map +1 -1
  27. package/mysql-query-analyzer/parse.js +219 -215
  28. package/mysql-query-analyzer/parse.js.map +1 -1
  29. package/mysql-query-analyzer/select-columns.d.ts +12 -12
  30. package/mysql-query-analyzer/select-columns.js +373 -373
  31. package/mysql-query-analyzer/select-columns.js.map +1 -1
  32. package/mysql-query-analyzer/types.d.ts +72 -72
  33. package/mysql-query-analyzer/types.d.ts.map +1 -1
  34. package/mysql-query-analyzer/types.js +2 -2
  35. package/mysql-query-analyzer/unify.d.ts +4 -4
  36. package/mysql-query-analyzer/unify.js +157 -157
  37. package/mysql-query-analyzer/util.d.ts +6 -6
  38. package/mysql-query-analyzer/util.d.ts.map +1 -1
  39. package/mysql-query-analyzer/util.js +30 -30
  40. package/mysql-query-analyzer/verify-multiple-result.d.ts +3 -3
  41. package/mysql-query-analyzer/verify-multiple-result.js +47 -47
  42. package/mysql-query-analyzer/verify-multiple-result.js.map +1 -1
  43. package/package.json +4 -5
  44. package/queryExectutor.d.ts +15 -13
  45. package/queryExectutor.d.ts.map +1 -1
  46. package/queryExectutor.js +107 -104
  47. package/queryExectutor.js.map +1 -1
  48. package/sql-generator.d.ts +5 -5
  49. package/sql-generator.js +88 -88
  50. package/types.d.ts +89 -89
  51. package/types.d.ts.map +1 -1
  52. package/types.js +2 -2
  53. package/utility-types.d.ts +4 -4
  54. package/utility-types.d.ts.map +1 -1
  55. package/utility-types.js +2 -2
  56. package/sqls/index.d.ts +0 -2
  57. package/sqls/index.d.ts.map +0 -1
  58. package/sqls/index.js +0 -14
  59. package/sqls/index.js.map +0 -1
  60. package/sqls/select-projects.d.ts +0 -6
  61. package/sqls/select-projects.d.ts.map +0 -1
  62. package/sqls/select-projects.js +0 -23
  63. 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,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,4CAA0B,EAAE;QACvE,MAAM,SAAS,GAAG,0BAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,2BAAU,CAAC,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"}
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.8",
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/mysql2": "git+https://git@github.com/types/mysql2.git",
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": "^3.9.7"
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": "^2.1.0",
39
+ "mysql2": "^3.4.5",
41
40
  "ts-mysql-parser": "^0.2.0",
42
41
  "yargs": "^15.4.1"
43
42
  }
@@ -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
- connect(connectionUri: string): Promise<Either<TypeSqlError, true>>;
7
- closeConnection(): Promise<void>;
8
- loadDbSchema(): Promise<Either<TypeSqlError, ColumnSchema[]>>;
9
- loadTableSchema(tableName: string): Promise<Either<TypeSqlError, ColumnSchema2[]>>;
10
- createParams(sql: string, paramValue: '1' | '?'): string[];
11
- explainSql(sql: string): Promise<Either<TypeSqlError, boolean>>;
12
- createInvalidSqlError(err: any): Either<TypeSqlError, never>;
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
@@ -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;IAChC,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAcnE,eAAe;IAMf,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;IAkB7D,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;CAOjC"}
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.DbClient = void 0;
16
- const promise_1 = __importDefault(require("mysql2/promise"));
17
- const Either_1 = require("fp-ts/lib/Either");
18
- const connectionNotOpenError = {
19
- name: 'Connection error',
20
- description: 'The database connection is not open.'
21
- };
22
- class DbClient {
23
- connect(connectionUri) {
24
- return __awaiter(this, void 0, void 0, function* () {
25
- try {
26
- this.connection = yield promise_1.default.createConnection(connectionUri);
27
- return Either_1.right(true);
28
- }
29
- catch (e) {
30
- const connError = {
31
- name: 'Connection error',
32
- description: e.message
33
- };
34
- return Either_1.left(connError);
35
- }
36
- });
37
- }
38
- closeConnection() {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- if (this.connection != null) {
41
- this.connection.end();
42
- }
43
- });
44
- }
45
- loadDbSchema() {
46
- return __awaiter(this, void 0, void 0, function* () {
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
- ORDER BY TABLE_NAME, ORDINAL_POSITION
52
- `;
53
- if (this.connection != null) {
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
- exports.DbClient = DbClient;
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
@@ -1 +1 @@
1
- {"version":3,"file":"queryExectutor.js","sourceRoot":"","sources":["../../src/queryExectutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryExectutor.js","sourceRoot":"","sources":["../../src/queryExectutor.ts"],"names":[],"mappings":"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"}
@@ -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