Skip to content

Commit dbb07ed

Browse files
blakeembreydougwilson
authored andcommitted
Support non-enumerable properties in object argument to connection.query
closes #2253 closes #2254
1 parent ca84d0a commit dbb07ed

File tree

4 files changed

+64
-7
lines changed

4 files changed

+64
-7
lines changed

Changes.md

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ you spot any mistakes.
1212
* Fix early detection of bad callback to `connection.query`
1313
* Support Node.js 12.x #2211
1414
* Support Node.js 13.x
15+
* Support non-enumerable properties in object argument to `connection.query` #2253
1516
* Update `bignumber.js` to 9.0.0
1617
* Update `readable-stream` to 2.3.7
1718

lib/Connection.js

+5-7
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,20 @@ Connection.createQuery = function createQuery(sql, values, callback) {
3333
if (typeof sql === 'function') {
3434
cb = sql;
3535
} else if (typeof sql === 'object') {
36-
for (var prop in sql) {
37-
options[prop] = sql[prop];
38-
}
36+
options = Object.create(sql);
3937

4038
if (typeof values === 'function') {
4139
cb = values;
4240
} else if (values !== undefined) {
43-
options.values = values;
41+
Object.defineProperty(options, 'values', { value: values });
4442
}
4543
} else {
46-
options.sql = sql;
47-
options.values = values;
44+
options.sql = sql;
4845

4946
if (typeof values === 'function') {
5047
cb = values;
51-
options.values = undefined;
48+
} else if (values !== undefined) {
49+
options.values = values;
5250
}
5351
}
5452

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var assert = require('assert');
2+
var common = require('../../common');
3+
var connection = common.createConnection({port: common.fakeServerPort});
4+
5+
var server = common.createFakeServer();
6+
var sqlQuery = Object.create(null, {
7+
sql: {
8+
enumerable : false,
9+
value : 'SELECT ?',
10+
writable : false
11+
},
12+
values: {
13+
enumerable : false,
14+
value : [42],
15+
writable : false
16+
}
17+
});
18+
19+
server.listen(common.fakeServerPort, function (err) {
20+
assert.ifError(err);
21+
22+
connection.query(sqlQuery, [99], function (err, rows) {
23+
assert.ifError(err);
24+
assert.strictEqual(rows.length, 1);
25+
assert.strictEqual(rows[0]['99'], 99);
26+
connection.destroy();
27+
server.destroy();
28+
});
29+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var assert = require('assert');
2+
var common = require('../../common');
3+
var connection = common.createConnection({port: common.fakeServerPort});
4+
5+
var server = common.createFakeServer();
6+
var sqlQuery = Object.create(null, {
7+
sql: {
8+
enumerable : false,
9+
value : 'SELECT ?',
10+
writable : false
11+
},
12+
values: {
13+
enumerable : false,
14+
value : [42],
15+
writable : false
16+
}
17+
});
18+
19+
server.listen(common.fakeServerPort, function (err) {
20+
assert.ifError(err);
21+
22+
connection.query(sqlQuery, function (err, rows) {
23+
assert.ifError(err);
24+
assert.strictEqual(rows.length, 1);
25+
assert.strictEqual(rows[0]['42'], 42);
26+
connection.destroy();
27+
server.destroy();
28+
});
29+
});

0 commit comments

Comments
 (0)