Commit baf8e81d by Konstantin Käfer

fixes gh-12: make > 32 bit integers work for integer columns

parent ed09d6cd
...@@ -761,7 +761,7 @@ Local<Object> Statement::RowToJS(Row* row) { ...@@ -761,7 +761,7 @@ Local<Object> Statement::RowToJS(Row* row) {
switch (field->type) { switch (field->type) {
case SQLITE_INTEGER: { case SQLITE_INTEGER: {
value = Local<Value>(Integer::New(((Values::Integer*)field)->value)); value = Local<Value>(Number::New(((Values::Integer*)field)->value));
} break; } break;
case SQLITE_FLOAT: { case SQLITE_FLOAT: {
value = Local<Value>(Number::New(((Values::Float*)field)->value)); value = Local<Value>(Number::New(((Values::Float*)field)->value));
...@@ -799,7 +799,7 @@ void Statement::GetRow(Row* row, sqlite3_stmt* stmt) { ...@@ -799,7 +799,7 @@ void Statement::GetRow(Row* row, sqlite3_stmt* stmt) {
const char* name = sqlite3_column_name(stmt, i); const char* name = sqlite3_column_name(stmt, i);
switch (type) { switch (type) {
case SQLITE_INTEGER: { case SQLITE_INTEGER: {
row->push_back(new Values::Integer(name, sqlite3_column_int(stmt, i))); row->push_back(new Values::Integer(name, sqlite3_column_int64(stmt, i)));
} break; } break;
case SQLITE_FLOAT: { case SQLITE_FLOAT: {
row->push_back(new Values::Float(name, sqlite3_column_double(stmt, i))); row->push_back(new Values::Float(name, sqlite3_column_double(stmt, i)));
......
...@@ -33,9 +33,9 @@ namespace Values { ...@@ -33,9 +33,9 @@ namespace Values {
}; };
struct Integer : Field { struct Integer : Field {
template <class T> inline Integer(T _name, int val) : template <class T> inline Integer(T _name, int64_t val) :
Field(_name, SQLITE_INTEGER), value(val) {} Field(_name, SQLITE_INTEGER), value(val) {}
int value; int64_t value;
}; };
struct Float : Field { struct Float : Field {
......
...@@ -34,6 +34,7 @@ exports['test large floats'] = function(beforeExit) { ...@@ -34,6 +34,7 @@ exports['test large floats'] = function(beforeExit) {
4294967296.249, 4294967296.249,
Math.PI, Math.PI,
3924729304762836.5, 3924729304762836.5,
new Date().valueOf(),
912667.394828365, 912667.394828365,
2.3948728634826374e+83, 2.3948728634826374e+83,
9.293476892934982e+300, 9.293476892934982e+300,
...@@ -67,3 +68,45 @@ exports['test large floats'] = function(beforeExit) { ...@@ -67,3 +68,45 @@ exports['test large floats'] = function(beforeExit) {
assert.ok(retrieved); assert.ok(retrieved);
}); });
}; };
exports['test large integers'] = function(beforeExit) {
var db = new sqlite3.Database(':memory:');
var retrieved = false;
var numbers = [
4294967299,
3924729304762836,
new Date().valueOf(),
2.3948728634826374e+83,
9.293476892934982e+300,
Infinity,
-9.293476892934982e+300,
-2.3948728634826374e+83,
-Infinity
];
db.serialize(function() {
db.run("CREATE TABLE foo (id INT, num INTEGER)");
var stmt = db.prepare("INSERT INTO foo VALUES(?, ?)");
for (var i = 0; i < numbers.length; i++) {
stmt.run(i, numbers[i]);
}
stmt.finalize();
db.all("SELECT num FROM foo ORDER BY id", function(err, rows) {
if (err) throw err;
for (var i = 0; i < rows.length; i++) {
assert.equal(numbers[i], rows[i].num);
}
retrieved = true;
})
});
beforeExit(function() {
assert.ok(retrieved);
});
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment