Skip to content

Commit bd1ce80

Browse files
committed
Merge pull request #1 from Dinwy/iss1371
mysqljs#1371 Fix bigint out of range problem
2 parents 7588c28 + 3032796 commit bd1ce80

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

lib/protocol/packets/RowDataPacket.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
var Types = require('../constants/types');
2-
var Charsets = require('../constants/charsets');
3-
var Field = require('./Field');
1+
var Types = require('../constants/types');
2+
var Charsets = require('../constants/charsets');
3+
var Field = require('./Field');
4+
var IEEE_754_BINARY_64_PRECISION = Math.pow(2, 53);
45

56
module.exports = RowDataPacket;
67
function RowDataPacket() {
@@ -99,7 +100,7 @@ function typeCast(field, parser, timeZone, supportBigNumbers, bigNumberStrings,
99100
numberString = parser.parseLengthCodedString();
100101
return (numberString === null || (field.zeroFill && numberString[0] == "0"))
101102
? numberString
102-
: ((supportBigNumbers && (bigNumberStrings || (Number(numberString) > Number.MAX_SAFE_INTEGER || Number(numberString) < Number.MIN_SAFE_INTEGER)))
103+
: ((supportBigNumbers && (bigNumberStrings || (Number(numberString) >= IEEE_754_BINARY_64_PRECISION) || (Number(numberString) <= -IEEE_754_BINARY_64_PRECISION)))
103104
? numberString
104105
: Number(numberString));
105106
case Types.BIT:

test/common.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ function mergeTestConfig(config) {
150150
port : process.env.MYSQL_PORT,
151151
user : process.env.MYSQL_USER,
152152
password : process.env.MYSQL_PASSWORD,
153-
supportBigNumbers: true,
153+
supportBigNumbers: true
154154
}, config);
155155

156156
return config;

test/integration/connection/test-protocol-bigint.js renamed to test/integration/connection/test-query-bigint.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ common.getTestConnection(function (err, connection) {
2626
connection.query('SELECT * FROM ??', [table], function (err, rows) {
2727
assert.ifError(err);
2828
assert.equal(rows.length, 6);
29-
assert.strictEqual(rows[0].big.toString(), '9223372036854775807');
30-
assert.strictEqual(rows[1].big.toString(), '-9223372036854775807');
31-
assert.strictEqual(rows[2].big.toString(), '1111111111111111111');
32-
assert.strictEqual(rows[3].big.toString(), '-1111111111111111111');
33-
assert.strictEqual(rows[4].big.toString(), '9007199254740993');
34-
assert.strictEqual(rows[5].big.toString(), '-9007199254740993');
29+
assert.strictEqual(rows[0].big, '9223372036854775807');
30+
assert.strictEqual(rows[1].big, '-9223372036854775807');
31+
assert.strictEqual(rows[2].big, '1111111111111111111');
32+
assert.strictEqual(rows[3].big, '-1111111111111111111');
33+
assert.strictEqual(rows[4].big, '9007199254740993');
34+
assert.strictEqual(rows[5].big, '-9007199254740993');
3535
connection.end(assert.ifError);
3636
});
3737
});

0 commit comments

Comments
 (0)