typesql-cli 0.8.0-alpha.6 → 0.8.0-alpha.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/cli.js +36 -39
  2. package/cli.js.map +1 -1
  3. package/code-generator.d.ts +4 -4
  4. package/code-generator.d.ts.map +1 -1
  5. package/code-generator.js +17 -19
  6. package/code-generator.js.map +1 -1
  7. package/describe-query.d.ts +2 -3
  8. package/describe-query.d.ts.map +1 -1
  9. package/describe-query.js +3 -2
  10. package/describe-query.js.map +1 -1
  11. package/mysql-query-analyzer/collect-constraints.d.ts +2 -2
  12. package/mysql-query-analyzer/collect-constraints.d.ts.map +1 -1
  13. package/mysql-query-analyzer/collect-constraints.js +1 -1
  14. package/mysql-query-analyzer/collect-constraints.js.map +1 -1
  15. package/mysql-query-analyzer/traverse.d.ts.map +1 -1
  16. package/mysql-query-analyzer/traverse.js +15 -15
  17. package/mysql-query-analyzer/traverse.js.map +1 -1
  18. package/mysql-query-analyzer/types.d.ts +1 -1
  19. package/mysql-query-analyzer/types.d.ts.map +1 -1
  20. package/package.json +1 -1
  21. package/queryExectutor.d.ts +8 -15
  22. package/queryExectutor.d.ts.map +1 -1
  23. package/queryExectutor.js +119 -121
  24. package/queryExectutor.js.map +1 -1
  25. package/sql-generator.d.ts +5 -4
  26. package/sql-generator.d.ts.map +1 -1
  27. package/sql-generator.js +24 -21
  28. package/sql-generator.js.map +1 -1
  29. package/sqlite-query-analyzer/code-generator.d.ts +3 -1
  30. package/sqlite-query-analyzer/code-generator.d.ts.map +1 -1
  31. package/sqlite-query-analyzer/code-generator.js +28 -13
  32. package/sqlite-query-analyzer/code-generator.js.map +1 -1
  33. package/sqlite-query-analyzer/parser.d.ts +2 -0
  34. package/sqlite-query-analyzer/parser.d.ts.map +1 -1
  35. package/sqlite-query-analyzer/parser.js +19 -6
  36. package/sqlite-query-analyzer/parser.js.map +1 -1
  37. package/sqlite-query-analyzer/query-executor.d.ts +7 -3
  38. package/sqlite-query-analyzer/query-executor.d.ts.map +1 -1
  39. package/sqlite-query-analyzer/query-executor.js +65 -6
  40. package/sqlite-query-analyzer/query-executor.js.map +1 -1
  41. package/sqlite-query-analyzer/sql-generator.d.ts +6 -0
  42. package/sqlite-query-analyzer/sql-generator.d.ts.map +1 -0
  43. package/sqlite-query-analyzer/sql-generator.js +96 -0
  44. package/sqlite-query-analyzer/sql-generator.js.map +1 -0
  45. package/sqlite-query-analyzer/sqlite-crud-generator.d.ts +6 -0
  46. package/sqlite-query-analyzer/sqlite-crud-generator.d.ts.map +1 -0
  47. package/sqlite-query-analyzer/sqlite-crud-generator.js +96 -0
  48. package/sqlite-query-analyzer/sqlite-crud-generator.js.map +1 -0
  49. package/sqlite-query-analyzer/traverse.d.ts.map +1 -1
  50. package/sqlite-query-analyzer/traverse.js +59 -39
  51. package/sqlite-query-analyzer/traverse.js.map +1 -1
  52. package/types.d.ts +15 -1
  53. 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 describeSQL(processedSql, sql_stmt, dbSchema, namedParameters);
27
+ return createSchemaDefinition(processedSql, sql_stmt, dbSchema, namedParameters);
15
28
  }
16
29
  exports.parseSql = parseSql;
