@quillsql/node 0.6.3 → 0.6.5
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/dist/db/DatabaseHelper.js +3 -0
- package/dist/db/Mysql.js +68 -34
- package/dist/index.js +16 -4
- package/examples/mysql-node/app.ts +1 -2
- package/package.json +1 -1
- package/src/db/DatabaseHelper.ts +4 -0
- package/src/db/Mysql.ts +74 -34
- package/src/index.ts +20 -7
|
@@ -55,6 +55,9 @@ function withConnection(databaseType, connectionString, callback) {
|
|
|
55
55
|
try {
|
|
56
56
|
return yield callback(connection);
|
|
57
57
|
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
return new Promise((_, reject) => reject({ success: false, message: e.message || e.error || e }));
|
|
60
|
+
}
|
|
58
61
|
finally {
|
|
59
62
|
yield disconnectFromDatabase(databaseType, connection);
|
|
60
63
|
}
|
package/dist/db/Mysql.js
CHANGED
|
@@ -157,43 +157,77 @@ function getSchemaColumnInfoMysql(connection, schemaName, tableNames) {
|
|
|
157
157
|
exports.getSchemaColumnInfoMysql = getSchemaColumnInfoMysql;
|
|
158
158
|
function mysqlTextDataTypeToPostgresOID(type) {
|
|
159
159
|
switch (type) {
|
|
160
|
-
case "bigint": //
|
|
161
|
-
return
|
|
162
|
-
case "tinyint": //
|
|
163
|
-
return
|
|
164
|
-
case "
|
|
165
|
-
return
|
|
166
|
-
case "
|
|
167
|
-
return
|
|
168
|
-
case "
|
|
169
|
-
return
|
|
170
|
-
case "
|
|
171
|
-
return
|
|
172
|
-
case "
|
|
173
|
-
return
|
|
174
|
-
|
|
175
|
-
return
|
|
160
|
+
case "bigint": // BIGINT in MySQL
|
|
161
|
+
return 20; // BIGINT in PostgreSQL
|
|
162
|
+
case "tinyint": // TINYINT in MySQL
|
|
163
|
+
return 21; // SMALLINT in PostgreSQL
|
|
164
|
+
case "smallint": // SMALLINT in MySQL
|
|
165
|
+
return 21; // SMALLINT in PostgreSQL
|
|
166
|
+
case "int": // INT in MySQL
|
|
167
|
+
return 23; // INTEGER in PostgreSQL
|
|
168
|
+
case "float": // FLOAT in MySQL
|
|
169
|
+
return 701; // DOUBLE PRECISION in PostgreSQL
|
|
170
|
+
case "double": // DOUBLE in MySQL
|
|
171
|
+
return 701; // DOUBLE PRECISION in PostgreSQL
|
|
172
|
+
case "varchar": // VARCHAR in MySQL
|
|
173
|
+
return 1043; // VARCHAR in PostgreSQL
|
|
174
|
+
case "char": // CHAR in MySQL
|
|
175
|
+
return 1042; // CHAR in PostgreSQL
|
|
176
|
+
case "timestamp": // TIMESTAMP in MySQL
|
|
177
|
+
return 1114; // TIMESTAMP in PostgreSQL
|
|
178
|
+
case "date": // DATE in MySQL
|
|
179
|
+
return 1082; // DATE in PostgreSQL
|
|
180
|
+
case "datetime": // DATETIME in MySQL
|
|
181
|
+
return 1114; // TIMESTAMP in PostgreSQL
|
|
182
|
+
case "time": // TIME in MySQL
|
|
183
|
+
return 1083; // TIME in PostgreSQL
|
|
184
|
+
case "year": // YEAR in MySQL
|
|
185
|
+
return 23; // INTEGER in PostgreSQL
|
|
186
|
+
case "binary": // BINARY in MySQL
|
|
187
|
+
return 17; // BYTEA in PostgreSQL
|
|
188
|
+
case "blob": // BLOB in MySQL
|
|
189
|
+
return 17; // BYTEA in PostgreSQL
|
|
190
|
+
case "text": // TEXT in MySQL
|
|
191
|
+
return 25; // TEXT in PostgreSQL
|
|
192
|
+
case "json": // JSON in MySQL
|
|
193
|
+
return 114; // JSON in PostgreSQL
|
|
194
|
+
default:
|
|
195
|
+
return 1043; // VARCHAR in PostgreSQL (fallback)
|
|
176
196
|
}
|
|
177
197
|
}
|
|
178
198
|
function mysqlDataTypeIdToPostgresType(type) {
|
|
179
199
|
switch (type) {
|
|
180
|
-
case
|
|
181
|
-
|
|
182
|
-
case
|
|
183
|
-
|
|
184
|
-
case
|
|
185
|
-
|
|
186
|
-
case
|
|
187
|
-
return
|
|
188
|
-
case
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
case
|
|
193
|
-
return
|
|
194
|
-
case
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
200
|
+
case 0: // DECIMAL
|
|
201
|
+
case 1: // TINY
|
|
202
|
+
case 2: // SHORT
|
|
203
|
+
case 3: // LONG
|
|
204
|
+
case 8: // LONGLONG
|
|
205
|
+
case 9: // INT24
|
|
206
|
+
case 13: // YEAR
|
|
207
|
+
return 23; // INTEGER
|
|
208
|
+
case 4: // FLOAT
|
|
209
|
+
case 5: // DOUBLE
|
|
210
|
+
return 701; // DOUBLE PRECISION
|
|
211
|
+
case 7: // TIMESTAMP
|
|
212
|
+
case 12: // DATETIME
|
|
213
|
+
return 1114; // TIMESTAMP
|
|
214
|
+
case 10: // DATE
|
|
215
|
+
case 242: // NEWDATE
|
|
216
|
+
return 1082; // DATE
|
|
217
|
+
case 15: // VARCHAR
|
|
218
|
+
case 25: // VAR_STRING
|
|
219
|
+
case 250: // STRING
|
|
220
|
+
case 254: // ENUM
|
|
221
|
+
case 255: // SET
|
|
222
|
+
return 1043; // VARCHAR
|
|
223
|
+
case 16: // BIT
|
|
224
|
+
case 245: // TINY_BLOB
|
|
225
|
+
case 246: // MEDIUM_BLOB
|
|
226
|
+
case 247: // LONG_BLOB
|
|
227
|
+
case 248: // BLOB
|
|
228
|
+
case 251: // GEOMETRY
|
|
229
|
+
return 17; // BYTEA
|
|
230
|
+
default:
|
|
231
|
+
return 1043; // Default to VARCHAR if unknown
|
|
198
232
|
}
|
|
199
233
|
}
|
package/dist/index.js
CHANGED
|
@@ -41,7 +41,7 @@ class Quill {
|
|
|
41
41
|
this.targetConnection = new CachedConnection_1.CachedConnection(databaseType, credentials, cache || {});
|
|
42
42
|
}
|
|
43
43
|
query({ orgId, metadata, }) {
|
|
44
|
-
var _a, _b
|
|
44
|
+
var _a, _b;
|
|
45
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
46
|
this.targetConnection.orgId = orgId;
|
|
47
47
|
let responseMetadata = {};
|
|
@@ -97,9 +97,16 @@ class Quill {
|
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
99
|
catch (err) {
|
|
100
|
+
if (metadata.task === "update-view") {
|
|
101
|
+
this.postQuill("set-broken-view", {
|
|
102
|
+
table: metadata.name,
|
|
103
|
+
clientId: metadata.clientId,
|
|
104
|
+
error: err.message,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
100
107
|
return {
|
|
101
108
|
status: "error",
|
|
102
|
-
error:
|
|
109
|
+
error: err.message,
|
|
103
110
|
data: responseMetadata || {},
|
|
104
111
|
};
|
|
105
112
|
}
|
|
@@ -216,8 +223,13 @@ class Quill {
|
|
|
216
223
|
}
|
|
217
224
|
postQuill(path, payload) {
|
|
218
225
|
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
-
|
|
220
|
-
|
|
226
|
+
try {
|
|
227
|
+
const response = yield axios_1.default.post(`${this.baseUrl}/sdk/${path}`, payload, this.config);
|
|
228
|
+
return response.data;
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
return new Promise((_, reject) => { var _a, _b; return reject({ message: ((_b = (_a = e === null || e === void 0 ? void 0 : e.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.error) || e.message || e }); });
|
|
232
|
+
}
|
|
221
233
|
});
|
|
222
234
|
}
|
|
223
235
|
[Symbol.asyncDispose]() {
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import express from "express";
|
|
4
4
|
import cors from "cors";
|
|
5
|
-
import requireQuill from "../../src/index";
|
|
6
5
|
|
|
7
6
|
const app = express();
|
|
8
7
|
const port = 3005;
|
|
@@ -41,7 +40,7 @@ app.get("/", (req, res) => {
|
|
|
41
40
|
res.send("Hello World!");
|
|
42
41
|
});
|
|
43
42
|
|
|
44
|
-
const quill =
|
|
43
|
+
const quill = require("../../src/index")({
|
|
45
44
|
privateKey: process.env.MYSQL_PRIVATE_KEY ?? "",
|
|
46
45
|
databaseConnectionString: process.env.MYSQL_DB_URL ?? "",
|
|
47
46
|
databaseConfig: {}, // TODO: Add database config
|
package/package.json
CHANGED
package/src/db/DatabaseHelper.ts
CHANGED
|
@@ -119,6 +119,10 @@ export async function withConnection<T>(
|
|
|
119
119
|
const connection = connectToDatabase(databaseType, config);
|
|
120
120
|
try {
|
|
121
121
|
return await callback(connection);
|
|
122
|
+
} catch (e: any) {
|
|
123
|
+
return new Promise((_, reject) =>
|
|
124
|
+
reject({ success: false, message: e.message || e.error || e }),
|
|
125
|
+
);
|
|
122
126
|
} finally {
|
|
123
127
|
await disconnectFromDatabase(databaseType, connection);
|
|
124
128
|
}
|
package/src/db/Mysql.ts
CHANGED
|
@@ -179,44 +179,84 @@ export async function getSchemaColumnInfoMysql(
|
|
|
179
179
|
|
|
180
180
|
function mysqlTextDataTypeToPostgresOID(type: string): number {
|
|
181
181
|
switch (type) {
|
|
182
|
-
case "bigint": //
|
|
183
|
-
return
|
|
184
|
-
case "tinyint": //
|
|
185
|
-
return
|
|
186
|
-
case "
|
|
187
|
-
return
|
|
188
|
-
case "
|
|
189
|
-
return
|
|
190
|
-
case "
|
|
191
|
-
return
|
|
192
|
-
case "
|
|
193
|
-
return
|
|
194
|
-
case "
|
|
195
|
-
return
|
|
196
|
-
|
|
197
|
-
return
|
|
182
|
+
case "bigint": // BIGINT in MySQL
|
|
183
|
+
return 20; // BIGINT in PostgreSQL
|
|
184
|
+
case "tinyint": // TINYINT in MySQL
|
|
185
|
+
return 21; // SMALLINT in PostgreSQL
|
|
186
|
+
case "smallint": // SMALLINT in MySQL
|
|
187
|
+
return 21; // SMALLINT in PostgreSQL
|
|
188
|
+
case "int": // INT in MySQL
|
|
189
|
+
return 23; // INTEGER in PostgreSQL
|
|
190
|
+
case "float": // FLOAT in MySQL
|
|
191
|
+
return 701; // DOUBLE PRECISION in PostgreSQL
|
|
192
|
+
case "double": // DOUBLE in MySQL
|
|
193
|
+
return 701; // DOUBLE PRECISION in PostgreSQL
|
|
194
|
+
case "varchar": // VARCHAR in MySQL
|
|
195
|
+
return 1043; // VARCHAR in PostgreSQL
|
|
196
|
+
case "char": // CHAR in MySQL
|
|
197
|
+
return 1042; // CHAR in PostgreSQL
|
|
198
|
+
case "timestamp": // TIMESTAMP in MySQL
|
|
199
|
+
return 1114; // TIMESTAMP in PostgreSQL
|
|
200
|
+
case "date": // DATE in MySQL
|
|
201
|
+
return 1082; // DATE in PostgreSQL
|
|
202
|
+
case "datetime": // DATETIME in MySQL
|
|
203
|
+
return 1114; // TIMESTAMP in PostgreSQL
|
|
204
|
+
case "time": // TIME in MySQL
|
|
205
|
+
return 1083; // TIME in PostgreSQL
|
|
206
|
+
case "year": // YEAR in MySQL
|
|
207
|
+
return 23; // INTEGER in PostgreSQL
|
|
208
|
+
case "binary": // BINARY in MySQL
|
|
209
|
+
return 17; // BYTEA in PostgreSQL
|
|
210
|
+
case "blob": // BLOB in MySQL
|
|
211
|
+
return 17; // BYTEA in PostgreSQL
|
|
212
|
+
case "text": // TEXT in MySQL
|
|
213
|
+
return 25; // TEXT in PostgreSQL
|
|
214
|
+
case "json": // JSON in MySQL
|
|
215
|
+
return 114; // JSON in PostgreSQL
|
|
216
|
+
default:
|
|
217
|
+
return 1043; // VARCHAR in PostgreSQL (fallback)
|
|
198
218
|
}
|
|
199
219
|
}
|
|
200
220
|
|
|
201
221
|
function mysqlDataTypeIdToPostgresType(type: number): number {
|
|
202
222
|
switch (type) {
|
|
203
|
-
case
|
|
204
|
-
|
|
205
|
-
case
|
|
206
|
-
|
|
207
|
-
case
|
|
208
|
-
|
|
209
|
-
case
|
|
210
|
-
return
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
case
|
|
214
|
-
return
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
case 12: //
|
|
218
|
-
return
|
|
219
|
-
|
|
220
|
-
|
|
223
|
+
case 0: // DECIMAL
|
|
224
|
+
case 1: // TINY
|
|
225
|
+
case 2: // SHORT
|
|
226
|
+
case 3: // LONG
|
|
227
|
+
case 8: // LONGLONG
|
|
228
|
+
case 9: // INT24
|
|
229
|
+
case 13: // YEAR
|
|
230
|
+
return 23; // INTEGER
|
|
231
|
+
|
|
232
|
+
case 4: // FLOAT
|
|
233
|
+
case 5: // DOUBLE
|
|
234
|
+
return 701; // DOUBLE PRECISION
|
|
235
|
+
|
|
236
|
+
case 7: // TIMESTAMP
|
|
237
|
+
case 12: // DATETIME
|
|
238
|
+
return 1114; // TIMESTAMP
|
|
239
|
+
|
|
240
|
+
case 10: // DATE
|
|
241
|
+
case 242: // NEWDATE
|
|
242
|
+
return 1082; // DATE
|
|
243
|
+
|
|
244
|
+
case 15: // VARCHAR
|
|
245
|
+
case 25: // VAR_STRING
|
|
246
|
+
case 250: // STRING
|
|
247
|
+
case 254: // ENUM
|
|
248
|
+
case 255: // SET
|
|
249
|
+
return 1043; // VARCHAR
|
|
250
|
+
|
|
251
|
+
case 16: // BIT
|
|
252
|
+
case 245: // TINY_BLOB
|
|
253
|
+
case 246: // MEDIUM_BLOB
|
|
254
|
+
case 247: // LONG_BLOB
|
|
255
|
+
case 248: // BLOB
|
|
256
|
+
case 251: // GEOMETRY
|
|
257
|
+
return 17; // BYTEA
|
|
258
|
+
|
|
259
|
+
default:
|
|
260
|
+
return 1043; // Default to VARCHAR if unknown
|
|
221
261
|
}
|
|
222
262
|
}
|
package/src/index.ts
CHANGED
|
@@ -161,9 +161,16 @@ export class Quill implements AsyncDisposable {
|
|
|
161
161
|
status: "success",
|
|
162
162
|
};
|
|
163
163
|
} catch (err) {
|
|
164
|
+
if (metadata.task === "update-view") {
|
|
165
|
+
this.postQuill("set-broken-view", {
|
|
166
|
+
table: metadata.name,
|
|
167
|
+
clientId: metadata.clientId,
|
|
168
|
+
error: (err as any).message,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
164
171
|
return {
|
|
165
172
|
status: "error",
|
|
166
|
-
error: (err as any).
|
|
173
|
+
error: (err as any).message,
|
|
167
174
|
data: responseMetadata || {},
|
|
168
175
|
};
|
|
169
176
|
}
|
|
@@ -316,12 +323,18 @@ export class Quill implements AsyncDisposable {
|
|
|
316
323
|
path: string,
|
|
317
324
|
payload: any,
|
|
318
325
|
): Promise<QuillClientResponse> {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
326
|
+
try {
|
|
327
|
+
const response = await axios.post(
|
|
328
|
+
`${this.baseUrl}/sdk/${path}`,
|
|
329
|
+
payload,
|
|
330
|
+
this.config,
|
|
331
|
+
);
|
|
332
|
+
return response.data;
|
|
333
|
+
} catch (e: any) {
|
|
334
|
+
return new Promise((_, reject) =>
|
|
335
|
+
reject({ message: e?.response?.data?.error || e.message || e }),
|
|
336
|
+
);
|
|
337
|
+
}
|
|
325
338
|
}
|
|
326
339
|
|
|
327
340
|
public async [Symbol.asyncDispose](): Promise<void> {
|