-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
query-executioner.js
58 lines (50 loc) · 1.64 KB
/
query-executioner.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
const _debugQuery = require('debug')('knex:query');
const debugBindings = require('debug')('knex:bindings');
const debugQuery = (sql, txId) => _debugQuery(sql.replace(/%/g, '%%'), txId);
const { isString } = require('../../util/is');
function formatQuery(sql, bindings, timeZone, client) {
bindings = bindings == null ? [] : [].concat(bindings);
let index = 0;
return sql.replace(/\\?\?/g, (match) => {
if (match === '\\?') {
return '?';
}
if (index === bindings.length) {
return match;
}
const value = bindings[index++];
return client._escapeBinding(value, { timeZone });
});
}
function enrichQueryObject(connection, queryParam, client) {
const queryObject = isString(queryParam) ? { sql: queryParam } : queryParam;
queryObject.bindings = client.prepBindings(queryObject.bindings);
queryObject.sql = client.positionBindings(queryObject.sql);
const { __knexUid, __knexTxId } = connection;
client.emit('query', Object.assign({ __knexUid, __knexTxId }, queryObject));
debugQuery(queryObject.sql, __knexTxId);
debugBindings(queryObject.bindings, __knexTxId);
return queryObject;
}
function executeQuery(connection, queryObject, client) {
return client._query(connection, queryObject).catch((err) => {
err.message =
formatQuery(queryObject.sql, queryObject.bindings, undefined, client) +
' - ' +
err.message;
client.emit(
'query-error',
err,
Object.assign(
{ __knexUid: connection.__knexUid, __knexTxId: connection.__knexUid },
queryObject
)
);
throw err;
});
}
module.exports = {
enrichQueryObject,
executeQuery,
formatQuery,
};