Commit e631a8e4 by Orlando Vazquez

Add naïve speed test for Nóde and Rųby

Do some minor cleanup and fixes.
minor fixes and cleanups
parent e79ff0c4
require 'sqlite3'
db = SQLite3::Database.new(":memory:")
db.execute("CREATE TABLE t1 (alpha INTEGER)") do |row|
end
count = 100000;
t0 = Time.new;
1.upto(count) do
db.execute("INSERT INTO t1 VALUES (1)") do
end
end
d = Time.new - t0;
puts "Took #{d}s (#{count/d} inserts/s)";
t0 = Time.new;
db.execute("SELECT * FROM t1") do |row|
end
d = Time.new - t0;
puts "Took #{d} (#{count/d} rows/s)";
...@@ -98,20 +98,20 @@ Database.prototype.executeQuery = function(sql, bindings, queryCallback) { ...@@ -98,20 +98,20 @@ Database.prototype.executeQuery = function(sql, bindings, queryCallback) {
} }
function doStep(statement) { function doStep(statement) {
var innerFunction = function () { (function innerFunction() {
statement.step(function (error, row) { statement.step(function (error, row) {
if (error) throw error; if (error) throw error;
if (!row) { if (!row) {
// rows.rowsAffected = this.changes(); // rows.rowsAffected = this.changes();
// rows.insertId = this.lastInsertRowid(); // rows.insertId = this.lastInsertRowid();
queryCallback();
queryDone(statement); queryDone(statement);
return; return;
} }
queryCallback(row); queryCallback(row);
innerFunction(); innerFunction();
}); });
}; })();
innerFunction();
} }
function onPrepare(error, statement) { function onPrepare(error, statement) {
......
...@@ -161,10 +161,10 @@ protected: ...@@ -161,10 +161,10 @@ protected:
int rc = sqlite3_open(open_req->filename, dbptr); int rc = sqlite3_open(open_req->filename, dbptr);
req->result = rc; req->result = rc;
sqlite3 *db = *dbptr; // sqlite3 *db = *dbptr;
sqlite3_commit_hook(db, CommitHook, open_req->dbo); // sqlite3_commit_hook(db, CommitHook, open_req->dbo);
sqlite3_rollback_hook(db, RollbackHook, open_req->dbo); // sqlite3_rollback_hook(db, RollbackHook, open_req->dbo);
sqlite3_update_hook(db, UpdateHook, open_req->dbo); // sqlite3_update_hook(db, UpdateHook, open_req->dbo);
return 0; return 0;
} }
...@@ -290,28 +290,28 @@ protected: ...@@ -290,28 +290,28 @@ protected:
// Hooks // Hooks
static int CommitHook(void* v_this) { // static int CommitHook(void* v_this) {
HandleScope scope; // HandleScope scope;
Sqlite3Db* db = static_cast<Sqlite3Db*>(v_this); // Sqlite3Db* db = static_cast<Sqlite3Db*>(v_this);
db->Emit(String::New("commit"), 0, NULL); // db->Emit(String::New("commit"), 0, NULL);
// TODO: allow change in return value to convert to rollback...somehow // // TODO: allow change in return value to convert to rollback...somehow
return 0; // return 0;
} // }
//
static void RollbackHook(void* v_this) { // static void RollbackHook(void* v_this) {
HandleScope scope; // HandleScope scope;
Sqlite3Db* db = static_cast<Sqlite3Db*>(v_this); // Sqlite3Db* db = static_cast<Sqlite3Db*>(v_this);
db->Emit(String::New("rollback"), 0, NULL); // db->Emit(String::New("rollback"), 0, NULL);
} // }
//
static void UpdateHook(void* v_this, int operation, const char* database, // static void UpdateHook(void* v_this, int operation, const char* database,
const char* table, sqlite_int64 rowid) { // const char* table, sqlite_int64 rowid) {
HandleScope scope; // HandleScope scope;
Sqlite3Db* db = static_cast<Sqlite3Db*>(v_this); // Sqlite3Db* db = static_cast<Sqlite3Db*>(v_this);
Local<Value> args[] = { Int32::New(operation), String::New(database), // Local<Value> args[] = { Int32::New(operation), String::New(database),
String::New(table), Number::New(rowid) }; // String::New(table), Number::New(rowid) };
db->Emit(String::New("update"), 4, args); // db->Emit(String::New("update"), 4, args);
} // }
struct prepare_request { struct prepare_request {
Persistent<Function> cb; Persistent<Function> cb;
...@@ -354,6 +354,7 @@ protected: ...@@ -354,6 +354,7 @@ protected:
} }
prep_req->cb.Dispose(); prep_req->cb.Dispose();
free(prep_req); free(prep_req);
prep_req->dbo->Unref(); prep_req->dbo->Unref();
...@@ -813,7 +814,6 @@ protected: ...@@ -813,7 +814,6 @@ protected:
return 0; return 0;
} }
static int EIO_Step(eio_req *req) { static int EIO_Step(eio_req *req) {
struct step_request *step_req = (struct step_request *)(req->data); struct step_request *step_req = (struct step_request *)(req->data);
Statement *sto = step_req->sto; Statement *sto = step_req->sto;
......
...@@ -6,61 +6,44 @@ var sqlite = require("./sqlite"); ...@@ -6,61 +6,44 @@ var sqlite = require("./sqlite");
var db = new sqlite.Database(); var db = new sqlite.Database();
// db.open("mydatabase.db", function () { function readTest(db, callback) {
// puts("opened the db");
// db.query("SELECT * FROM foo WHERE baz < ? AND baz > ?", [6, 3], function (error, result) {
// ok(!error);
// puts("query callback " + inspect(result));
// equal(result.length, 2);
// });
// // db.query("SELECT 1", function (error, result) {
// // ok(!error);
// // puts("query callback " + inspect(result));
// // equal(result.length, 1);
// // });
// });
function readTest(db) {
var t0 = new Date; var t0 = new Date;
var count = i = 100;
var rows = 0; var rows = 0;
var innerFunc = function () { db.query("SELECT * FROM t1", function(row) {
if (!i--) { if (!row) {
var d = ((new Date)-t0)/1000; var d = ((new Date)-t0)/1000;
puts("**** " + count + " selects in " + d + "s (" + (count/d) + "/s) "+rows+" rows total ("+(rows/d)+" rows/s)"); puts("**** " + rows + " rows in " + d + "s (" + (rows/d) + "/s)");
return;
}
db.query("SELECT * FROM t1", function(error, results) { if (callback) callback(db);
rows = rows + results.length; }
innerFunc(); else {
rows++;
}
}); });
};
innerFunc();
} }
function writeTest(db, callback) { function writeTest(db, callback) {
var t0 = new Date; var t0 = new Date;
var count = i = 10000; var count = i = 100000;
var innerFunc = function () {
if(!i--) {
var d = ((new Date)-t0)/1000;
puts("**** " + count + " insertions in " + d + "s (" + (count/d) + "/s)");
callback(db); function innerFunction () {
return; db.query("INSERT INTO t1 VALUES (1)", function (row) {
}; if (!i-- && !row) {
// end of results
var dt = ((new Date)-t0)/1000;
puts("**** " + count + " insertions in " + dt + "s (" + (count/dt) + "/s)");
db.query("INSERT INTO t1 VALUES (?);", [1], function() { if (callback) callback(db);
innerFunc(); }
else {
innerFunction();
}
}); });
}; }
innerFunction();
innerFunc();
} }
fs.unlink("speedtest.db", function () { db.open(":memory:", function () {
db.open("speedtest.db", function () {
puts(inspect(arguments)); puts(inspect(arguments));
puts("open cb"); puts("open cb");
...@@ -68,6 +51,4 @@ fs.unlink("speedtest.db", function () { ...@@ -68,6 +51,4 @@ fs.unlink("speedtest.db", function () {
puts("create table callback" + inspect(arguments)); puts("create table callback" + inspect(arguments));
writeTest(db, readTest); writeTest(db, readTest);
}); });
});
}); });
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