Skip to content

Commit 6b705c1

Browse files
committed
fix connection.query signature form
- Issue: Calling `connection.query` with an options object fails after a connection has been upgraded tshemsedinov#59
1 parent 6db0053 commit 6b705c1

File tree

4 files changed

+74
-117
lines changed

4 files changed

+74
-117
lines changed

Diff for: example.js

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22

3+
/* eslint-disable import/no-unresolved */
34
const mysql = require('mysql');
45
const mysqlUtilities = require('./utilities');
56

Diff for: package-lock.json

+2-69
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"engines": {
2626
"node": ">= 6.0.0"
2727
},
28-
"dependencies": {
28+
"peerDependencies": {
2929
"mysql": "^2.18.1"
3030
},
3131
"devDependencies": {

Diff for: utilities.js

+70-47
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
'use strict';
22

3+
/* eslint-disable no-use-before-define */
4+
/* eslint-disable import/no-unresolved */
5+
const { createQuery } = require('mysql');
6+
37
const identifierRegexp = /^[0-9,a-z,A-Z_.]*$/;
48

59
const escapeIdentifier = (str, quote) => {
@@ -51,20 +55,24 @@ const upgrade = connection => {
5155
values,
5256
callback
5357
) {
58+
const queryOptions = createQuery(sql, values, callback);
59+
const userCallback = queryOptions._callback;
60+
5461
const startTime = new Date().getTime();
55-
if (typeof values === 'function') {
56-
callback = values;
57-
values = [];
58-
}
59-
const query = this.inherited(sql, values, (err, res, fields) => {
62+
63+
const callbackWrapper = (err, res, fields) => {
6064
const endTime = new Date().getTime();
6165
const executionTime = endTime - startTime;
6266
connection.emit('query', err, res, fields, query);
6367
if (connection.slowTime && executionTime >= connection.slowTime) {
6468
connection.emit('slow', err, res, fields, query, executionTime);
6569
}
66-
if (callback) callback(err, res, fields);
67-
});
70+
if (userCallback) userCallback(err, res, fields);
71+
};
72+
73+
queryOptions._callback = callbackWrapper;
74+
75+
const query = this.inherited(queryOptions);
6876
return query;
6977
});
7078

@@ -120,90 +128,105 @@ const upgrade = connection => {
120128
// Returns single row as associative array of fields
121129
//
122130
connection.queryRow = function (sql, values, callback) {
123-
if (typeof values === 'function') {
124-
callback = values;
125-
values = [];
126-
}
127-
return this.query(sql, values, (err, res, fields) => {
128-
if (err) return callback(err);
131+
const queryOptions = createQuery(sql, values, callback);
132+
const userCallback = queryOptions._callback;
133+
134+
const callbackWrapper = (err, res, fields) => {
135+
if (err) return userCallback(err);
129136
res = res[0] ? res[0] : false;
130-
callback(err, res, fields);
131-
});
137+
userCallback(err, res, fields);
138+
};
139+
140+
queryOptions._callback = callbackWrapper;
141+
142+
return this.query(queryOptions);
132143
};
133144

134145
// Returns single value (scalar)
135146
//
136147
connection.queryValue = function (sql, values, callback) {
137-
if (typeof values === 'function') {
138-
callback = values;
139-
values = [];
140-
}
141-
return this.queryRow(sql, values, (err, res, fields) => {
142-
if (err) return callback(err);
148+
const queryOptions = createQuery(sql, values, callback);
149+
const userCallback = queryOptions._callback;
150+
151+
const callbackWrapper = (err, res, fields) => {
152+
if (err) return userCallback(err);
143153
const value = res[Object.keys(res)[0]];
144-
callback(err, value, fields);
145-
});
154+
userCallback(err, value, fields);
155+
};
156+
157+
queryOptions._callback = callbackWrapper;
158+
159+
return this.queryRow(queryOptions);
146160
};
147161

148162
// Query returning array of column field values
149163
//
150164
connection.queryCol = function (sql, values, callback) {
151-
if (typeof values === 'function') {
152-
callback = values;
153-
values = [];
154-
}
155-
return this.query(sql, values, (err, res, fields) => {
156-
if (err) return callback(err);
165+
const queryOptions = createQuery(sql, values, callback);
166+
const userCallback = queryOptions._callback;
167+
168+
const callbackWrapper = (err, res, fields) => {
169+
if (err) return userCallback(err);
157170
const result = [];
158171
let i, row, keys;
159172
for (i in res) {
160173
row = res[i];
161174
keys = Object.keys(row);
162175
result.push(row[keys[0]]);
163176
}
164-
callback(err, result, fields);
165-
});
177+
userCallback(err, result, fields);
178+
};
179+
180+
queryOptions._callback = callbackWrapper;
181+
182+
return this.query(queryOptions);
166183
};
167184

168185
// Query returning hash (associative array), first field will be array key
169186
//
170187
connection.queryHash = function (sql, values, callback) {
171-
if (typeof values === 'function') {
172-
callback = values;
173-
values = [];
174-
}
175-
return this.query(sql, values, (err, res, fields) => {
176-
if (err) return callback(err);
188+
const queryOptions = createQuery(sql, values, callback);
189+
const userCallback = queryOptions._callback;
190+
191+
const callbackWrapper = (err, res, fields) => {
192+
if (err) return userCallback(err);
177193
const result = {};
178194
let i, row, keys;
179195
for (i in res) {
180196
row = res[i];
181197
keys = Object.keys(row);
182198
result[row[keys[0]]] = row;
183199
}
184-
callback(err, result, fields);
185-
});
200+
userCallback(err, result, fields);
201+
};
202+
203+
queryOptions._callback = callbackWrapper;
204+
205+
return this.query(queryOptions);
186206
};
187207

188208
// Query returning key-value array,
189209
// first field of query will be key and second will be value
190210
//
191211
connection.queryKeyValue = function (sql, values, callback) {
192-
if (typeof values === 'function') {
193-
callback = values;
194-
values = [];
195-
}
196-
return this.query(sql, values, (err, res, fields) => {
197-
if (err) return callback(err);
212+
const queryOptions = createQuery(sql, values, callback);
213+
const userCallback = queryOptions._callback;
214+
215+
const callbackWrapper = (err, res, fields) => {
216+
if (err) return userCallback(err);
198217
const result = {};
199218
let i, row, keys;
200219
for (i in res) {
201220
row = res[i];
202221
keys = Object.keys(row);
203222
result[row[keys[0]]] = row[keys[1]];
204223
}
205-
callback(err, result, fields);
206-
});
224+
userCallback(err, result, fields);
225+
};
226+
227+
queryOptions._callback = callbackWrapper;
228+
229+
return this.query(queryOptions);
207230
};
208231

209232
// SELECT SQL statement generator

0 commit comments

Comments
 (0)