Commit 4d274ee1 by Orlando Vazquez

get rid of the speed test for the old sync driver and drop in the simple speedtest for this one

parent 55cbdc10
// Speed test for SQL. Based on http://www.sqlite.org/speed.html var fs = require("fs");
var sys = require("sys"); process.mixin(GLOBAL, require("assert"));
var posix = require("posix"); process.mixin(GLOBAL, require("sys"));
var sqlite = require("./sqlite");
try { var db = new sqlite.Database();
posix.unlink("speedtest.db").wait();
} catch (e) { function readTest(db, callback) {
// Not there? That's okay. var t0 = new Date;
} var rows = 0;
db.query("SELECT * FROM t1", function(row) {
if (!row) {
var d = ((new Date)-t0)/1000;
puts("**** " + rows + " rows in " + d + "s (" + (rows/d) + "/s)");
function connect() { if (callback) callback(db);
if (true) {
// node-sqlite
var sqlite = require("./sqlite");
var db = sqlite.openDatabaseSync("speedtest.db");
} else {
// node-persistence
// TODO: this doesn't work yet
var sqlite = require("../../lib/node-persistence/lib/persistence/sqlite");
var db = sqlite.new_connection("speedtest.db");
db.executeSql = db.query;
db.transaction = function(callback) {
this.query("BEGIN TRANSACTION;");
callback(this);
this.query("COMMIT");
} }
else {
rows++;
} }
return db; });
} }
function _rome(dn, ds) { function writeTest(db, callback) {
if (n < dn) return false; var t0 = new Date;
n -= dn; var count = i = 100000;
s += ds;
return true;
}
function toRoman(n) {
if (isNaN(n)) return n;
if (n <= 0) return "N";
s = "";
while (_rome(1000, "M")) {}
_rome(900, "CM");
_rome(500, "D");
_rome(400, "CD");
while (_rome(100, "C")) {}
_rome(90, "XC");
_rome(50, "L");
_rome(40, "XL");
while (_rome(10, "X")) {}
_rome(9, "IX");
_rome(5, "V");
_rome(4, "IV");
while (_rome(1, "I")) {}
return s;
}
var db; function innerFunction () {
db.query("INSERT INTO t1 VALUES (1)", function (row) {
if (!i--) {
// end of results
var dt = ((new Date)-t0)/1000;
puts("**** " + count + " insertions in " + dt + "s (" + (count/dt) + "/s)");
var SECTION; if (callback) callback(db);
var LASTTIME;
function time(section) {
if (db) db.close();
db = connect();
var now = (new Date()).getTime();
if (SECTION) {
var elapsed = ((now - LASTTIME)/1000.0).toFixed(3);
sys.puts(elapsed + ' ' + SECTION);
} }
SECTION = section; else {
LASTTIME = now; innerFunction();
}
time("Test 1: 1000 INSERTs");
db.query("CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));");
for (var i = 0; i < 1000; ++i) {
var n = Math.floor(Math.random() * 99999);
db.query("INSERT INTO t1 VALUES(?,?,?);", [i, n, toRoman(n)]);
}
time("Test 2: 25000 INSERTs in a transaction");
db.transaction(function (tx) {
tx.executeSql("CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100));");
for (var i = 0; i < 25000; ++i) {
var n = Math.floor(Math.random() * 99999);
db.query("INSERT INTO t2 VALUES(?,?,?);", [i, n, toRoman(n)]);
} }
}); });
time("Test 3: 25000 INSERTs into an indexed table");
db.transaction(function (tx) {
tx.executeSql("CREATE TABLE t3(a INTEGER, b INTEGER, c VARCHAR(100));");
tx.executeSql("CREATE INDEX i3 ON t3(c);");
for (var i = 0; i < 25000; ++i) {
var n = Math.floor(Math.random() * 99999);
db.query("INSERT INTO t3 VALUES(?,?,?);", [i, n, toRoman(n)]);
} }
}); innerFunction();
}
time("Test 4: 100 SELECTs without an index");
db.transaction(function (tx) {
for (var i = 0; i < 100; ++i) {
db.query("SELECT count(*), avg(b) FROM t2 WHERE b>=? AND b<?;",
[i * 100, i * 100 + 1000]);
}
});
time("Test 5: 100 SELECTs on a string comparison");
db.transaction(function (tx) {
for (var i = 0; i < 100; ++i) {
db.query("SELECT count(*), avg(b) FROM t2 WHERE c LIKE ?;",
['%' + toRoman(i) + '%']);
}
});
time("Test 6: Creating an index");
db.query("CREATE INDEX i2a ON t2(a);");
db.query("CREATE INDEX i2b ON t2(b);");
time("Test 7: 5000 SELECTs with an index");
for (var i = 0; i < 5000; ++i)
db.query("SELECT count(*), avg(b) FROM t2 WHERE b>=? AND b<?;",
[i * 100, (i+1) * 100]);
time("Test 8: 1000 UPDATEs without an index");
db.transaction(function (tx) {
for (var i = 0; i < 1000; ++i)
tx.executeSql("UPDATE t1 SET b=b*2 WHERE a>=? AND a<?",
[i * 10, (i+1) * 10]);
});
time("Test 9: 25000 UPDATEs with an index");
db.transaction(function (tx) {
for (var i = 0; i < 25000; ++i) {
var n = Math.floor(Math.random() * 1000000);
tx.executeSql("UPDATE t2 SET b=? WHERE a=?", [n, i]);
}
});
time("Test 10: 25000 text UPDATEs with an index");
db.transaction(function (tx) {
for (var i = 0; i < 25000; ++i) {
var n = Math.floor(Math.random() * 1000000);
tx.executeSql("UPDATE t2 SET c=? WHERE a=?", [toRoman(n), i]);
}
});
time("Test 11: INSERTs from a SELECT");
db.transaction(function (tx) {
tx.executeSql("INSERT INTO t1 SELECT b,a,c FROM t2;");
tx.executeSql("INSERT INTO t2 SELECT b,a,c FROM t1;");
});
time("Test 12: DELETE without an index");
db.query("DELETE FROM t2 WHERE c LIKE '%fifty%';");
time("Test 13: DELETE with an index");
db.query("DELETE FROM t2 WHERE a>10 AND a<20000;");
time("Test 14: A big INSERT after a big DELETE"); db.open(":memory:", function () {
db.query("INSERT INTO t2 SELECT * FROM t1;"); puts(inspect(arguments));
puts("open cb");
time("Test 15: A big DELETE followed by 12000 small INSERTs"); db.query("CREATE TABLE t1 (alpha INTEGER)", function () {
db.transaction(function (tx) { puts("create table callback" + inspect(arguments));
tx.executeSql("DELETE FROM t1;"); writeTest(db, readTest);
for (var i = 0; i < 12000; ++i) { });
var n = Math.floor(Math.random() * 100000);
tx.executeSql("INSERT INTO t1 VALUES(?,?,?);", [i, n, toRoman(n)]);
}
}); });
time("Test 16: DROP TABLE");
db.query("DROP TABLE t1;");
db.query("DROP TABLE t2;");
db.query("DROP TABLE t3;");
time();
\ No newline at end of file
var fs = require("fs");
process.mixin(GLOBAL, require("assert"));
process.mixin(GLOBAL, require("sys"));
var sqlite = require("./sqlite");
var db = new sqlite.Database();
function readTest(db, callback) {
var t0 = new Date;
var rows = 0;
db.query("SELECT * FROM t1", function(row) {
if (!row) {
var d = ((new Date)-t0)/1000;
puts("**** " + rows + " rows in " + d + "s (" + (rows/d) + "/s)");
if (callback) callback(db);
}
else {
rows++;
}
});
}
function writeTest(db, callback) {
var t0 = new Date;
var count = i = 100000;
function innerFunction () {
db.query("INSERT INTO t1 VALUES (1)", function (row) {
if (!i--) {
// end of results
var dt = ((new Date)-t0)/1000;
puts("**** " + count + " insertions in " + dt + "s (" + (count/dt) + "/s)");
if (callback) callback(db);
}
else {
innerFunction();
}
});
}
innerFunction();
}
db.open(":memory:", function () {
puts(inspect(arguments));
puts("open cb");
db.query("CREATE TABLE t1 (alpha INTEGER)", function () {
puts("create table callback" + inspect(arguments));
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