Commit e16b8bc7 by Konstantin Käfer

add tests for large numbers

parent e436fca5
......@@ -173,14 +173,14 @@ template <class T> T* Statement::Bind(const Arguments& args, int start) {
T* baton = new T(this, callback);
for (int i = start; i < last; i++) {
if (args[i]->IsString()) {
if (args[i]->IsString() || args[i]->IsRegExp()) {
String::Utf8Value val(args[i]->ToString());
baton->parameters.push_back(new Data::Text(val.length(), *val));
}
else if (args[i]->IsInt32() || args[i]->IsUint32()) {
else if (args[i]->IsInt32()) {
baton->parameters.push_back(new Data::Integer(args[i]->Int32Value()));
}
else if (args[i]->IsNumber()) {
else if (args[i]->IsNumber() || args[i]->IsDate()) {
baton->parameters.push_back(new Data::Float(args[i]->NumberValue()));
}
else if (args[i]->IsBoolean()) {
......
var sqlite3 = require('sqlite3');
var assert = require('assert');
var util = require('util');
exports['test Statement#each'] = function(beforeExit) {
var db = new sqlite3.Database('test/support/big.db', sqlite3.OPEN_READONLY);
var total = 100000;
var retrieved = 0;
db.each('SELECT id, txt FROM foo LIMIT 0, ?', total, function(err, row) {
if (err) throw err;
retrieved++;
});
beforeExit(function() {
assert.equal(retrieved, total, "Only retrieved " + retrieved + " out of " + total + " rows.");
});
};
\ No newline at end of file
var sqlite3 = require('sqlite3');
var assert = require('assert');
exports['test Date() and RegExp() serialization'] = function(beforeExit) {
var db = new sqlite3.Database(':memory:');
var retrieved = false;
var date = new Date();
db.serialize(function() {
db.run("CREATE TABLE foo (txt TEXT, num FLOAT)");
db.run("INSERT INTO foo VALUES(?, ?)", (/^f\noo/), date);
db.get("SELECT txt, num FROM foo", function(err, row) {
if (err) throw err;
assert.equal(row[0], '/^f\\noo/');
assert.equal(row[1], +date);
retrieved = true;
})
});
beforeExit(function() {
assert.ok(retrieved);
});
};
exports['test large floats'] = function(beforeExit) {
var db = new sqlite3.Database(':memory:');
var retrieved = false;
var numbers = [
4294967296.249,
Math.PI,
3924729304762836.5,
912667.394828365,
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 FLOAT)");
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][0]);
}
retrieved = true;
})
});
beforeExit(function() {
assert.ok(retrieved);
});
};
#!/bin/sh
var sqlite3 = require('../../lib/sqlite3');
function randomString() {
var str = '';
var chars = 'abcdefghijklmnopqrstuvwxzyABCDEFGHIJKLMNOPQRSTUVWXZY0123456789 ';
for (var i = Math.random() * 100; i > 0; i--) {
str += chars[Math.floor(Math.random() * chars.length)];
}
return str;
};
var db = new sqlite3.Database('big.db');
var count = 10000000;
db.serialize(function() {
db.run("CREATE TABLE foo (id INT, txt TEXT)");
db.run("BEGIN TRANSACTION");
var stmt = db.prepare("INSERT INTO foo VALUES(?, ?)");
for (var i = 0; i < count; i++) {
stmt.run(i, randomString());
}
stmt.finalize();
db.run("COMMIT TRANSACTION");
});
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