typesql-cli 0.14.2 → 0.15.0-experimental.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +9 -0
- package/cli.js.map +1 -1
- package/code-generator.d.ts.map +1 -1
- package/code-generator.js +7 -0
- package/code-generator.js.map +1 -1
- package/code-generator2.d.ts +4 -0
- package/code-generator2.d.ts.map +1 -0
- package/code-generator2.js +219 -0
- package/code-generator2.js.map +1 -0
- package/describe-nested-query.d.ts +1 -1
- package/describe-nested-query.d.ts.map +1 -1
- package/describe-nested-query.js +4 -4
- package/describe-nested-query.js.map +1 -1
- package/describe-query.d.ts +1 -1
- package/describe-query.d.ts.map +1 -1
- package/describe-query.js +14 -4
- package/describe-query.js.map +1 -1
- package/dialects/postgres.d.ts +5 -0
- package/dialects/postgres.d.ts.map +1 -0
- package/dialects/postgres.js +91 -0
- package/dialects/postgres.js.map +1 -0
- package/drivers/postgres.d.ts +12 -0
- package/drivers/postgres.d.ts.map +1 -0
- package/drivers/postgres.js +109 -0
- package/drivers/postgres.js.map +1 -0
- package/drivers/types.d.ts +27 -0
- package/drivers/types.d.ts.map +1 -0
- package/drivers/types.js +3 -0
- package/drivers/types.js.map +1 -0
- package/mysql-mapping.d.ts +3 -3
- package/mysql-mapping.d.ts.map +1 -1
- package/mysql-query-analyzer/collect-constraints.d.ts +2 -2
- package/mysql-query-analyzer/collect-constraints.d.ts.map +1 -1
- package/mysql-query-analyzer/infer-column-nullability.d.ts +1 -1
- package/mysql-query-analyzer/infer-column-nullability.d.ts.map +1 -1
- package/mysql-query-analyzer/infer-column-nullability.js +29 -29
- package/mysql-query-analyzer/infer-column-nullability.js.map +1 -1
- package/mysql-query-analyzer/infer-param-nullability.d.ts +2 -2
- package/mysql-query-analyzer/infer-param-nullability.d.ts.map +1 -1
- package/mysql-query-analyzer/infer-param-nullability.js +6 -5
- package/mysql-query-analyzer/infer-param-nullability.js.map +1 -1
- package/mysql-query-analyzer/parse.d.ts +3 -2
- package/mysql-query-analyzer/parse.d.ts.map +1 -1
- package/mysql-query-analyzer/parse.js +16 -36
- package/mysql-query-analyzer/parse.js.map +1 -1
- package/mysql-query-analyzer/select-columns.d.ts +3 -3
- package/mysql-query-analyzer/select-columns.d.ts.map +1 -1
- package/mysql-query-analyzer/select-columns.js +33 -33
- package/mysql-query-analyzer/select-columns.js.map +1 -1
- package/mysql-query-analyzer/traverse.d.ts +1 -1
- package/mysql-query-analyzer/traverse.d.ts.map +1 -1
- package/mysql-query-analyzer/traverse.js +36 -36
- package/mysql-query-analyzer/traverse.js.map +1 -1
- package/mysql-query-analyzer/types.d.ts.map +1 -1
- package/mysql-query-analyzer/verify-multiple-result.d.ts +1 -1
- package/mysql-query-analyzer/verify-multiple-result.d.ts.map +1 -1
- package/mysql-query-analyzer/verify-multiple-result.js +7 -7
- package/mysql-query-analyzer/verify-multiple-result.js.map +1 -1
- package/package.json +52 -49
- package/postgres-query-analyzer/describe.d.ts +8 -0
- package/postgres-query-analyzer/describe.d.ts.map +1 -0
- package/postgres-query-analyzer/describe.js +100 -0
- package/postgres-query-analyzer/describe.js.map +1 -0
- package/postgres-query-analyzer/parser.d.ts +11 -0
- package/postgres-query-analyzer/parser.d.ts.map +1 -0
- package/postgres-query-analyzer/parser.js +11 -0
- package/postgres-query-analyzer/parser.js.map +1 -0
- package/postgres-query-analyzer/traverse.d.ts +5 -0
- package/postgres-query-analyzer/traverse.d.ts.map +1 -0
- package/postgres-query-analyzer/traverse.js +702 -0
- package/postgres-query-analyzer/traverse.js.map +1 -0
- package/sqlite-query-analyzer/code-generator.js +8 -1
- package/sqlite-query-analyzer/code-generator.js.map +1 -1
- package/sqlite-query-analyzer/enum-parser.js +1 -1
- package/sqlite-query-analyzer/enum-parser.js.map +1 -1
- package/sqlite-query-analyzer/parser.js +2 -2
- package/sqlite-query-analyzer/parser.js.map +1 -1
- package/sqlite-query-analyzer/replace-list-params.d.ts +2 -0
- package/sqlite-query-analyzer/replace-list-params.d.ts.map +1 -1
- package/sqlite-query-analyzer/replace-list-params.js +39 -0
- package/sqlite-query-analyzer/replace-list-params.js.map +1 -1
- package/sqlite-query-analyzer/traverse.d.ts +1 -1
- package/sqlite-query-analyzer/traverse.d.ts.map +1 -1
- package/sqlite-query-analyzer/traverse.js +1 -1
- package/sqlite-query-analyzer/traverse.js.map +1 -1
- package/sqlite-query-analyzer/types.d.ts +1 -0
- package/sqlite-query-analyzer/types.d.ts.map +1 -1
- package/types.d.ts +10 -5
- package/types.d.ts.map +1 -1
package/describe-query.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"describe-query.d.ts","sourceRoot":"","sources":["../../src/describe-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAgB,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEpG,OAAO,EAAE,KAAK,MAAM,EAAuB,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAiG5E;AAYD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,CAIjE;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAoB1G;AAID,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"describe-query.d.ts","sourceRoot":"","sources":["../../src/describe-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAgB,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEpG,OAAO,EAAE,KAAK,MAAM,EAAuB,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAiG5E;AAYD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,CAIjE;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAoB1G;AAID,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,mBAiClF;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAG5D"}
|
package/describe-query.js
CHANGED
@@ -18,7 +18,7 @@ const parse_1 = require("./mysql-query-analyzer/parse");
|
|
18
18
|
const Either_1 = require("fp-ts/lib/Either");
|
19
19
|
const queryExectutor_1 = require("./queryExectutor");
|
20
20
|
function describeSql(dbSchema, sql) {
|
21
|
-
const { sql: processedSql, namedParameters } = preprocessSql(sql);
|
21
|
+
const { sql: processedSql, namedParameters } = preprocessSql(sql, 'mysql');
|
22
22
|
const queryInfo = (0, parse_1.extractQueryInfo)(sql, dbSchema);
|
23
23
|
if (queryInfo.kind === 'Select') {
|
24
24
|
const parametersDef = queryInfo.parameters.map((paramInfo, paramIndex) => {
|
@@ -124,7 +124,7 @@ function verifyNotInferred(type) {
|
|
124
124
|
}
|
125
125
|
function parseSql(client, sql) {
|
126
126
|
return __awaiter(this, void 0, void 0, function* () {
|
127
|
-
const { sql: processedSql } = preprocessSql(sql);
|
127
|
+
const { sql: processedSql } = preprocessSql(sql, 'mysql');
|
128
128
|
const explainResult = yield (0, queryExectutor_1.explainSql)(client.client, processedSql);
|
129
129
|
if ((0, Either_1.isLeft)(explainResult)) {
|
130
130
|
return explainResult;
|
@@ -148,18 +148,28 @@ function parseSql(client, sql) {
|
|
148
148
|
}
|
149
149
|
//http://dev.mysql.com/doc/refman/8.0/en/identifiers.html
|
150
150
|
//Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)
|
151
|
-
function preprocessSql(sql) {
|
151
|
+
function preprocessSql(sql, dialect) {
|
152
152
|
const lines = sql.split('\n');
|
153
153
|
const regex = /:[a-zA-Z$_]+[a-zA-Z\d$_]*/g;
|
154
154
|
let newSql = '';
|
155
155
|
const allParameters = [];
|
156
|
+
let paramIndex = 1; // For PostgreSQL, to track $1, $2, $3, ...
|
156
157
|
lines.forEach((line, index, array) => {
|
157
158
|
var _a;
|
158
159
|
let newLine = line;
|
159
160
|
if (!line.trim().startsWith('--')) {
|
160
161
|
const parameters = ((_a = line.match(regex)) === null || _a === void 0 ? void 0 : _a.map((param) => param.slice(1))) || [];
|
161
162
|
allParameters.push(...parameters);
|
162
|
-
|
163
|
+
if (dialect == 'postgres') {
|
164
|
+
parameters.forEach((param) => {
|
165
|
+
newLine = newLine.replace(`:${param}`, `$${paramIndex}`);
|
166
|
+
paramIndex++;
|
167
|
+
});
|
168
|
+
}
|
169
|
+
else {
|
170
|
+
// Replace named parameters with `?` for MySQL and sqlite
|
171
|
+
newLine = line.replace(regex, '?');
|
172
|
+
}
|
163
173
|
}
|
164
174
|
newSql += newLine;
|
165
175
|
if (index !== array.length - 1) {
|
package/describe-query.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"describe-query.js","sourceRoot":"","sources":["../../src/describe-query.ts"],"names":[],"mappings":";;;;;;;;;;;AAOA,kCAiGC;AAYD,8CAIC;AAED,4BAoBC;AAID,
|
1
|
+
{"version":3,"file":"describe-query.js","sourceRoot":"","sources":["../../src/describe-query.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/dialects/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,eAAO,MAAM,aAAa,EAmBrB,GAAG,CAAC;AAGT,wBAAgB,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAiEhE"}
|
@@ -0,0 +1,91 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.postgresTypes = void 0;
|
4
|
+
exports.mapColumnType = mapColumnType;
|
5
|
+
exports.postgresTypes = {
|
6
|
+
16: 'bool',
|
7
|
+
17: 'bytea',
|
8
|
+
18: 'char',
|
9
|
+
19: 'name',
|
10
|
+
20: 'int8',
|
11
|
+
21: 'int2',
|
12
|
+
23: 'int4',
|
13
|
+
25: 'text',
|
14
|
+
29: 'varchar',
|
15
|
+
36: 'uuid',
|
16
|
+
700: 'float4',
|
17
|
+
701: 'float8',
|
18
|
+
1082: 'date',
|
19
|
+
1560: 'bit',
|
20
|
+
1700: 'numeric',
|
21
|
+
1042: 'bpchar',
|
22
|
+
1043: 'varchar',
|
23
|
+
2950: 'uuid',
|
24
|
+
};
|
25
|
+
function mapColumnType(postgresType) {
|
26
|
+
switch (postgresType) {
|
27
|
+
case 'bool':
|
28
|
+
return 'boolean';
|
29
|
+
case 'bool[]':
|
30
|
+
return 'boolean[]';
|
31
|
+
case 'bytea':
|
32
|
+
return 'ArrayBuffer';
|
33
|
+
case 'char':
|
34
|
+
return 'string';
|
35
|
+
case 'char[]':
|
36
|
+
return 'string';
|
37
|
+
case 'bpchar':
|
38
|
+
return 'string';
|
39
|
+
case 'bpchar[]':
|
40
|
+
return 'string[]';
|
41
|
+
case 'name':
|
42
|
+
return 'string';
|
43
|
+
case 'name[]':
|
44
|
+
return 'string[]';
|
45
|
+
case 'int8':
|
46
|
+
return 'number';
|
47
|
+
case 'int8[]':
|
48
|
+
return 'number[]';
|
49
|
+
case 'int2':
|
50
|
+
return 'number';
|
51
|
+
case 'int2[]':
|
52
|
+
return 'number[]';
|
53
|
+
case 'int4':
|
54
|
+
return 'number';
|
55
|
+
case 'int4[]':
|
56
|
+
return 'number[]';
|
57
|
+
case 'text':
|
58
|
+
return 'string';
|
59
|
+
case 'text[]':
|
60
|
+
return 'string[]';
|
61
|
+
case 'varchar':
|
62
|
+
return 'string';
|
63
|
+
case 'varchar[]':
|
64
|
+
return 'string[]';
|
65
|
+
case 'date':
|
66
|
+
return 'Date';
|
67
|
+
case 'date[]':
|
68
|
+
return 'Date[]';
|
69
|
+
case 'bit':
|
70
|
+
return 'boolean';
|
71
|
+
case 'bit[]':
|
72
|
+
return 'boolean[]';
|
73
|
+
case 'numeric':
|
74
|
+
return 'string';
|
75
|
+
case 'numeric[]':
|
76
|
+
return 'string[]';
|
77
|
+
case 'uuid':
|
78
|
+
return 'string';
|
79
|
+
case 'uuid[]':
|
80
|
+
return 'string[]';
|
81
|
+
case 'float4':
|
82
|
+
return 'number';
|
83
|
+
case 'float4[]':
|
84
|
+
return 'number[]';
|
85
|
+
case 'float8':
|
86
|
+
return 'number';
|
87
|
+
case 'float8[]':
|
88
|
+
return 'number[]';
|
89
|
+
}
|
90
|
+
}
|
91
|
+
//# sourceMappingURL=postgres.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/dialects/postgres.ts"],"names":[],"mappings":";;;AAyBA,sCAiEC;AAvFY,QAAA,aAAa,GAAG;IAC5B,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,MAAM;IACV,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,MAAM;CACL,CAAC;AAGT,SAAgB,aAAa,CAAC,YAA0B;IACvD,QAAQ,YAAY,EAAE,CAAC;QACtB,KAAK,MAAM;YACV,OAAO,SAAS,CAAC;QAClB,KAAK,QAAQ;YACZ,OAAO,WAAW,CAAC;QACpB,KAAK,OAAO;YACX,OAAO,aAAa,CAAC;QACtB,KAAK,MAAM;YACV,OAAO,QAAQ,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB,KAAK,UAAU;YACd,OAAO,UAAU,CAAC;QACnB,KAAK,MAAM;YACV,OAAO,QAAQ,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,UAAU,CAAC;QACnB,KAAK,MAAM;YACV,OAAO,QAAQ,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,UAAU,CAAC;QACnB,KAAK,MAAM;YACV,OAAO,QAAQ,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,UAAU,CAAC;QACnB,KAAK,MAAM;YACV,OAAO,QAAQ,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,UAAU,CAAC;QACnB,KAAK,MAAM;YACV,OAAO,QAAQ,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,UAAU,CAAC;QACnB,KAAK,SAAS;YACb,OAAO,QAAQ,CAAC;QACjB,KAAK,WAAW;YACf,OAAO,UAAU,CAAC;QACnB,KAAK,MAAM;YACV,OAAO,MAAM,CAAC;QACf,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB,KAAK,KAAK;YACT,OAAO,SAAS,CAAC;QAClB,KAAK,OAAO;YACX,OAAO,WAAW,CAAC;QACpB,KAAK,SAAS;YACb,OAAO,QAAQ,CAAC;QACjB,KAAK,WAAW;YACf,OAAO,UAAU,CAAC;QACnB,KAAK,MAAM;YACV,OAAO,QAAQ,CAAC;QACjB,KAAK,QAAQ;YACZ,OAAO,UAAU,CAAC;QACnB,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB,KAAK,UAAU;YACd,OAAO,UAAU,CAAC;QACnB,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB,KAAK,UAAU;YACd,OAAO,UAAU,CAAC;IACpB,CAAC;AACF,CAAC"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { Sql } from 'postgres';
|
2
|
+
import { PostgresColumnSchema, PostgresDescribe, PostgresType } from './types';
|
3
|
+
import { TaskEither } from 'fp-ts/lib/TaskEither';
|
4
|
+
import { DatabaseClient, TypeSqlError } from '../types';
|
5
|
+
import { Either } from 'fp-ts/lib/Either';
|
6
|
+
import { ResultAsync } from 'neverthrow';
|
7
|
+
export declare function loadDbSchema(sql: Sql): ResultAsync<PostgresColumnSchema[], string>;
|
8
|
+
export declare const postgresDescribe: (sql: Sql, sqlQuery: string) => ResultAsync<PostgresDescribe, string>;
|
9
|
+
export declare function postgresAnalyze(sql: Sql, sqlQuery: string): ResultAsync<string[], string>;
|
10
|
+
export declare function loadTypes(postgres: Sql): TaskEither<string, PostgresType[]>;
|
11
|
+
export declare function createPostgresClient(databaseUri: string): Either<TypeSqlError, DatabaseClient>;
|
12
|
+
//# sourceMappingURL=postgres.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/drivers/postgres.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAuB,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,UAAU,EAAY,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,MAAM,EAAS,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC,oBAAoB,EAAE,EAAE,MAAM,CAAC,CAsClF;AAED,eAAO,MAAM,gBAAgB,QAAS,GAAG,YAAY,MAAM,KAAG,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAuBjG,CAAA;AAGD,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAezF;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAU3E;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAM9F"}
|
@@ -0,0 +1,109 @@
|
|
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.postgresDescribe = void 0;
|
16
|
+
exports.loadDbSchema = loadDbSchema;
|
17
|
+
exports.postgresAnalyze = postgresAnalyze;
|
18
|
+
exports.loadTypes = loadTypes;
|
19
|
+
exports.createPostgresClient = createPostgresClient;
|
20
|
+
const postgres_1 = __importDefault(require("postgres"));
|
21
|
+
const TaskEither_1 = require("fp-ts/lib/TaskEither");
|
22
|
+
const Either_1 = require("fp-ts/lib/Either");
|
23
|
+
const neverthrow_1 = require("neverthrow");
|
24
|
+
function loadDbSchema(sql) {
|
25
|
+
return neverthrow_1.ResultAsync.fromThrowable(() => __awaiter(this, void 0, void 0, function* () {
|
26
|
+
const result = yield sql `SELECT
|
27
|
+
c.oid,
|
28
|
+
t.table_schema,
|
29
|
+
t.table_name,
|
30
|
+
col.column_name,
|
31
|
+
col.is_nullable
|
32
|
+
FROM
|
33
|
+
information_schema.tables t
|
34
|
+
JOIN
|
35
|
+
pg_class c ON c.relname = t.table_name
|
36
|
+
JOIN
|
37
|
+
information_schema.columns col
|
38
|
+
ON t.table_name = col.table_name
|
39
|
+
AND t.table_schema = col.table_schema
|
40
|
+
WHERE
|
41
|
+
t.table_type = 'BASE TABLE' -- Only regular tables, excluding views
|
42
|
+
AND t.table_schema NOT IN ('information_schema', 'pg_catalog') -- Exclude system schemas
|
43
|
+
ORDER BY
|
44
|
+
t.table_schema, t.table_name, col.ordinal_position;`;
|
45
|
+
return result.map((row) => ({
|
46
|
+
oid: row.oid,
|
47
|
+
table_schema: row.table_schema,
|
48
|
+
table_name: row.table_name,
|
49
|
+
column_name: row.column_name,
|
50
|
+
is_nullable: row.is_nullable === 'YES'
|
51
|
+
}));
|
52
|
+
}), (reason) => {
|
53
|
+
if (reason.errors && reason.errors.length > 0) {
|
54
|
+
return reason.errors.map((e) => e.message).join(', '); // Join all error messages into one string
|
55
|
+
}
|
56
|
+
return 'Unknown error';
|
57
|
+
})();
|
58
|
+
}
|
59
|
+
const postgresDescribe = (sql, sqlQuery) => {
|
60
|
+
return neverthrow_1.ResultAsync.fromThrowable(() => __awaiter(void 0, void 0, void 0, function* () {
|
61
|
+
const describeResult = yield sql.unsafe(sqlQuery).describe();
|
62
|
+
const columns = describeResult.columns.map((col) => ({
|
63
|
+
name: col.name,
|
64
|
+
tableId: col.table,
|
65
|
+
typeId: col.type
|
66
|
+
}));
|
67
|
+
const parameters = describeResult.types;
|
68
|
+
const result = {
|
69
|
+
columns,
|
70
|
+
parameters
|
71
|
+
};
|
72
|
+
return result;
|
73
|
+
}), (reason) => {
|
74
|
+
if (reason instanceof Error) {
|
75
|
+
return reason.message;
|
76
|
+
}
|
77
|
+
return 'Unknown error';
|
78
|
+
})();
|
79
|
+
};
|
80
|
+
exports.postgresDescribe = postgresDescribe;
|
81
|
+
function postgresAnalyze(sql, sqlQuery) {
|
82
|
+
return neverthrow_1.ResultAsync.fromThrowable(() => __awaiter(this, void 0, void 0, function* () {
|
83
|
+
const analyzeResult = yield sql.unsafe(`EXPLAIN ${sqlQuery}`);
|
84
|
+
return analyzeResult.map(res => {
|
85
|
+
return res['QUERY PLAN'];
|
86
|
+
});
|
87
|
+
}), (reason) => {
|
88
|
+
if (reason.errors && reason.errors.length > 0) {
|
89
|
+
return reason.errors.map((e) => e.message).join(', '); // Join all error messages into one string
|
90
|
+
}
|
91
|
+
return reason.message;
|
92
|
+
})();
|
93
|
+
}
|
94
|
+
function loadTypes(postgres) {
|
95
|
+
return (0, TaskEither_1.tryCatch)(() => __awaiter(this, void 0, void 0, function* () {
|
96
|
+
const result = yield postgres `SELECT
|
97
|
+
oid as "typeId", typname as "typeName"
|
98
|
+
FROM pg_type`.execute();
|
99
|
+
return result.columns;
|
100
|
+
}), (reason) => String(reason));
|
101
|
+
}
|
102
|
+
function createPostgresClient(databaseUri) {
|
103
|
+
const db = (0, postgres_1.default)(databaseUri);
|
104
|
+
return (0, Either_1.right)({
|
105
|
+
type: 'pg',
|
106
|
+
client: db
|
107
|
+
});
|
108
|
+
}
|
109
|
+
//# sourceMappingURL=postgres.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/drivers/postgres.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAOA,oCAsCC;AA4BD,0CAeC;AAED,8BAUC;AAED,oDAMC;AA5GD,wDAAyC;AAEzC,qDAA4D;AAE5D,6CAAiD;AACjD,2CAAyC;AAEzC,SAAgB,YAAY,CAAC,GAAQ;IACpC,OAAO,wBAAW,CAAC,aAAa,CAC/B,GAAS,EAAE;QACV,MAAM,MAAM,GAAG,MAAM,GAAG,CAAA;;;;;;;;;;;;;;;;;;wDAkB6B,CAAC;QAEtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;YAChC,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,WAAW,EAAE,GAAG,CAAC,WAAW,KAAK,KAAK;SACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAA,EACD,CAAC,MAAW,EAAE,EAAE;QACf,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAsB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C;QACvH,CAAC;QACD,OAAO,eAAe,CAAC;IACxB,CAAC,CACD,EAAE,CAAC;AACL,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAE,QAAgB,EAAyC,EAAE;IACrG,OAAO,wBAAW,CAAC,aAAa,CAC/B,GAAS,EAAE;QACV,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7D,MAAM,OAAO,GAA0B,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3E,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,KAAK;YAClB,MAAM,EAAE,GAAG,CAAC,IAAI;SAChB,CAAC,CAAC,CAAC;QACJ,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC;QACxC,MAAM,MAAM,GAAqB;YAChC,OAAO;YACP,UAAU;SACV,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC,CAAA,EACD,CAAC,MAAe,EAAU,EAAE;QAC3B,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,OAAO,CAAC;QACvB,CAAC;QACD,OAAO,eAAe,CAAC;IACxB,CAAC,CACD,EAAE,CAAC;AACL,CAAC,CAAA;AAvBY,QAAA,gBAAgB,oBAuB5B;AAGD,SAAgB,eAAe,CAAC,GAAQ,EAAE,QAAgB;IACzD,OAAO,wBAAW,CAAC,aAAa,CAC/B,GAAS,EAAE;QACV,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;QAC9D,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC9B,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACJ,CAAC,CAAA,EACD,CAAC,MAAW,EAAE,EAAE;QACf,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAsB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C;QACvH,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC;IACvB,CAAC,CACD,EAAE,CAAC;AACL,CAAC;AAED,SAAgB,SAAS,CAAC,QAAa;IACtC,OAAO,IAAA,qBAAQ,EACd,GAAS,EAAE;QACV,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAA;;gBAEhB,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,OAAoC,CAAC;IACpD,CAAC,CAAA,EACD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAC1B,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAAC,WAAmB;IACvD,MAAM,EAAE,GAAG,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAC;IACjC,OAAO,IAAA,cAAK,EAAC;QACZ,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,EAAE;KACV,CAAC,CAAC;AACJ,CAAC"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { TaskEither } from 'fp-ts/lib/TaskEither';
|
2
|
+
export type PostgresColumnSchema = {
|
3
|
+
oid: number;
|
4
|
+
table_schema: string;
|
5
|
+
table_name: string;
|
6
|
+
column_name: string;
|
7
|
+
is_nullable: boolean;
|
8
|
+
};
|
9
|
+
export type DescribeQueryColumn = {
|
10
|
+
name: string;
|
11
|
+
tableId: number;
|
12
|
+
typeId: number;
|
13
|
+
};
|
14
|
+
export type PostgresDescribe = {
|
15
|
+
parameters: number[];
|
16
|
+
columns: DescribeQueryColumn[];
|
17
|
+
};
|
18
|
+
export type DescribeQueryResult = PostgresDescribe & {
|
19
|
+
multipleRowsResult: boolean;
|
20
|
+
};
|
21
|
+
export type PostgresType = {
|
22
|
+
[key: number]: string;
|
23
|
+
};
|
24
|
+
export type Driver<Connection> = {
|
25
|
+
loadDbSchema: (conn: Connection) => TaskEither<string, PostgresColumnSchema[]>;
|
26
|
+
};
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/drivers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAEf,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAC/B,CAAA;AACD,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG;IACpD,kBAAkB,EAAE,OAAO,CAAC;CAC5B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAEpD,MAAM,MAAM,MAAM,CAAC,UAAU,IAAI;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;CAC/E,CAAA"}
|
package/drivers/types.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/drivers/types.ts"],"names":[],"mappings":""}
|
package/mysql-mapping.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import type { SQLiteType } from './sqlite-query-analyzer/types';
|
1
|
+
import type { PostgresType, SQLiteType } from './sqlite-query-analyzer/types';
|
2
2
|
export declare enum FlagEnum {
|
3
3
|
NOT_NULL = 1,
|
4
4
|
PRI_KEY = 2,
|
@@ -6,8 +6,8 @@ export declare enum FlagEnum {
|
|
6
6
|
ENUM_FLAG = 256,
|
7
7
|
SET_FLAG = 2048
|
8
8
|
}
|
9
|
-
export type InferType = MySqlType | SQLiteType | '?' | 'number' | 'any';
|
10
|
-
export type DbType = MySqlType | SQLiteType;
|
9
|
+
export type InferType = MySqlType | SQLiteType | PostgresType | '?' | 'number' | 'any';
|
10
|
+
export type DbType = MySqlType | SQLiteType | PostgresType;
|
11
11
|
export type MySqlType = 'decimal' | 'decimal[]' | 'tinyint' | 'tinyint[]' | 'smallint' | 'smallint[]' | 'int' | 'int[]' | 'float' | 'float[]' | 'double' | 'double[]' | 'null' | 'timestamp' | 'bigint' | 'bigint[]' | 'mediumint' | 'mediumint[]' | 'date' | 'time' | 'datetime' | 'year' | 'year[]' | 'newdate' | 'varchar' | 'varchar[]' | 'bit' | 'bit[]' | 'timestamp2' | 'datetime2' | 'time2' | 'json' | `enum(${string})` | 'set' | 'tinyblob' | 'mediumblob' | 'longblob' | 'blob' | 'tinytext' | 'mediumtext' | 'longtext' | 'text' | 'varbinary' | 'binary' | 'char' | 'char[]' | 'geometry';
|
12
12
|
export type TsType = 'string' | 'string[]' | 'number' | 'number[]' | 'boolean' | 'boolean[]' | 'Date' | 'Date[]' | 'Object' | 'Object[]' | 'Uint8Array' | 'ArrayBuffer' | 'any' | 'null';
|
13
13
|
export declare function converToTsType(mySqlType: MySqlType | 'any'): TsType;
|
package/mysql-mapping.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mysql-mapping.d.ts","sourceRoot":"","sources":["../../src/mysql-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
1
|
+
{"version":3,"file":"mysql-mapping.d.ts","sourceRoot":"","sources":["../../src/mysql-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE9E,oBAAY,QAAQ;IACnB,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,WAAW,MAAM;IACjB,SAAS,MAAM;IACf,QAAQ,OAAO;CACf;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,GAAG,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvF,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAE3D,MAAM,MAAM,SAAS,GAClB,SAAS,GACT,WAAW,GACX,SAAS,GACT,WAAW,GACX,UAAU,GACV,YAAY,GACZ,KAAK,GACL,OAAO,GACP,OAAO,GACP,SAAS,GACT,QAAQ,GACR,UAAU,GACV,MAAM,GACN,WAAW,GACX,QAAQ,GACR,UAAU,GACV,WAAW,GACX,aAAa,GACb,MAAM,GACN,MAAM,GACN,UAAU,GACV,MAAM,GACN,QAAQ,GACR,SAAS,GACT,SAAS,GACT,WAAW,GACX,KAAK,GACL,OAAO,GACP,YAAY,GACZ,WAAW,GACX,OAAO,GACP,MAAM,GACN,QAAQ,MAAM,GAAG,GACjB,KAAK,GACL,UAAU,GACV,YAAY,GACZ,UAAU,GACV,MAAM,GACN,UAAU,GACV,YAAY,GACZ,UAAU,GACV,MAAM,GACN,WAAW,GACX,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,UAAU,CAAC;AAEd,MAAM,MAAM,MAAM,GACf,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,UAAU,GACV,SAAS,GACT,WAAW,GACX,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,aAAa,GACb,KAAK,GACL,MAAM,CAAC;AAEV,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,CAsEnE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,WAEtD;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CA4BtH;AAED,KAAK,aAAa,GAAG;IACpB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,aAgC1B,CAAC"}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import type { SimpleExprFunctionContext, ExprContext, InsertStatementContext, DeleteStatementContext } from '@wsporto/
|
1
|
+
import type { SimpleExprFunctionContext, ExprContext, InsertStatementContext, DeleteStatementContext } from '@wsporto/typesql-parser/mysql/MySQLParser';
|
2
2
|
import type { ColumnSchema, ColumnDef, TypeVar, Type, Constraint, SubstitutionHash, TypeAndNullInfer } from './types';
|
3
3
|
import type { InferType } from '../mysql-mapping';
|
4
|
-
import
|
4
|
+
import { TerminalNode } from '@wsporto/typesql-parser';
|
5
5
|
export declare function freshVar(name: string, typeVar: InferType, table?: string, list?: true): TypeVar;
|
6
6
|
export declare function createColumnType(col: ColumnDef): TypeVar;
|
7
7
|
export declare function createColumnTypeFomColumnSchema(col: ColumnSchema): TypeVar;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"collect-constraints.d.ts","sourceRoot":"","sources":["../../../src/mysql-query-analyzer/collect-constraints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"collect-constraints.d.ts","sourceRoot":"","sources":["../../../src/mysql-query-analyzer/collect-constraints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAExJ,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtH,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAY/F;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,WAS9C;AAED,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,YAAY,WAShE;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,YAAY,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,sBAAsB,UAGzE;AAED,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,sBAAsB,EAAE,WAAW,EAAE,SAAS,EAAE,eAuBjG;AAED,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,sBAAsB,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,CAoB/G;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAMvG;AAED,wBAAgB,UAAU,CAAC,aAAa,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,GAAG,SAAS,CAoBpF;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,QAWjD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,WAE5C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,WAEhD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,WAE5C;AAED,wBAAgB,eAAe,CAAC,kBAAkB,EAAE,yBAAyB,UAK5E;AAED,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,OAAO,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,iBAAiB,CAAC"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { QuerySpecificationContext, type ExprContext } from '@wsporto/
|
1
|
+
import { QuerySpecificationContext, type ExprContext } from '@wsporto/typesql-parser/mysql/MySQLParser';
|
2
2
|
import type { ColumnSchema, FieldName, ColumnDef } from './types';
|
3
3
|
export declare function parseAndInferNotNull(sql: string, dbSchema: ColumnSchema[]): (boolean | undefined)[];
|
4
4
|
export declare function inferNotNull(querySpec: QuerySpecificationContext, dbSchema: ColumnSchema[], fromColumns: ColumnDef[]): boolean[];
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"infer-column-nullability.d.ts","sourceRoot":"","sources":["../../../src/mysql-query-analyzer/infer-column-nullability.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,yBAAyB,EAEzB,KAAK,WAAW,EA4BhB,MAAM,
|
1
|
+
{"version":3,"file":"infer-column-nullability.d.ts","sourceRoot":"","sources":["../../../src/mysql-query-analyzer/infer-column-nullability.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,yBAAyB,EAEzB,KAAK,WAAW,EA4BhB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AASlE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,2BAQzE;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,aAiBpH;AAgSD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAuDhF"}
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseAndInferNotNull = parseAndInferNotNull;
|
4
4
|
exports.inferNotNull = inferNotNull;
|
5
5
|
exports.possibleNull = possibleNull;
|
6
|
-
const
|
6
|
+
const MySQLParser_1 = require("@wsporto/typesql-parser/mysql/MySQLParser");
|
7
7
|
const select_columns_1 = require("./select-columns");
|
8
8
|
const infer_param_nullability_1 = require("./infer-param-nullability");
|
9
9
|
const traverse_1 = require("./traverse");
|
@@ -12,7 +12,7 @@ const describe_query_1 = require("../describe-query");
|
|
12
12
|
//TODO - COLUMN SCHEMA DEFAULT = []
|
13
13
|
//utility for tests
|
14
14
|
function parseAndInferNotNull(sql, dbSchema) {
|
15
|
-
const { sql: processedSql, namedParameters } = (0, describe_query_1.preprocessSql)(sql);
|
15
|
+
const { sql: processedSql, namedParameters } = (0, describe_query_1.preprocessSql)(sql, 'mysql');
|
16
16
|
const tree = (0, parse_1.parse)(processedSql);
|
17
17
|
const result = (0, traverse_1.traverseQueryContext)(tree, dbSchema, namedParameters);
|
18
18
|
if (result.type === 'Select') {
|
@@ -59,7 +59,7 @@ function inferNotNullSelectItem(selectItem, dbSchema, fromColumns, whereClause)
|
|
59
59
|
throw Error('Error during column null inference');
|
60
60
|
}
|
61
61
|
function inferNotNullExpr(expr, dbSchema, fromColumns) {
|
62
|
-
if (expr instanceof
|
62
|
+
if (expr instanceof MySQLParser_1.ExprIsContext) {
|
63
63
|
return inferNotNullExprIs(expr, dbSchema, fromColumns);
|
64
64
|
}
|
65
65
|
throw Error('Error during column null inference');
|
@@ -69,18 +69,18 @@ function inferNotNullExprIs(exprIs, dbSchema, fromColumns) {
|
|
69
69
|
return inferNotNullBoolPri(boolPri, dbSchema, fromColumns);
|
70
70
|
}
|
71
71
|
function inferNotNullBoolPri(boolPri, dbSchema, fromColumns) {
|
72
|
-
if (boolPri instanceof
|
72
|
+
if (boolPri instanceof MySQLParser_1.PrimaryExprPredicateContext) {
|
73
73
|
const predicate = boolPri.predicate();
|
74
74
|
return inferNotNullPredicate(predicate, dbSchema, fromColumns);
|
75
75
|
}
|
76
|
-
if (boolPri instanceof
|
76
|
+
if (boolPri instanceof MySQLParser_1.PrimaryExprCompareContext) {
|
77
77
|
const compareLeft = boolPri.boolPri();
|
78
78
|
const compareRight = boolPri.predicate();
|
79
79
|
const notNullLeft = inferNotNullBoolPri(compareLeft, dbSchema, fromColumns);
|
80
80
|
const notNullRight = inferNotNullPredicate(compareRight, dbSchema, fromColumns);
|
81
81
|
return notNullLeft && notNullRight;
|
82
82
|
}
|
83
|
-
if (boolPri instanceof
|
83
|
+
if (boolPri instanceof MySQLParser_1.PrimaryExprIsNullContext) {
|
84
84
|
return true;
|
85
85
|
}
|
86
86
|
throw Error('Error during column null inference');
|
@@ -103,9 +103,9 @@ function inferNotNullBitExpr(bitExpr, dbSchema, fromColumns) {
|
|
103
103
|
}
|
104
104
|
function inferNotNullSimpleExpr(simpleExpr, dbSchema, fromColumns) {
|
105
105
|
var _a;
|
106
|
-
const querySpec = (0, infer_param_nullability_1.getParentContext)(simpleExpr,
|
106
|
+
const querySpec = (0, infer_param_nullability_1.getParentContext)(simpleExpr, MySQLParser_1.QuerySpecificationContext);
|
107
107
|
const whereClause = querySpec.whereClause();
|
108
|
-
if (simpleExpr instanceof
|
108
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprColumnRefContext) {
|
109
109
|
const columnName = simpleExpr.columnRef().fieldIdentifier().getText();
|
110
110
|
const fieldName = (0, select_columns_1.splitName)(columnName);
|
111
111
|
const column = (0, select_columns_1.findColumn)(fieldName, fromColumns);
|
@@ -117,25 +117,25 @@ function inferNotNullSimpleExpr(simpleExpr, dbSchema, fromColumns) {
|
|
117
117
|
}
|
118
118
|
return false;
|
119
119
|
}
|
120
|
-
if (simpleExpr instanceof
|
120
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprRuntimeFunctionContext) {
|
121
121
|
return inferNotNullRuntimeFunctionCall(simpleExpr, dbSchema, fromColumns);
|
122
122
|
}
|
123
|
-
if (simpleExpr instanceof
|
123
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprFunctionContext) {
|
124
124
|
const functionCall = simpleExpr.functionCall();
|
125
125
|
return inferNotNullFunctionCall(functionCall, dbSchema, fromColumns);
|
126
126
|
}
|
127
|
-
if (simpleExpr instanceof
|
127
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprLiteralContext) {
|
128
128
|
const nullLiteral = simpleExpr.literal().nullLiteral();
|
129
129
|
if (nullLiteral) {
|
130
130
|
return false;
|
131
131
|
}
|
132
132
|
return true;
|
133
133
|
}
|
134
|
-
if (simpleExpr instanceof
|
134
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprParamMarkerContext) {
|
135
135
|
const inferParam = (0, infer_param_nullability_1.inferParameterNotNull)(simpleExpr);
|
136
136
|
return inferParam;
|
137
137
|
}
|
138
|
-
if (simpleExpr instanceof
|
138
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprSumContext) {
|
139
139
|
const sumExpr = simpleExpr.sumExpr();
|
140
140
|
if (sumExpr.COUNT_SYMBOL()) {
|
141
141
|
return true;
|
@@ -153,17 +153,17 @@ function inferNotNullSimpleExpr(simpleExpr, dbSchema, fromColumns) {
|
|
153
153
|
return false;
|
154
154
|
}
|
155
155
|
}
|
156
|
-
if (simpleExpr instanceof
|
156
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprListContext) {
|
157
157
|
const exprList = simpleExpr.exprList().expr_list();
|
158
158
|
return exprList.every((expr) => inferNotNullExpr(expr, dbSchema, fromColumns));
|
159
159
|
}
|
160
|
-
if (simpleExpr instanceof
|
160
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprSubQueryContext) {
|
161
161
|
if (simpleExpr.EXISTS_SYMBOL()) {
|
162
162
|
return true;
|
163
163
|
}
|
164
164
|
return false;
|
165
165
|
}
|
166
|
-
if (simpleExpr instanceof
|
166
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprCaseContext) {
|
167
167
|
const thenExprList = simpleExpr.thenExpression_list();
|
168
168
|
const elseExpr = simpleExpr.elseExpression();
|
169
169
|
if (elseExpr) {
|
@@ -172,14 +172,14 @@ function inferNotNullSimpleExpr(simpleExpr, dbSchema, fromColumns) {
|
|
172
172
|
}
|
173
173
|
return false; //if doesn't have else, the not null can't be inferred
|
174
174
|
}
|
175
|
-
if (simpleExpr instanceof
|
175
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprIntervalContext) {
|
176
176
|
const exprList = simpleExpr.expr_list();
|
177
177
|
return exprList.every((expr) => inferNotNullExpr(expr, dbSchema, fromColumns));
|
178
178
|
}
|
179
|
-
if (simpleExpr instanceof
|
179
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprWindowingFunctionContext) {
|
180
180
|
return inferNotNullWindowFunctionCall(simpleExpr.windowFunctionCall(), dbSchema, fromColumns);
|
181
181
|
}
|
182
|
-
if (simpleExpr instanceof
|
182
|
+
if (simpleExpr instanceof MySQLParser_1.SimpleExprCastContext) {
|
183
183
|
const expr = simpleExpr.expr();
|
184
184
|
return inferNotNullExpr(expr, dbSchema, fromColumns);
|
185
185
|
}
|
@@ -291,26 +291,26 @@ function possibleNullWhere(field, whereClause) {
|
|
291
291
|
return possibleNull(field, expr);
|
292
292
|
}
|
293
293
|
function possibleNull(field, exprContext) {
|
294
|
-
if (exprContext instanceof
|
294
|
+
if (exprContext instanceof MySQLParser_1.ExprIsContext) {
|
295
295
|
const boolPri = exprContext.boolPri();
|
296
|
-
if (boolPri instanceof
|
296
|
+
if (boolPri instanceof MySQLParser_1.PrimaryExprPredicateContext) {
|
297
297
|
const res = boolPri.predicate().bitExpr(0).simpleExpr();
|
298
|
-
if (res instanceof
|
298
|
+
if (res instanceof MySQLParser_1.SimpleExprListContext) {
|
299
299
|
const expr = res.exprList().expr(0);
|
300
300
|
return possibleNull(field, expr);
|
301
301
|
}
|
302
|
-
if (res instanceof
|
302
|
+
if (res instanceof MySQLParser_1.SimpleExprSubQueryContext) {
|
303
303
|
//exists, not exists
|
304
304
|
return true; //possibleNull
|
305
305
|
}
|
306
306
|
}
|
307
|
-
if (boolPri instanceof
|
307
|
+
if (boolPri instanceof MySQLParser_1.PrimaryExprIsNullContext) {
|
308
308
|
const compare = boolPri.boolPri();
|
309
309
|
if (boolPri.notRule() && areEquals(field, compare.getText())) {
|
310
310
|
return false; //possibleNull
|
311
311
|
}
|
312
312
|
}
|
313
|
-
if (boolPri instanceof
|
313
|
+
if (boolPri instanceof MySQLParser_1.PrimaryExprCompareContext) {
|
314
314
|
const compare = boolPri.boolPri().getText(); //value > 10;
|
315
315
|
const compare2 = boolPri.predicate().getText(); //10 < value
|
316
316
|
//TODO - more complex expressions. ex. (value + value2) > 10;
|
@@ -320,11 +320,11 @@ function possibleNull(field, exprContext) {
|
|
320
320
|
}
|
321
321
|
return true; //possibleNull
|
322
322
|
}
|
323
|
-
if (exprContext instanceof
|
323
|
+
if (exprContext instanceof MySQLParser_1.ExprNotContext) {
|
324
324
|
const expr = exprContext.expr();
|
325
325
|
return possibleNull(field, expr);
|
326
326
|
}
|
327
|
-
if (exprContext instanceof
|
327
|
+
if (exprContext instanceof MySQLParser_1.ExprAndContext) {
|
328
328
|
const [first, ...rest] = exprContext.expr_list();
|
329
329
|
let possibleNullVar = possibleNull(field, first);
|
330
330
|
for (const expr of rest) {
|
@@ -332,10 +332,10 @@ function possibleNull(field, exprContext) {
|
|
332
332
|
}
|
333
333
|
return possibleNullVar;
|
334
334
|
}
|
335
|
-
if (exprContext instanceof
|
335
|
+
if (exprContext instanceof MySQLParser_1.ExprXorContext) {
|
336
336
|
const expressions = exprContext.expr_list();
|
337
337
|
}
|
338
|
-
if (exprContext instanceof
|
338
|
+
if (exprContext instanceof MySQLParser_1.ExprOrContext) {
|
339
339
|
const [first, ...rest] = exprContext.expr_list();
|
340
340
|
let possibleNullVar = possibleNull(field, first);
|
341
341
|
for (const expr of rest) {
|