17
- function describeSQL(sql, sql_stmtContext, dbSchema, namedParameters) {
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 = true; // param.notNull;
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.name,
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":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/parser.ts"],"names":[],"mappings":";;;AAAA,6CAA+D;AAE/D,iEAAgG;AAChG,yCAAsD;AAEtD,qFAAyE;AACzE,yDAAsD;AACtD,sDAAqE;AACrE,qDAA8C;AAG9C,SAAgB,eAAe,CAAC,EAAY,EAAE,GAAW,EAAE,QAAwB;IAC/E,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,IAAA,8BAAa,EAAC,GAAG,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,IAAA,2BAAU,EAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,IAAA,eAAM,EAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAA,aAAI,EAAC;YACR,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,gBAAgB,CAAC,IAAI,CAAC,WAAW;SACjD,CAAC,CAAA;IACN,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAVD,0CAUC;AAED,SAAgB,QAAQ,CAAC,GAAW,EAAE,QAAwB;IAE1D,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAA,8BAAa,EAAC,GAAG,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,IAAA,iBAAW,EAAC,YAAY,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IACnC,OAAO,sBAAsB,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;AACrF,CAAC;AAPD,4BAOC;AAED,SAAS,sBAAsB,CAAC,GAAW,EAAE,eAAgC,EAAE,QAAwB,EAAE,eAAyB;IAE9H,MAAM,eAAe,GAAoB;QACrC,QAAQ;QACR,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,KAAK;QACZ,cAAc,EAAE;YACZ,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,EAAE;SACZ;KACJ,CAAA;IAED,MAAM,WAAW,GAAG,IAAA,mCAAwB,EAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAE/E,MAAM,aAAa,GAAqB,EAAE,CAAA,CAAC,kBAAkB;IAC7D,IAAA,aAAK,EAAC,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAClD,IAAI,WAAW,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACjD,MAAM,UAAU,GAAG,IAAA,gCAAU,EAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;YAClC,MAAM,OAAO,GAAe;gBACxB,UAAU,EAAE,GAAG,CAAC,IAAI;gBACpB,IAAI,EAAE,IAAA,kCAAiB,EAAC,UAAU,CAAC;gBACnC,OAAO,EAAE,aAAa;gBACtB,KAAK,EAAE,GAAG,CAAC,KAAK;aACnB,CAAA;YACD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC,CAAA;QACF,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjE,MAAM,UAAU,GAAG,IAAA,gCAAU,EAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM,OAAO,GAAiB;gBAC1B,IAAI,EAAE,eAAe,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBAChG,UAAU,EAAE,IAAA,kCAAiB,EAAC,UAAU,CAAC;gBACzC,OAAO,EAAE,aAAa;aACzB,CAAA;YACD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAc;YACzB,GAAG;YACH,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,kBAAkB,EAAE,WAAW,CAAC,kBAAkB;YAClD,OAAO,EAAE,YAAY;YACrB,UAAU,EAAE,YAAY;SAC3B,CAAA;QACD,OAAO,IAAA,cAAK,EAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;QAEpC,MAAM,kBAAkB,GAAiB;YACrC;gBACI,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aAChB;YACD;gBACI,UAAU,EAAE,iBAAiB;gBAC7B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aAChB;SACJ,CAAA;QAED,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,UAAU,GAAG,IAAA,gCAAU,EAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM,OAAO,GAAiB;gBAC1B,IAAI,EAAE,eAAe,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBAChG,UAAU,EAAE,IAAA,kCAAiB,EAAC,UAAU,CAAC;gBACzC,OAAO,EAAE,aAAa;aACzB,CAAA;YACD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAc;YACzB,GAAG;YACH,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,kBAAkB,EAAE,KAAK;YACzB,OAAO,EAAE,kBAAkB;YAC3B,UAAU,EAAE,YAAY;SAC3B,CAAA;QAED,OAAO,IAAA,cAAK,EAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;QAEpC,MAAM,kBAAkB,GAAiB;YACrC;gBACI,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aAChB;YACD;gBACI,UAAU,EAAE,iBAAiB;gBAC7B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aAChB;SACJ,CAAA;QAED,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,UAAU,GAAG,IAAA,gCAAU,EAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM,OAAO,GAAiB;gBAC1B,IAAI,EAAE,eAAe,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBAChG,UAAU,EAAE,IAAA,kCAAiB,EAAC,UAAU,CAAC;gBACzC,OAAO,EAAE,aAAa;aACzB,CAAA;YACD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC,CAAA;QACF,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,UAAU,GAAG,IAAA,gCAAU,EAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM,UAAU,GAAG,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;YACtD,MAAM,OAAO,GAAiB;gBAC1B,IAAI,EAAE,eAAe,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC1G,UAAU,EAAE,IAAA,kCAAiB,EAAC,UAAU,CAAC;gBACzC,OAAO,EAAE,aAAa;aACzB,CAAA;YACD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAc;YACzB,GAAG;YACH,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,kBAAkB,EAAE,KAAK;YACzB,OAAO,EAAE,kBAAkB;YAC3B,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,WAAW;SAC1B,CAAA;QAED,OAAO,IAAA,cAAK,EAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;QACpC,MAAM,kBAAkB,GAAiB;YACrC;gBACI,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aAChB;YACD;gBACI,UAAU,EAAE,iBAAiB;gBAC7B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;aAChB;SACJ,CAAA;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,UAAU,GAAG,IAAA,gCAAU,EAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;YACpC,MAAM,OAAO,GAAiB;gBAC1B,IAAI,EAAE,eAAe,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;gBAChG,UAAU,EAAE,IAAA,kCAAiB,EAAC,UAAU,CAAC;gBACzC,OAAO,EAAE,aAAa;aACzB,CAAA;YACD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAc;YACzB,GAAG;YACH,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,kBAAkB,EAAE,KAAK;YACzB,OAAO,EAAE,kBAAkB;YAC3B,UAAU,EAAE,WAAW;SAC1B,CAAA;QAED,OAAO,IAAA,cAAK,EAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,KAAK,CAAC,uBAAuB,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;AACrE,CAAC"}
@@ -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
- export declare function loadDbSchema(databaseUri: string): Either<TypeSqlError, ColumnSchema[]>;
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,EAAS,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAoBtF"}
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 loadDbSchema(databaseUri) {
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
- ti.type as column_type,
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
- const result = db.prepare(sql)
25
- .all();
26
- return (0, Either_1.right)(result);
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,6CAAiD;AAGjD,oEAAsC;AAEtC,SAAgB,YAAY,CAAC,WAAmB;IAE/C,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG;;;;;;;;;;;;GAYV,CAAA;IAEF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;SAC5B,GAAG,EAAoB,CAAC;IAC1B,OAAO,IAAA,cAAK,EAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AApBD,oCAoBC"}
1
+ {"version":3,"file":"query-executor.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/query-executor.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAuD;AAGvD,oEAAoE;AAEpE,SAAgB,kBAAkB,CAAC,WAAmB;IACrD,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,WAAW,CAAC,CAAC;IACrC,OAAO,IAAA,cAAK,EAAC;QACZ,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,EAAE;KACV,CAAC,CAAC;AACJ,CAAC;AAND,gDAMC;AAED,SAAgB,YAAY,CAAC,EAAgB;IAE5C,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;GAkBV,CAAA;IACF,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,GAAG,EAAoB,CAAC;QAC1B,OAAO,IAAA,cAAK,EAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,iCAAM,GAAG,KAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,IAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAa,CAAC;QAC1B,OAAO,IAAA,aAAI,EAAC;YACX,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,OAAO;SACxB,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AAjCD,oCAiCC;AAED,SAAgB,4BAA4B,CAAC,EAAgB;IAC5D,MAAM,GAAG,GAAG;;;;;;;KAOR,CAAA;IAEJ,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,GAAG,EAAa,CAAC;QACnB,OAAO,IAAA,cAAK,EAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,CAAU,CAAC;QACvB,OAAO,IAAA,aAAI,EAAC;YACX,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,OAAO;SACxB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAtBD,oEAsBC;AAED,SAAgB,UAAU,CAAC,EAAgB,EAAE,GAAW;IACvD,IAAI,CAAC;QACJ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,IAAA,cAAK,EAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAa,CAAC;QAC1B,OAAO,IAAA,aAAI,EAAC;YACX,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,OAAO;SACxB,CAAC,CAAA;IACH,CAAC;AACF,CAAC;AAZD,gCAYC"}
@@ -0,0 +1,6 @@
1
+ import { ColumnSchema } from "./mysql-query-analyzer/types";
2
+ export declare function generateSelectStatement(tableName: string, columns: ColumnSchema[]): string;
3
+ export declare function generateInsertStatement(tableName: string, dbSchema: ColumnSchema[]): string;
4
+ export declare function generateUpdateStatement(tableName: string, dbSchema: ColumnSchema[]): string;
5
+ export declare function generateDeleteStatement(tableName: string, dbSchema: ColumnSchema[]): string;
6
+ //# sourceMappingURL=sql-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-generator.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sql-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,UAuBjF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAwBlF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAsBlF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAclF"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateDeleteStatement = exports.generateUpdateStatement = exports.generateInsertStatement = exports.generateSelectStatement = void 0;
7
+ const code_block_writer_1 = __importDefault(require("code-block-writer"));
8
+ function generateSelectStatement(tableName, columns) {
9
+ const keys = columns.filter(col => col.columnKey = 'PRI');
10
+ if (keys.length == 0) {
11
+ keys.push(...columns.filter(col => col.columnKey == 'UNI'));
12
+ }
13
+ const writer = new code_block_writer_1.default();
14
+ writer.writeLine("SELECT");
15
+ columns.forEach((col, columnIndex) => {
16
+ writer.indent().write(escapeColumn(col.column));
17
+ writer.conditionalWrite(columnIndex < columns.length - 1, ',');
18
+ writer.newLine();
19
+ });
20
+ writer.writeLine(`FROM ${escapeTableName(tableName)}`);
21
+ if (keys.length > 0) {
22
+ writer.write(`WHERE `);
23
+ writer.write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
24
+ }
25
+ return writer.toString();
26
+ }
27
+ exports.generateSelectStatement = generateSelectStatement;
28
+ function generateInsertStatement(tableName, dbSchema) {
29
+ const columns = dbSchema.filter(col => !col.autoincrement);
30
+ const writer = new code_block_writer_1.default();
31
+ writer.writeLine(`INSERT INTO ${escapeTableName(tableName)}`);
32
+ writer.writeLine("(");
33
+ columns.forEach((col, columnIndex) => {
34
+ writer.indent().write(escapeColumn(col.column));
35
+ writer.conditionalWrite(columnIndex != columns.length - 1, ',');
36
+ writer.newLine();
37
+ });
38
+ writer.writeLine(')');
39
+ writer.writeLine("VALUES");
40
+ writer.writeLine("(");
41
+ columns.forEach((col, columnIndex) => {
42
+ writer.indent().write(':' + col.column);
43
+ writer.conditionalWrite(columnIndex < columns.length - 1, ',');
44
+ writer.newLine();
45
+ });
46
+ writer.write(")");
47
+ return writer.toString();
48
+ }
49
+ exports.generateInsertStatement = generateInsertStatement;
50
+ function generateUpdateStatement(tableName, dbSchema) {
51
+ const columns = dbSchema.filter(col => !col.autoincrement);
52
+ const keys = dbSchema.filter(col => col.columnKey = 'PRI');
53
+ if (keys.length == 0) {
54
+ keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
55
+ }
56
+ const writer = new code_block_writer_1.default();
57
+ writer.writeLine(`UPDATE ${escapeTableName(tableName)}`);
58
+ writer.writeLine("SET");
59
+ columns.forEach((col, columnIndex) => {
60
+ writer.indent().write(`${escapeColumn(col.column)} = IF(:${col.column}Set, :${col.column}, ${escapeColumn(col.column)})`);
61
+ writer.conditionalWrite(columnIndex != columns.length - 1, ',');
62
+ writer.newLine();
63
+ });
64
+ if (keys.length > 0) {
65
+ writer.writeLine('WHERE');
66
+ writer.indent().write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
67
+ }
68
+ return writer.toString();
69
+ }
70
+ exports.generateUpdateStatement = generateUpdateStatement;
71
+ function generateDeleteStatement(tableName, dbSchema) {
72
+ const keys = dbSchema.filter(col => col.columnKey = 'PRI');
73
+ if (keys.length == 0) {
74
+ keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
75
+ }
76
+ const writer = new code_block_writer_1.default();
77
+ writer.writeLine(`DELETE FROM ${escapeTableName(tableName)}`);
78
+ if (keys.length > 0) {
79
+ writer.write('WHERE ');
80
+ writer.write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
81
+ }
82
+ return writer.toString();
83
+ }
84
+ exports.generateDeleteStatement = generateDeleteStatement;
85
+ //Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_]
86
+ function escapeTableName(tableName) {
87
+ const validPattern = /^[a-zA-Z0-9_$]+$/g;
88
+ if (!validPattern.test(tableName)) {
89
+ return `\`${tableName}\``;
90
+ }
91
+ return tableName;
92
+ }
93
+ function escapeColumn(column) {
94
+ return `\`${column}\``;
95
+ }
96
+ //# sourceMappingURL=sql-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-generator.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sql-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ColumnSchema } from "../mysql-query-analyzer/types";
2
+ export declare function generateSelectStatement(tableName: string, columns: ColumnSchema[]): string;
3
+ export declare function generateInsertStatement(tableName: string, dbSchema: ColumnSchema[]): string;
4
+ export declare function generateUpdateStatement(tableName: string, dbSchema: ColumnSchema[]): string;
5
+ export declare function generateDeleteStatement(tableName: string, dbSchema: ColumnSchema[]): string;
6
+ //# sourceMappingURL=sqlite-crud-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-crud-generator.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sqlite-crud-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,UAuBjF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAwBlF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAsBlF;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAclF"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateDeleteStatement = exports.generateUpdateStatement = exports.generateInsertStatement = exports.generateSelectStatement = void 0;
7
+ const code_block_writer_1 = __importDefault(require("code-block-writer"));
8
+ function generateSelectStatement(tableName, columns) {
9
+ const keys = columns.filter(col => col.columnKey = 'PRI');
10
+ if (keys.length == 0) {
11
+ keys.push(...columns.filter(col => col.columnKey == 'UNI'));
12
+ }
13
+ const writer = new code_block_writer_1.default();
14
+ writer.writeLine("SELECT");
15
+ columns.forEach((col, columnIndex) => {
16
+ writer.indent().write(escapeColumn(col.column));
17
+ writer.conditionalWrite(columnIndex < columns.length - 1, ',');
18
+ writer.newLine();
19
+ });
20
+ writer.writeLine(`FROM ${escapeTableName(tableName)}`);
21
+ if (keys.length > 0) {
22
+ writer.write(`WHERE `);
23
+ writer.write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
24
+ }
25
+ return writer.toString();
26
+ }
27
+ exports.generateSelectStatement = generateSelectStatement;
28
+ function generateInsertStatement(tableName, dbSchema) {
29
+ const columns = dbSchema.filter(col => !col.autoincrement);
30
+ const writer = new code_block_writer_1.default();
31
+ writer.writeLine(`INSERT INTO ${escapeTableName(tableName)}`);
32
+ writer.writeLine("(");
33
+ columns.forEach((col, columnIndex) => {
34
+ writer.indent().write(escapeColumn(col.column));
35
+ writer.conditionalWrite(columnIndex != columns.length - 1, ',');
36
+ writer.newLine();
37
+ });
38
+ writer.writeLine(')');
39
+ writer.writeLine("VALUES");
40
+ writer.writeLine("(");
41
+ columns.forEach((col, columnIndex) => {
42
+ writer.indent().write(':' + col.column);
43
+ writer.conditionalWrite(columnIndex < columns.length - 1, ',');
44
+ writer.newLine();
45
+ });
46
+ writer.write(")");
47
+ return writer.toString();
48
+ }
49
+ exports.generateInsertStatement = generateInsertStatement;
50
+ function generateUpdateStatement(tableName, dbSchema) {
51
+ const columns = dbSchema.filter(col => !col.autoincrement);
52
+ const keys = dbSchema.filter(col => col.columnKey = 'PRI');
53
+ if (keys.length == 0) {
54
+ keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
55
+ }
56
+ const writer = new code_block_writer_1.default();
57
+ writer.writeLine(`UPDATE ${escapeTableName(tableName)}`);
58
+ writer.writeLine("SET");
59
+ columns.forEach((col, columnIndex) => {
60
+ writer.indent().write(`${escapeColumn(col.column)} = CASE WHEN :${col.column}Set THEN :${col.column} ELSE ${escapeColumn(col.column)}) END`);
61
+ writer.conditionalWrite(columnIndex != columns.length - 1, ',');
62
+ writer.newLine();
63
+ });
64
+ if (keys.length > 0) {
65
+ writer.writeLine('WHERE');
66
+ writer.indent().write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
67
+ }
68
+ return writer.toString();
69
+ }
70
+ exports.generateUpdateStatement = generateUpdateStatement;
71
+ function generateDeleteStatement(tableName, dbSchema) {
72
+ const keys = dbSchema.filter(col => col.columnKey = 'PRI');
73
+ if (keys.length == 0) {
74
+ keys.push(...dbSchema.filter(col => col.columnKey == 'UNI'));
75
+ }
76
+ const writer = new code_block_writer_1.default();
77
+ writer.writeLine(`DELETE FROM ${escapeTableName(tableName)}`);
78
+ if (keys.length > 0) {
79
+ writer.write('WHERE ');
80
+ writer.write(`${escapeColumn(keys[0].column)} = :${keys[0].column}`);
81
+ }
82
+ return writer.toString();
83
+ }
84
+ exports.generateDeleteStatement = generateDeleteStatement;
85
+ //Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_]
86
+ function escapeTableName(tableName) {
87
+ const validPattern = /^[a-zA-Z0-9_$]+$/g;
88
+ if (!validPattern.test(tableName)) {
89
+ return `[${tableName}]`;
90
+ }
91
+ return tableName;
92
+ }
93
+ function escapeColumn(column) {
94
+ return `[${column}]`;
95
+ }
96
+ //# sourceMappingURL=sqlite-crud-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-crud-generator.js","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/sqlite-crud-generator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAyL,MAAM,sCAAsC,CAAC;AAClR,OAAO,EAAE,SAAS,EAAE,eAAe,EAA6B,MAAM,+BAA+B,CAAC;AAGtG,OAAO,EAAsE,eAAe,EAAgB,MAAM,kCAAkC,CAAC;AAErJ,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,GAAG,eAAe,CA2BrH;AAkfD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,WAsB5F"}
1
+ {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../../src/sqlite-query-analyzer/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAyL,MAAM,sCAAsC,CAAC;AAClR,OAAO,EAAE,SAAS,EAAE,eAAe,EAA6B,MAAM,+BAA+B,CAAC;AAGtG,OAAO,EAAsE,eAAe,EAAgB,MAAM,kCAAkC,CAAC;AAErJ,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,GAAG,eAAe,CA2BrH;AA6hBD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,SAAS,EAAE,WAsB5F"}
@@ -218,10 +218,29 @@ function traverse_expr(expr, traverseContext) {
218
218
  table: functionType.table || ''
219
219
  };
220
220
  }
221
+ if (function_name == 'coalesce') {
222
+ const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), '?');
223
+ const paramTypes = expr.expr_list().map(paramExpr => {
224
+ const paramType = traverse_expr(paramExpr, traverseContext);
225
+ traverseContext.constraints.push({
226
+ expression: expr.getText(),
227
+ type1: functionType,
228
+ type2: paramType.type
229
+ });
230
+ return paramType;
231
+ });
232
+ return {
233
+ name: functionType.name,
234
+ type: functionType,
235
+ notNull: paramTypes.some(param => param.notNull),
236
+ table: functionType.table || ''
237
+ };
238
+ }
221
239
  if (function_name == 'strftime') {
222
240
  const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), 'TEXT');
