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

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 (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":"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"}
@@ -1,5 +1,9 @@
1
1
  import { Either } from "fp-ts/lib/Either";
2
- import { TypeSqlError } from "../types";
3
- import { ColumnSchema } from "../mysql-query-analyzer/types";
4
- 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":";;;;;;AACA,0EAAgD;AAEhD,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,OAAuB;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,SAAS,CAAC,QAAQ,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEvD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAvBD,0DAuBC;AAED,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,QAAwB;IAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,CAAC,SAAS,CAAC,eAAe,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACrB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,EAAE,CAAC;IAErB,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAxBD,0DAwBC;AAED,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,QAAwB;IAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,CAAC,SAAS,CAAC,UAAU,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACvB,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QACjC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1H,MAAM,CAAC,gBAAgB,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC,CAAC,CAAA;IACF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAtBD,0DAsBC;AAED,SAAgB,uBAAuB,CAAC,SAAiB,EAAE,QAAwB;IAC/E,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,2BAAe,EAAE,CAAC;IAErC,MAAM,CAAC,SAAS,CAAC,eAAe,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAdD,0DAcC;AAED,sEAAsE;AACtE,SAAS,eAAe,CAAC,SAAiB;IACtC,MAAM,YAAY,GAAG,mBAAmB,CAAC;IACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,SAAS,IAAI,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAChC,OAAO,KAAK,MAAM,IAAI,CAAC;AAC3B,CAAC"}
@@ -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
  }