data-api-client 2.0.0 → 2.1.0
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/README.md +240 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +20 -10
- package/dist/compat/errors.d.ts +28 -0
- package/dist/compat/errors.d.ts.map +1 -0
- package/dist/compat/errors.js +163 -0
- package/dist/compat/index.d.ts +7 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/index.js +12 -0
- package/dist/compat/mysql2.d.ts +86 -0
- package/dist/compat/mysql2.d.ts.map +1 -0
- package/dist/compat/mysql2.js +350 -0
- package/dist/compat/pg.d.ts +142 -0
- package/dist/compat/pg.d.ts.map +1 -0
- package/dist/compat/pg.js +344 -0
- package/dist/params.d.ts +1 -1
- package/dist/params.d.ts.map +1 -1
- package/dist/params.js +2 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -2
- package/dist/retry.d.ts +11 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +76 -0
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +5 -3
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -3
- package/package.json +46 -4
|
@@ -0,0 +1,344 @@
|
|
|
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.createPgClient = createPgClient;
|
|
7
|
+
exports.createPgPool = createPgPool;
|
|
8
|
+
const events_1 = require("events");
|
|
9
|
+
const pg_escape_1 = __importDefault(require("pg-escape"));
|
|
10
|
+
const client_1 = require("../client");
|
|
11
|
+
const errors_1 = require("./errors");
|
|
12
|
+
function convertPgPlaceholders(sql, params = []) {
|
|
13
|
+
const namedParams = {};
|
|
14
|
+
const convertedSql = sql.replace(/\$(\d+)/g, (match, index) => {
|
|
15
|
+
const paramIndex = parseInt(index, 10) - 1;
|
|
16
|
+
if (paramIndex >= 0 && paramIndex < params.length) {
|
|
17
|
+
const key = `p${index}`;
|
|
18
|
+
namedParams[key] = params[paramIndex];
|
|
19
|
+
return `:${key}`;
|
|
20
|
+
}
|
|
21
|
+
return match;
|
|
22
|
+
});
|
|
23
|
+
return { sql: convertedSql, params: namedParams };
|
|
24
|
+
}
|
|
25
|
+
function inferCommand(sql) {
|
|
26
|
+
var _a;
|
|
27
|
+
const match = (_a = sql.trim().split(/\s+/)[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase();
|
|
28
|
+
const knownCommands = ['SELECT', 'INSERT', 'UPDATE', 'DELETE', 'CREATE', 'DROP', 'ALTER', 'TRUNCATE', 'GRANT', 'REVOKE'];
|
|
29
|
+
return knownCommands.includes(match) ? match : 'QUERY';
|
|
30
|
+
}
|
|
31
|
+
function convertToPgResult(result, sql, rowMode) {
|
|
32
|
+
if (result.records && Array.isArray(result.records)) {
|
|
33
|
+
let rows = result.records;
|
|
34
|
+
const fields = rows.length > 0 && typeof rows[0] === 'object' && rows[0] !== null
|
|
35
|
+
? Object.keys(rows[0]).map((name) => ({ name }))
|
|
36
|
+
: [];
|
|
37
|
+
if (rowMode === 'array' && rows.length > 0 && typeof rows[0] === 'object') {
|
|
38
|
+
rows = rows.map((row) => Object.values(row));
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
rows,
|
|
42
|
+
rowCount: rows.length,
|
|
43
|
+
command: inferCommand(sql),
|
|
44
|
+
fields,
|
|
45
|
+
oid: 0
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else if (result.numberOfRecordsUpdated !== undefined) {
|
|
49
|
+
return {
|
|
50
|
+
rows: [],
|
|
51
|
+
rowCount: result.numberOfRecordsUpdated,
|
|
52
|
+
command: inferCommand(sql),
|
|
53
|
+
fields: [],
|
|
54
|
+
oid: 0
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
else if (result.insertId !== undefined) {
|
|
58
|
+
return {
|
|
59
|
+
rows: [],
|
|
60
|
+
rowCount: 1,
|
|
61
|
+
command: 'INSERT',
|
|
62
|
+
fields: [],
|
|
63
|
+
oid: 0
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return {
|
|
68
|
+
rows: [],
|
|
69
|
+
rowCount: 0,
|
|
70
|
+
command: inferCommand(sql),
|
|
71
|
+
fields: [],
|
|
72
|
+
oid: 0
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function createPgClient(config) {
|
|
77
|
+
const pgConfig = {
|
|
78
|
+
...config,
|
|
79
|
+
engine: 'pg',
|
|
80
|
+
hydrateColumnNames: true
|
|
81
|
+
};
|
|
82
|
+
const core = (0, client_1.init)(pgConfig);
|
|
83
|
+
const eventEmitter = new events_1.EventEmitter();
|
|
84
|
+
let transactionId;
|
|
85
|
+
async function executeQuery(sqlOrConfig, params) {
|
|
86
|
+
let sql;
|
|
87
|
+
let values = [];
|
|
88
|
+
let rowMode;
|
|
89
|
+
if (typeof sqlOrConfig === 'string') {
|
|
90
|
+
sql = sqlOrConfig;
|
|
91
|
+
values = params || [];
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
sql = sqlOrConfig.text;
|
|
95
|
+
values = params !== undefined ? params : (sqlOrConfig.values || []);
|
|
96
|
+
rowMode = sqlOrConfig.rowMode;
|
|
97
|
+
}
|
|
98
|
+
const upperSql = sql.trim().toUpperCase();
|
|
99
|
+
if (upperSql === 'BEGIN' || upperSql.startsWith('BEGIN ')) {
|
|
100
|
+
const txResult = await core.beginTransaction();
|
|
101
|
+
transactionId = txResult.transactionId;
|
|
102
|
+
return {
|
|
103
|
+
rows: [],
|
|
104
|
+
rowCount: 0,
|
|
105
|
+
command: 'BEGIN',
|
|
106
|
+
fields: []
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (upperSql === 'COMMIT') {
|
|
110
|
+
if (transactionId) {
|
|
111
|
+
await core.commitTransaction({ transactionId });
|
|
112
|
+
transactionId = undefined;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
rows: [],
|
|
116
|
+
rowCount: 0,
|
|
117
|
+
command: 'COMMIT',
|
|
118
|
+
fields: []
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (upperSql === 'ROLLBACK') {
|
|
122
|
+
if (transactionId) {
|
|
123
|
+
await core.rollbackTransaction({ transactionId });
|
|
124
|
+
transactionId = undefined;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
rows: [],
|
|
128
|
+
rowCount: 0,
|
|
129
|
+
command: 'ROLLBACK',
|
|
130
|
+
fields: []
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const { sql: convertedSql, params: namedParams } = convertPgPlaceholders(sql, values);
|
|
134
|
+
const queryOptions = {
|
|
135
|
+
sql: convertedSql,
|
|
136
|
+
parameters: namedParams
|
|
137
|
+
};
|
|
138
|
+
if (transactionId) {
|
|
139
|
+
queryOptions.transactionId = transactionId;
|
|
140
|
+
}
|
|
141
|
+
const result = await core.query(queryOptions);
|
|
142
|
+
return convertToPgResult(result, sql, rowMode);
|
|
143
|
+
}
|
|
144
|
+
const client = Object.assign(eventEmitter, {
|
|
145
|
+
connect(callback) {
|
|
146
|
+
if (callback) {
|
|
147
|
+
process.nextTick(() => callback(null));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
return Promise.resolve();
|
|
151
|
+
},
|
|
152
|
+
end(callback) {
|
|
153
|
+
if (callback) {
|
|
154
|
+
process.nextTick(() => callback());
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
return Promise.resolve();
|
|
158
|
+
},
|
|
159
|
+
copyFrom(_queryText) {
|
|
160
|
+
throw new Error('COPY FROM is not supported by RDS Data API');
|
|
161
|
+
},
|
|
162
|
+
copyTo(_queryText) {
|
|
163
|
+
throw new Error('COPY TO is not supported by RDS Data API');
|
|
164
|
+
},
|
|
165
|
+
pauseDrain() {
|
|
166
|
+
},
|
|
167
|
+
resumeDrain() {
|
|
168
|
+
},
|
|
169
|
+
escapeIdentifier(str) {
|
|
170
|
+
return pg_escape_1.default.ident(str);
|
|
171
|
+
},
|
|
172
|
+
escapeLiteral(str) {
|
|
173
|
+
return pg_escape_1.default.literal(str);
|
|
174
|
+
},
|
|
175
|
+
setTypeParser(_oid, _format, _parseFn) {
|
|
176
|
+
},
|
|
177
|
+
getTypeParser(_oid, _format) {
|
|
178
|
+
return (text) => text;
|
|
179
|
+
},
|
|
180
|
+
release(_err) {
|
|
181
|
+
},
|
|
182
|
+
query(sqlOrConfig, paramsOrCallback, callback) {
|
|
183
|
+
if (typeof sqlOrConfig === 'object' && 'submit' in sqlOrConfig) {
|
|
184
|
+
throw new Error('Query streams are not supported by RDS Data API');
|
|
185
|
+
}
|
|
186
|
+
let params = [];
|
|
187
|
+
let cb;
|
|
188
|
+
if (typeof sqlOrConfig === 'object' && 'text' in sqlOrConfig) {
|
|
189
|
+
if (typeof paramsOrCallback === 'function') {
|
|
190
|
+
cb = paramsOrCallback;
|
|
191
|
+
}
|
|
192
|
+
else if (Array.isArray(paramsOrCallback)) {
|
|
193
|
+
params = paramsOrCallback;
|
|
194
|
+
cb = callback;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
if (typeof paramsOrCallback === 'function') {
|
|
199
|
+
cb = paramsOrCallback;
|
|
200
|
+
}
|
|
201
|
+
else if (Array.isArray(paramsOrCallback)) {
|
|
202
|
+
params = paramsOrCallback;
|
|
203
|
+
cb = callback;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (cb) {
|
|
207
|
+
executeQuery(sqlOrConfig, params)
|
|
208
|
+
.then((result) => cb(null, result))
|
|
209
|
+
.catch((err) => {
|
|
210
|
+
const pgError = (0, errors_1.mapToPostgresError)(err);
|
|
211
|
+
client.emit('error', pgError);
|
|
212
|
+
cb(pgError, null);
|
|
213
|
+
});
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
return executeQuery(sqlOrConfig, params).catch((err) => {
|
|
217
|
+
const pgError = (0, errors_1.mapToPostgresError)(err);
|
|
218
|
+
client.emit('error', pgError);
|
|
219
|
+
throw pgError;
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
return client;
|
|
224
|
+
}
|
|
225
|
+
function createPgPool(config) {
|
|
226
|
+
const pgConfig = {
|
|
227
|
+
...config,
|
|
228
|
+
engine: 'pg',
|
|
229
|
+
hydrateColumnNames: true
|
|
230
|
+
};
|
|
231
|
+
const core = (0, client_1.init)(pgConfig);
|
|
232
|
+
const eventEmitter = new events_1.EventEmitter();
|
|
233
|
+
async function executePoolQuery(sqlOrConfig, params) {
|
|
234
|
+
let sql;
|
|
235
|
+
let values = [];
|
|
236
|
+
let rowMode;
|
|
237
|
+
if (typeof sqlOrConfig === 'string') {
|
|
238
|
+
sql = sqlOrConfig;
|
|
239
|
+
values = params || [];
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
sql = sqlOrConfig.text;
|
|
243
|
+
values = params !== undefined ? params : (sqlOrConfig.values || []);
|
|
244
|
+
rowMode = sqlOrConfig.rowMode;
|
|
245
|
+
}
|
|
246
|
+
const { sql: convertedSql, params: namedParams } = convertPgPlaceholders(sql, values);
|
|
247
|
+
const result = await core.query({
|
|
248
|
+
sql: convertedSql,
|
|
249
|
+
parameters: namedParams
|
|
250
|
+
});
|
|
251
|
+
return convertToPgResult(result, sql, rowMode);
|
|
252
|
+
}
|
|
253
|
+
const pool = Object.assign(eventEmitter, {
|
|
254
|
+
get totalCount() {
|
|
255
|
+
return 0;
|
|
256
|
+
},
|
|
257
|
+
get idleCount() {
|
|
258
|
+
return 0;
|
|
259
|
+
},
|
|
260
|
+
get waitingCount() {
|
|
261
|
+
return 0;
|
|
262
|
+
},
|
|
263
|
+
get expiredCount() {
|
|
264
|
+
return 0;
|
|
265
|
+
},
|
|
266
|
+
get ending() {
|
|
267
|
+
return false;
|
|
268
|
+
},
|
|
269
|
+
get ended() {
|
|
270
|
+
return false;
|
|
271
|
+
},
|
|
272
|
+
options: {},
|
|
273
|
+
connect(callback) {
|
|
274
|
+
const getClient = () => {
|
|
275
|
+
const client = createPgClient(config);
|
|
276
|
+
client.release = () => {
|
|
277
|
+
pool.emit('remove', client);
|
|
278
|
+
};
|
|
279
|
+
pool.emit('acquire', client);
|
|
280
|
+
pool.emit('connect', client);
|
|
281
|
+
return client;
|
|
282
|
+
};
|
|
283
|
+
if (callback) {
|
|
284
|
+
try {
|
|
285
|
+
const client = getClient();
|
|
286
|
+
process.nextTick(() => callback(null, client));
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
process.nextTick(() => callback(err));
|
|
290
|
+
}
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
return Promise.resolve(getClient());
|
|
294
|
+
},
|
|
295
|
+
end(callback) {
|
|
296
|
+
if (callback) {
|
|
297
|
+
process.nextTick(() => callback());
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
return Promise.resolve();
|
|
301
|
+
},
|
|
302
|
+
query(sqlOrConfig, paramsOrCallback, callback) {
|
|
303
|
+
if (typeof sqlOrConfig === 'object' && 'submit' in sqlOrConfig) {
|
|
304
|
+
throw new Error('Query streams are not supported by RDS Data API');
|
|
305
|
+
}
|
|
306
|
+
let params = [];
|
|
307
|
+
let cb;
|
|
308
|
+
if (typeof sqlOrConfig === 'object' && 'text' in sqlOrConfig) {
|
|
309
|
+
if (typeof paramsOrCallback === 'function') {
|
|
310
|
+
cb = paramsOrCallback;
|
|
311
|
+
}
|
|
312
|
+
else if (Array.isArray(paramsOrCallback)) {
|
|
313
|
+
params = paramsOrCallback;
|
|
314
|
+
cb = callback;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
if (typeof paramsOrCallback === 'function') {
|
|
319
|
+
cb = paramsOrCallback;
|
|
320
|
+
}
|
|
321
|
+
else if (Array.isArray(paramsOrCallback)) {
|
|
322
|
+
params = paramsOrCallback;
|
|
323
|
+
cb = callback;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (cb) {
|
|
327
|
+
executePoolQuery(sqlOrConfig, params)
|
|
328
|
+
.then((result) => cb(null, result))
|
|
329
|
+
.catch((err) => {
|
|
330
|
+
const pgError = (0, errors_1.mapToPostgresError)(err);
|
|
331
|
+
pool.emit('error', pgError);
|
|
332
|
+
cb(pgError, null);
|
|
333
|
+
});
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
return executePoolQuery(sqlOrConfig, params).catch((err) => {
|
|
337
|
+
const pgError = (0, errors_1.mapToPostgresError)(err);
|
|
338
|
+
pool.emit('error', pgError);
|
|
339
|
+
throw pgError;
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
return pool;
|
|
344
|
+
}
|
package/dist/params.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const processParams: (engine: string, sql: string, sqlParams: Rec
|
|
|
13
13
|
processedParams: (FormattedParameter | FormattedParameter[])[];
|
|
14
14
|
escapedSql: string;
|
|
15
15
|
};
|
|
16
|
-
export declare const formatParam: (n: string, v: ParameterValue, formatOptions: Required<FormatOptions
|
|
16
|
+
export declare const formatParam: (n: string, v: ParameterValue, formatOptions: Required<FormatOptions>, engine?: string) => FormattedParameter;
|
|
17
17
|
export declare const splitParams: (p: Record<string, ParameterValue>) => NamedParameter[];
|
|
18
18
|
export declare const formatType: (name: string, value: ParameterValue, type: SupportedType | null | undefined, typeHint: string | undefined, formatOptions: Required<FormatOptions>) => FormattedParameter;
|
|
19
19
|
//# sourceMappingURL=params.d.ts.map
|
package/dist/params.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../src/params.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,SAAS,CAAA;AAIhB,eAAO,MAAM,WAAW,GAAI,MAAM,GAAG,EAAE,KAAG,UAAU,EAa5C,CAAA;AAGR,eAAO,MAAM,aAAa,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,MAAM,GAAG,SAS9D,CAAA;AAGf,eAAO,MAAM,YAAY,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,OAKpC,CAAA;AAG/B,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,QAAQ,CAAC,aAAa,CAkBrE,CAAA;AAG1B,eAAO,MAAM,aAAa,GACxB,4BAA4B,cAAc,EAC1C,MAAM,GAAG,EAAE,KACV;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAK9D,CAAA;AAOD,eAAO,MAAM,eAAe,GAAI,QAAQ,UAAU,EAAE,KAAG,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC,EAavF,CAAA;AAGH,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,KAAK,MAAM,EACX,WAAW,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,QAAQ,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC,EAAE,EAC7C,eAAe,QAAQ,CAAC,aAAa,CAAC,EACtC,MAAK,MAAU,KACd;IAAE,eAAe,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAgCtF,CAAA;AAGD,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,eAAe,QAAQ,CAAC,aAAa,CAAC,KAAG,
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../src/params.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,aAAa,EACd,MAAM,SAAS,CAAA;AAIhB,eAAO,MAAM,WAAW,GAAI,MAAM,GAAG,EAAE,KAAG,UAAU,EAa5C,CAAA;AAGR,eAAO,MAAM,aAAa,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,MAAM,GAAG,SAS9D,CAAA;AAGf,eAAO,MAAM,YAAY,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,OAKpC,CAAA;AAG/B,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,EAAE,MAAM,GAAG,EAAE,KAAG,QAAQ,CAAC,aAAa,CAkBrE,CAAA;AAG1B,eAAO,MAAM,aAAa,GACxB,4BAA4B,cAAc,EAC1C,MAAM,GAAG,EAAE,KACV;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAK9D,CAAA;AAOD,eAAO,MAAM,eAAe,GAAI,QAAQ,UAAU,EAAE,KAAG,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC,EAavF,CAAA;AAGH,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,KAAK,MAAM,EACX,WAAW,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,QAAQ,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC,EAAE,EAC7C,eAAe,QAAQ,CAAC,aAAa,CAAC,EACtC,MAAK,MAAU,KACd;IAAE,eAAe,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAgCtF,CAAA;AAGD,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,eAAe,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,KAAG,kBAC/C,CAAA;AAGrE,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAG,cAAc,EACiB,CAAA;AAG/F,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,OAAO,cAAc,EACrB,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,EACtC,UAAU,MAAM,GAAG,SAAS,EAC5B,eAAe,QAAQ,CAAC,aAAa,CAAC,KACrC,kBAgBF,CAAA"}
|
package/dist/params.js
CHANGED
|
@@ -86,7 +86,7 @@ const processParams = (engine, sql, sqlParams, params, formatOptions, row = 0) =
|
|
|
86
86
|
const regex = new RegExp(':' + p.name + '\\b', 'g');
|
|
87
87
|
sql = sql.replace(regex, engine === 'pg' ? `:${p.name}::${p.cast}` : `CAST(:${p.name} AS ${p.cast})`);
|
|
88
88
|
}
|
|
89
|
-
acc.push((0, exports.formatParam)(p.name, p.value, formatOptions));
|
|
89
|
+
acc.push((0, exports.formatParam)(p.name, p.value, formatOptions, engine));
|
|
90
90
|
}
|
|
91
91
|
else if (row === 0) {
|
|
92
92
|
const regex = new RegExp('::' + p.name + '\\b', 'g');
|
|
@@ -105,7 +105,7 @@ const processParams = (engine, sql, sqlParams, params, formatOptions, row = 0) =
|
|
|
105
105
|
};
|
|
106
106
|
};
|
|
107
107
|
exports.processParams = processParams;
|
|
108
|
-
const formatParam = (n, v, formatOptions) => (0, exports.formatType)(n, v, (0, utils_1.getType)(v), (0, utils_1.getTypeHint)(v), formatOptions);
|
|
108
|
+
const formatParam = (n, v, formatOptions, engine) => (0, exports.formatType)(n, v, (0, utils_1.getType)(v), (0, utils_1.getTypeHint)(v, engine), formatOptions);
|
|
109
109
|
exports.formatParam = formatParam;
|
|
110
110
|
const splitParams = (p) => Object.keys(p).reduce((arr, x) => arr.concat({ name: x, value: p[x] }), []);
|
|
111
111
|
exports.splitParams = splitParams;
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAe1D,eAAO,MAAM,KAAK,GAChB,MAAM;IAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAA;CAAE,GAAG,SAAS,EAClE,QAAQ,cAAc,EACtB,GAAG,OAAO,GAAG,EAAE,KACd,OAAO,CAAC,WAAW,CAoErB,CAAA"}
|
package/dist/query.js
CHANGED
|
@@ -5,6 +5,7 @@ const client_rds_data_1 = require("@aws-sdk/client-rds-data");
|
|
|
5
5
|
const utils_1 = require("./utils");
|
|
6
6
|
const params_1 = require("./params");
|
|
7
7
|
const results_1 = require("./results");
|
|
8
|
+
const retry_1 = require("./retry");
|
|
8
9
|
const query = async function (config, ..._args) {
|
|
9
10
|
const args = Array.isArray(_args[0]) ? (0, utils_1.flatten)(_args) : _args;
|
|
10
11
|
const sql = (0, utils_1.parseSQL)(args);
|
|
@@ -22,9 +23,9 @@ const query = async function (config, ..._args) {
|
|
|
22
23
|
{ [isBatch ? 'parameterSets' : 'parameters']: processedParams }
|
|
23
24
|
: {}, hydrateColumnNames && !isBatch ? { includeResultMetadata: true } : {}, config.transactionId ? { transactionId: config.transactionId } : {});
|
|
24
25
|
try {
|
|
25
|
-
const result = await (isBatch
|
|
26
|
+
const result = await (0, retry_1.withRetry)(() => isBatch
|
|
26
27
|
? config.RDS.send(new client_rds_data_1.BatchExecuteStatementCommand(params))
|
|
27
|
-
: config.RDS.send(new client_rds_data_1.ExecuteStatementCommand(params)));
|
|
28
|
+
: config.RDS.send(new client_rds_data_1.ExecuteStatementCommand(params)), config.retryOptions);
|
|
28
29
|
return (0, results_1.formatResults)(result, hydrateColumnNames, args[0].includeResultMetadata === true, formatOptions);
|
|
29
30
|
}
|
|
30
31
|
catch (e) {
|
package/dist/retry.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface RetryConfig {
|
|
2
|
+
enabled?: boolean;
|
|
3
|
+
maxRetries?: number;
|
|
4
|
+
baseDelay?: number;
|
|
5
|
+
retryableErrors?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function isDatabaseResuming(error: any): boolean;
|
|
8
|
+
export declare function isConnectionError(error: any): boolean;
|
|
9
|
+
export declare function isRetryableError(error: any): boolean;
|
|
10
|
+
export declare function withRetry<T>(fn: () => Promise<T>, config?: RetryConfig): Promise<T>;
|
|
11
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAwBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAMtD;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAarD;AAKD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAEpD;AAUD,wBAAsB,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAoD7F"}
|
package/dist/retry.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDatabaseResuming = isDatabaseResuming;
|
|
4
|
+
exports.isConnectionError = isConnectionError;
|
|
5
|
+
exports.isRetryableError = isRetryableError;
|
|
6
|
+
exports.withRetry = withRetry;
|
|
7
|
+
const RESUMING_RETRY_DELAYS = [0, 2000, 5000, 10000, 15000, 20000, 25000, 30000, 35000, 40000];
|
|
8
|
+
const CONNECTION_RETRY_DELAYS = [0, 2000, 4000];
|
|
9
|
+
const CONNECTION_ERROR_PATTERNS = [
|
|
10
|
+
'Communications link failure',
|
|
11
|
+
'Connection is not available',
|
|
12
|
+
'currently unavailable',
|
|
13
|
+
'Database cluster is not available',
|
|
14
|
+
"Can't connect to",
|
|
15
|
+
'Connection timed out'
|
|
16
|
+
];
|
|
17
|
+
function isDatabaseResuming(error) {
|
|
18
|
+
if (!error)
|
|
19
|
+
return false;
|
|
20
|
+
const code = error.code || error.Code || error.name || '';
|
|
21
|
+
const message = error.message || error.Message || '';
|
|
22
|
+
return code === 'DatabaseResumingException' || message.includes('is resuming after being auto-paused');
|
|
23
|
+
}
|
|
24
|
+
function isConnectionError(error) {
|
|
25
|
+
if (!error)
|
|
26
|
+
return false;
|
|
27
|
+
const message = error.message || error.Message || '';
|
|
28
|
+
const code = error.code || error.Code || error.name || '';
|
|
29
|
+
if (code === 'BadRequestException' || code === 'StatementTimeoutException') {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return CONNECTION_ERROR_PATTERNS.some((pattern) => message.includes(pattern));
|
|
33
|
+
}
|
|
34
|
+
function isRetryableError(error) {
|
|
35
|
+
return isDatabaseResuming(error) || isConnectionError(error);
|
|
36
|
+
}
|
|
37
|
+
async function withRetry(fn, config = {}) {
|
|
38
|
+
const { enabled = true, maxRetries = 9, retryableErrors = [] } = config;
|
|
39
|
+
if (!enabled) {
|
|
40
|
+
return fn();
|
|
41
|
+
}
|
|
42
|
+
let attempt = 0;
|
|
43
|
+
let retryDelays = [];
|
|
44
|
+
let maxAttempts = 0;
|
|
45
|
+
while (true) {
|
|
46
|
+
try {
|
|
47
|
+
if (attempt > 0 && retryDelays.length > 0) {
|
|
48
|
+
const delay = retryDelays[attempt] || retryDelays[retryDelays.length - 1];
|
|
49
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
50
|
+
}
|
|
51
|
+
return await fn();
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
let shouldRetry = false;
|
|
55
|
+
if (isDatabaseResuming(error)) {
|
|
56
|
+
retryDelays = RESUMING_RETRY_DELAYS;
|
|
57
|
+
maxAttempts = Math.min(maxRetries, retryDelays.length - 1);
|
|
58
|
+
shouldRetry = attempt < maxAttempts;
|
|
59
|
+
}
|
|
60
|
+
else if (isConnectionError(error)) {
|
|
61
|
+
retryDelays = CONNECTION_RETRY_DELAYS;
|
|
62
|
+
maxAttempts = CONNECTION_RETRY_DELAYS.length - 1;
|
|
63
|
+
shouldRetry = attempt < maxAttempts;
|
|
64
|
+
}
|
|
65
|
+
else if (retryableErrors.length > 0 && retryableErrors.includes(error.code || error.name)) {
|
|
66
|
+
retryDelays = RESUMING_RETRY_DELAYS;
|
|
67
|
+
maxAttempts = Math.min(maxRetries, retryDelays.length - 1);
|
|
68
|
+
shouldRetry = attempt < maxAttempts;
|
|
69
|
+
}
|
|
70
|
+
if (!shouldRetry) {
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
attempt++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAOxE,eAAO,MAAM,WAAW,GAAI,QAAQ,cAAc,EAAE,QAAQ,OAAO,CAAC,YAAY,CAAC,KAAG,WAiCnF,CAAA;AAGD,eAAO,MAAM,MAAM,GACjB,QAAQ,cAAc,EACtB,SAAS,KAAK,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,CAAC,EAC7D,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,KAC1C,OAAO,CAAC,GAAG,EAAE,CAsCf,CAAA"}
|
package/dist/transaction.js
CHANGED
|
@@ -5,6 +5,7 @@ const client_rds_data_1 = require("@aws-sdk/client-rds-data");
|
|
|
5
5
|
const params_1 = require("./params");
|
|
6
6
|
const utils_1 = require("./utils");
|
|
7
7
|
const query_1 = require("./query");
|
|
8
|
+
const retry_1 = require("./retry");
|
|
8
9
|
const transaction = (config, _args) => {
|
|
9
10
|
const args = typeof _args === 'object' ? [_args] : [{}];
|
|
10
11
|
const queries = [];
|
|
@@ -13,6 +14,7 @@ const transaction = (config, _args) => {
|
|
|
13
14
|
database: (0, params_1.parseDatabase)(config, args),
|
|
14
15
|
hydrateColumnNames: (0, params_1.parseHydrate)(config, args),
|
|
15
16
|
formatOptions: (0, params_1.parseFormatOptions)(config, args),
|
|
17
|
+
retryOptions: config.retryOptions,
|
|
16
18
|
RDS: config.RDS,
|
|
17
19
|
engine: config.engine
|
|
18
20
|
});
|
|
@@ -40,17 +42,17 @@ const transaction = (config, _args) => {
|
|
|
40
42
|
exports.transaction = transaction;
|
|
41
43
|
const commit = async (config, queries, rollback) => {
|
|
42
44
|
const results = [];
|
|
43
|
-
const { transactionId } = await config.RDS.send(new client_rds_data_1.BeginTransactionCommand((0, utils_1.pick)(config, ['resourceArn', 'secretArn', 'database'])));
|
|
45
|
+
const { transactionId } = await (0, retry_1.withRetry)(() => config.RDS.send(new client_rds_data_1.BeginTransactionCommand((0, utils_1.pick)(config, ['resourceArn', 'secretArn', 'database']))), config.retryOptions);
|
|
44
46
|
const txConfig = Object.assign(config, { transactionId });
|
|
45
47
|
for (let i = 0; i < queries.length; i++) {
|
|
46
48
|
const result = await query_1.query.apply({ rollback }, [config, queries[i](results[results.length - 1], results)]);
|
|
47
49
|
results.push(result);
|
|
48
50
|
}
|
|
49
|
-
const { transactionStatus } = await txConfig.RDS.send(new client_rds_data_1.CommitTransactionCommand({
|
|
51
|
+
const { transactionStatus } = await (0, retry_1.withRetry)(() => txConfig.RDS.send(new client_rds_data_1.CommitTransactionCommand({
|
|
50
52
|
resourceArn: txConfig.resourceArn,
|
|
51
53
|
secretArn: txConfig.secretArn,
|
|
52
54
|
transactionId: txConfig.transactionId
|
|
53
|
-
}));
|
|
55
|
+
})), config.retryOptions);
|
|
54
56
|
results.push({ transactionStatus });
|
|
55
57
|
return results;
|
|
56
58
|
};
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { RDSDataClient, RDSDataClientConfig, ExecuteStatementCommandOutput, BatchExecuteStatementCommandOutput, BeginTransactionCommandInput, BeginTransactionCommandOutput, CommitTransactionCommandInput, CommitTransactionCommandOutput, RollbackTransactionCommandInput, RollbackTransactionCommandOutput, ExecuteStatementCommandInput, BatchExecuteStatementCommandInput, ColumnMetadata, ResultSetOptions } from '@aws-sdk/client-rds-data';
|
|
2
2
|
export type SupportedType = 'arrayValue' | 'blobValue' | 'booleanValue' | 'doubleValue' | 'isNull' | 'longValue' | 'stringValue' | 'structValue';
|
|
3
|
+
export interface RetryConfig {
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
maxRetries?: number;
|
|
6
|
+
retryableErrors?: string[];
|
|
7
|
+
}
|
|
3
8
|
export interface DataAPIClientConfig {
|
|
4
9
|
resourceArn: string;
|
|
5
10
|
secretArn: string;
|
|
@@ -7,6 +12,7 @@ export interface DataAPIClientConfig {
|
|
|
7
12
|
engine?: 'mysql' | 'pg';
|
|
8
13
|
hydrateColumnNames?: boolean;
|
|
9
14
|
formatOptions?: FormatOptions;
|
|
15
|
+
retryOptions?: RetryConfig;
|
|
10
16
|
options?: RDSDataClientConfig;
|
|
11
17
|
client?: RDSDataClient;
|
|
12
18
|
region?: string;
|
|
@@ -24,6 +30,7 @@ export interface InternalConfig {
|
|
|
24
30
|
database?: string;
|
|
25
31
|
hydrateColumnNames: boolean;
|
|
26
32
|
formatOptions: Required<FormatOptions>;
|
|
33
|
+
retryOptions: Required<RetryConfig>;
|
|
27
34
|
RDS: RDSDataClient;
|
|
28
35
|
transactionId?: string;
|
|
29
36
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const isTimeString: (val: string) => boolean;
|
|
|
13
13
|
export declare const isDecimalString: (val: string) => boolean;
|
|
14
14
|
export declare const isUUIDString: (val: string) => boolean;
|
|
15
15
|
export declare const isJSONString: (val: string) => boolean;
|
|
16
|
-
export declare const getTypeHint: (val: ParameterValue) => string | undefined;
|
|
16
|
+
export declare const getTypeHint: (val: ParameterValue, engine?: string) => string | undefined;
|
|
17
17
|
export declare const formatToTimeStamp: (date: Date, treatAsLocalDate: boolean) => string;
|
|
18
18
|
export declare const formatFromTimeStamp: (value: string, treatAsLocalDate: boolean) => Date;
|
|
19
19
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAG1E,eAAO,MAAM,cAAc,EAAE,aAAa,EASzC,CAAA;AAGD,eAAO,MAAM,KAAK,GAAI,GAAG,KAAK,GAAG,EAAE,KAAG,KAErC,CAAA;AAGD,eAAO,MAAM,QAAQ,GAAI,MAAM,GAAG,EAAE,KAAG,MAKI,CAAA;AAG3C,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,MAAM,EAAE,KAAG,OAAO,CAAC,CAAC,CACiC,CAAA;AAGzH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAInG,CAAA;AAGH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAG,CAAC,EAA+C,CAAA;AAGxF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CA8CrE,CAAA;AAID,eAAO,MAAM,OAAO,GAAI,KAAK,cAAc,KAAG,aAAa,GAAG,IAAI,GAAG,SAsBtD,CAAA;AAKf,eAAO,MAAM,MAAM,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,IAA2B,CAAA;AAGpE,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACV,CAAA;AAGjC,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACE,CAAA;AAG7C,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,OACpB,CAAA;AAG1B,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACkC,CAAA;AAG7E,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OAU1C,CAAA;AAID,eAAO,MAAM,WAAW,GAAI,KAAK,cAAc,KAAG,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAG1E,eAAO,MAAM,cAAc,EAAE,aAAa,EASzC,CAAA;AAGD,eAAO,MAAM,KAAK,GAAI,GAAG,KAAK,GAAG,EAAE,KAAG,KAErC,CAAA;AAGD,eAAO,MAAM,QAAQ,GAAI,MAAM,GAAG,EAAE,KAAG,MAKI,CAAA;AAG3C,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,MAAM,EAAE,KAAG,OAAO,CAAC,CAAC,CACiC,CAAA;AAGzH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAInG,CAAA;AAGH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAG,CAAC,EAA+C,CAAA;AAGxF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CA8CrE,CAAA;AAID,eAAO,MAAM,OAAO,GAAI,KAAK,cAAc,KAAG,aAAa,GAAG,IAAI,GAAG,SAsBtD,CAAA;AAKf,eAAO,MAAM,MAAM,GAAI,KAAK,GAAG,KAAG,GAAG,IAAI,IAA2B,CAAA;AAGpE,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACV,CAAA;AAGjC,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACE,CAAA;AAG7C,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,OACpB,CAAA;AAG1B,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OACkC,CAAA;AAG7E,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,OAU1C,CAAA;AAID,eAAO,MAAM,WAAW,GAAI,KAAK,cAAc,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAqC3E,CAAA;AAID,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,EAAE,kBAAkB,OAAO,KAAG,MAezE,CAAA;AAKD,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,EAAE,kBAAkB,OAAO,KAAG,IAG1D,CAAA"}
|
package/dist/utils.js
CHANGED
|
@@ -107,12 +107,12 @@ const isJSONString = (val) => {
|
|
|
107
107
|
}
|
|
108
108
|
};
|
|
109
109
|
exports.isJSONString = isJSONString;
|
|
110
|
-
const getTypeHint = (val) => {
|
|
110
|
+
const getTypeHint = (val, engine) => {
|
|
111
111
|
if ((0, exports.isDate)(val)) {
|
|
112
112
|
return 'TIMESTAMP';
|
|
113
113
|
}
|
|
114
114
|
if (typeof val === 'string') {
|
|
115
|
-
if ((0, exports.isUUIDString)(val)) {
|
|
115
|
+
if ((0, exports.isUUIDString)(val) && engine !== 'mysql') {
|
|
116
116
|
return 'UUID';
|
|
117
117
|
}
|
|
118
118
|
if ((0, exports.isDateString)(val)) {
|
|
@@ -121,7 +121,7 @@ const getTypeHint = (val) => {
|
|
|
121
121
|
if ((0, exports.isTimeString)(val)) {
|
|
122
122
|
return 'TIME';
|
|
123
123
|
}
|
|
124
|
-
if ((0, exports.isJSONString)(val)) {
|
|
124
|
+
if ((0, exports.isJSONString)(val) && engine !== 'mysql') {
|
|
125
125
|
return 'JSON';
|
|
126
126
|
}
|
|
127
127
|
if ((0, exports.isDecimalString)(val)) {
|