223
241
  const paramExpr = expr.expr(1);
224
242
  const paramType = traverse_expr(paramExpr, traverseContext);
243
+ paramType.notNull = true;
225
244
  traverseContext.constraints.push({
226
245
  expression: paramExpr.getText(),
227
246
  type1: (0, collect_constraints_1.freshVar)(paramExpr.getText(), 'DATE'),
@@ -238,6 +257,7 @@ function traverse_expr(expr, traverseContext) {
238
257
  const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), 'TEXT');
239
258
  const paramExpr = expr.expr(0);
240
259
  const paramType = traverse_expr(paramExpr, traverseContext);
260
+ paramType.notNull = true;
241
261
  traverseContext.constraints.push({
242
262
  expression: paramExpr.getText(),
243
263
  type1: (0, collect_constraints_1.freshVar)(paramExpr.getText(), 'DATE'),
@@ -254,7 +274,9 @@ function traverse_expr(expr, traverseContext) {
254
274
  const functionType = (0, collect_constraints_1.freshVar)(expr.getText(), '?');
255
275
  const paramTypes = expr.expr_list().map(paramExpr => {
256
276
  const paramType = traverse_expr(paramExpr, traverseContext);
257
- paramType.notNull = false;
277
+ if (paramType.name == '?') {
278
+ paramType.notNull = false;
279
+ }
258
280
  traverseContext.constraints.push({
259
281
  expression: expr.getText(),
260
282
  type1: functionType,
@@ -311,10 +333,10 @@ function traverse_expr(expr, traverseContext) {
311
333
  const type = {
312
334
  name: param.name,
313
335
  type: param,
314
- notNull: true,
336
+ notNull: false,
315
337
  table: param.table || ''
316
338
  };
317
- traverseContext.parameters.push(type.type);
339
+ traverseContext.parameters.push(type);
318
340
  return type;
319
341
  }
320
342
  if (expr.STAR() || expr.DIV() || expr.MOD()) {
@@ -342,6 +364,12 @@ function traverse_expr(expr, traverseContext) {
342
364
  const exprRight = expr.expr(1);
343
365
  const typeLeft = traverse_expr(exprLeft, traverseContext);
344
366
  const typeRight = traverse_expr(exprRight, traverseContext);
367
+ if (typeLeft.name == '?') {
368
+ typeLeft.notNull = true;
369
+ }
370
+ if (typeRight.name == '?') {
371
+ typeRight.notNull = true;
372
+ }
345
373
  traverseContext.constraints.push({
346
374
  expression: expr.getText(),
347
375
  type1: typeLeft.type,
@@ -371,6 +399,12 @@ function traverse_expr(expr, traverseContext) {
371
399
  const exprRight = expr.expr(1);
372
400
  const typeLeft = traverse_expr(exprLeft, traverseContext);
373
401
  const typeRight = traverse_expr(exprRight, traverseContext);
402
+ if (typeLeft.name == '?') {
403
+ typeLeft.notNull = true;
404
+ }
405
+ if (typeRight.name == '?') {
406
+ typeRight.notNull = true;
407
+ }
374
408
  traverseContext.constraints.push({
375
409
  expression: expr.getText(),
376
410
  type1: typeLeft.type,
@@ -388,6 +422,12 @@ function traverse_expr(expr, traverseContext) {
388
422
  const exprType = traverse_expr(expr.expr(0), traverseContext);
389
423
  const between1 = traverse_expr(expr.expr(1), traverseContext);
390
424
  const between2 = traverse_expr(expr.expr(2), traverseContext);
425
+ if (between1.name == '?') {
426
+ between1.notNull = true;
427
+ }
428
+ if (between2.name == '?') {
429
+ between2.notNull = true;
430
+ }
391
431
  traverseContext.constraints.push({
392
432
  expression: expr.getText(),
393
433
  type1: exprType.type,
@@ -467,15 +507,10 @@ function traverse_expr(expr, traverseContext) {
467
507
  const whenTypes = [];
468
508
  expr.expr_list().forEach((expr_, index) => {
469
509
  const type = traverse_expr(expr_, traverseContext);
470
- if (expr_.WHEN__list() || expr_.THEN__list()) {
471
- if (index % 2 == 0) {
472
- whenTypes.push(type.type);
473
- }
474
- else {
475
- resultTypes.push(type.type);
476
- }
510
+ if (index % 2 == 0 && (!expr.ELSE_() || index < expr.expr_list().length - 1)) {
511
+ whenTypes.push(type.type);
477
512
  }
478
- if (expr_.ELSE_()) {
513
+ else {
479
514
  resultTypes.push(type.type);
480
515
  }
481
516
  });
@@ -488,6 +523,13 @@ function traverse_expr(expr, traverseContext) {
488
523
  });
489
524
  }
490
525
  });
526
+ whenTypes.forEach((whenType) => {
527
+ traverseContext.constraints.push({
528
+ expression: expr.getText(),
529
+ type1: (0, collect_constraints_1.freshVar)('INTEGER', 'INTEGER'),
530
+ type2: whenType
531
+ });
532
+ });
491
533
  const type = resultTypes[0];
492
534
  return {
493
535
  name: type.name,
@@ -593,12 +635,7 @@ function traverse_insert_stmt(insert_stmt, traverseContext) {
593
635
  type1: col.type,
594
636
  type2: exprType.type
595
637
  });
596
- insertColumns.push({
597
- name: param.name,
598
- type: param,
599
- notNull: exprType.notNull && col.notNull,
600
- table: ""
601
- });
638
+ insertColumns.push(Object.assign(Object.assign({}, param), { notNull: exprType.name == '?' ? col.notNull : param.notNull }));
602
639
  });
603
640
  });
604
641
  });
@@ -623,28 +660,20 @@ function traverse_update_stmt(update_stmt, traverseContext) {
623
660
  expr_list.forEach((expr, index) => {
624
661
  paramsBefore = traverseContext.parameters.length;
625
662
  const exprType = traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns }));
626
- if (index < columns.length) {
663
+ if (!update_stmt.WHERE_() || expr.start.start < update_stmt.WHERE_().symbol.start) {
627
664
  const col = columns[index];
628
665
  traverseContext.constraints.push({
629
666
  expression: expr.getText(),
630
667
  type1: col.type,
631
668
  type2: exprType.type
632
669
  });
633
- updateColumns.push({
634
- name: col.name,
635
- type: exprType.type,
636
- notNull: exprType.notNull && col.notNull,
637
- table: ""
670
+ traverseContext.parameters.slice(paramsBefore).forEach((param, index) => {
671
+ updateColumns.push(Object.assign(Object.assign({}, param), { notNull: param.notNull && col.notNull }));
638
672
  });
639
673
  }
640
674
  else {
641
675
  traverseContext.parameters.slice(paramsBefore).forEach((param, index) => {
642
- whereParams.push({
643
- name: param.name,
644
- type: param,
645
- notNull: true,
646
- table: ''
647
- });
676
+ whereParams.push(param);
648
677
  });
649
678
  }
650
679
  });
@@ -660,18 +689,9 @@ function traverse_delete_stmt(delete_stmt, traverseContext) {
660
689
  const fromColumns = (0, select_columns_1.filterColumns)(traverseContext.dbSchema, [], '', (0, select_columns_1.splitName)(table_name));
661
690
  const expr = delete_stmt.expr();
662
691
  traverse_expr(expr, Object.assign(Object.assign({}, traverseContext), { fromColumns }));
663
- const params = traverseContext.parameters.map(param => {
664
- const paramResult = {
665
- name: param.name,
666
- type: param,
667
- notNull: true,
668
- table: param.table || ''
669
- };
670
- return paramResult;
671
- });
672
692
  const queryResult = {
673
693
  queryType: 'Delete',
674
- params: params
694
+ params: traverseContext.parameters
675
695
  };
676
696
  return queryResult;
677
697
  }