Skip to content

Commit 09df6f9

Browse files
committed
Handle null-values properly
1 parent 4a93056 commit 09df6f9

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

lib/mysql/parser.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,16 @@ Parser.prototype.write = function(buffer) {
493493
}
494494

495495
packet.columnLength = lengthCoded(packet.columnLength);
496+
if (!packet.columnLength) {
497+
packet.emit('data', new Buffer(0), 0);
498+
if (packet.received < packet.length) {
499+
advance(Parser.COLUMN_VALUE_LENGTH);
500+
} else {
501+
self.packet = packet = null;
502+
self.state = state = Parser.PACKET_LENGTH;
503+
continue;
504+
}
505+
}
496506
break;
497507
case Parser.COLUMN_VALUE_STRING:
498508
var remaining = packet.columnLength - packet.index, read;

lib/mysql/query.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ Query.prototype._handlePacket = function(packet) {
5353
row[field] = '';
5454

5555
packet.on('data', function(buffer, remaining) {
56-
row[field] += buffer;
56+
if (buffer.length) {
57+
row[field] += buffer;
58+
} else {
59+
row[field] = null;
60+
}
5761

5862
if (remaining == 0) {
5963
self._rowIndex++;

test/system/test-client-query-null.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
require('../common');
2+
var Client = require('mysql').Client,
3+
client = Client(TEST_CONFIG),
4+
gently = new Gently();
5+
6+
// our test db might not exist yet, so don't try to connect to it
7+
client.database = '';
8+
client.connect();
9+
10+
client.query('SELECT NULL as field_a, NULL as field_b', function(err, results) {
11+
if (err) throw err;
12+
13+
assert.strictEqual(results[0].field_a, null);
14+
assert.strictEqual(results[0].field_b, null);
15+
client.end();
16+
});
17+

0 commit comments

Comments
 (0)