From 245fb1af1b780ff060d4bb63a0a6833b5fb5373c Mon Sep 17 00:00:00 2001 From: Diogo Resende Date: Thu, 28 Mar 2013 12:06:29 +0000 Subject: [PATCH] Changes date parsing to return String if not a valid JS Date --- lib/protocol/packets/RowDataPacket.js | 9 +++- .../connection/test-query-dates-as-strings.js | 42 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 test/integration/connection/test-query-dates-as-strings.js diff --git a/lib/protocol/packets/RowDataPacket.js b/lib/protocol/packets/RowDataPacket.js index 9ee4b4ab8..d270954c9 100644 --- a/lib/protocol/packets/RowDataPacket.js +++ b/lib/protocol/packets/RowDataPacket.js @@ -45,6 +45,8 @@ RowDataPacket.prototype._typeCast = function(field, parser, timeZone, supportBig case Types.DATETIME: case Types.NEWDATE: var dateString = parser.parseLengthCodedString(); + var dt; + if (dateString === null) { return null; } @@ -57,7 +59,12 @@ RowDataPacket.prototype._typeCast = function(field, parser, timeZone, supportBig } } - return new Date(dateString); + dt = new Date(dateString); + if (isNaN(dt.getTime())) { + return dateString; + } + + return dt; case Types.TINY: case Types.SHORT: case Types.LONG: diff --git a/test/integration/connection/test-query-dates-as-strings.js b/test/integration/connection/test-query-dates-as-strings.js new file mode 100644 index 000000000..a8f1c6566 --- /dev/null +++ b/test/integration/connection/test-query-dates-as-strings.js @@ -0,0 +1,42 @@ +var common = require('../../common'); +var connection = common.createConnection(); +var assert = require('assert'); +var util = require('util'); + +common.useTestDb(connection); + +var table = 'dates_as_strings'; +var rows; + +connection.query([ + 'CREATE TEMPORARY TABLE `' + table + '` (', + '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,', + '`dt` DATE,', + 'PRIMARY KEY (`id`)', + ') ENGINE=InnoDB DEFAULT CHARSET=utf8' +].join('\n')); + +connection.query('INSERT INTO ' + table + ' SET ?', {dt: '0000-00-00'}); +connection.query('INSERT INTO ' + table + ' SET ?', {dt: '2013-00-00'}); +connection.query('INSERT INTO ' + table + ' SET ?', {dt: '2013-03-00'}); +connection.query('INSERT INTO ' + table + ' SET ?', {dt: '2013-03-01'}); + +connection.query('SELECT * FROM ' + table, function(err, _rows) { + if (err) throw err; + + rows = _rows; +}); + +connection.end(); + +process.on('exit', function() { + assert.equal(rows.length, 4); + assert.equal(rows[0].id, 1); + assert.equal(rows[0].dt, '0000-00-00'); + assert.equal(rows[1].id, 2); + assert.equal(rows[1].dt, '2013-00-00'); + assert.equal(rows[2].id, 3); + assert.equal(rows[2].dt, '2013-03-00'); + assert.equal(rows[3].id, 4); + assert(util.isDate(rows[3].dt)); +});