Commit d1550a2b by Eric Fredricksen Committed by Eric Fredricksen

Move towards semantics conforming to HTML5 Web SQL

parent 4093c784
......@@ -2,6 +2,7 @@ var sys = require("sys");
var bindings = require("./sqlite3_bindings");
var Db = bindings.Db;
exports.Db = Db;
Db.prototype.query = function (sql, bindings, callback) {
if (typeof(bindings) == "function") {
......@@ -16,4 +17,45 @@ Db.prototype.query = function (sql, bindings, callback) {
return result;
}
exports.Db = Db;
\ No newline at end of file
// Conform to http://dev.w3.org/html5/webdatabase/#sql
var DatabaseSync = Db;
exports.openDatabaseSync = function (name, version, displayName,
estimatedSize, creationCallback) {
var db = new DatabaseSync(name);
if (creationCallback) creationCallback(db);
return db;
}
// TODO: slightly differnt args
Db.prototype.executeSql = Db.prototype.query;
// TODO: (big) async
// TODO: void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
// TODO: void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
function SQLTransactionSync(db, txCallback, errCallback, successCallback) {
this.database = db;
this.executeSql = function(sqlStatement, argumets) {
return db.query(sqlStatement, arguments)[0];
}
this.query("BEGIN TRANSACTION");
txCallback(this);
this.query("COMMIT");
if (sucessCallback) successCallback(this);
}
Db.prototype.transaction = function (txCallback, errCallback, successCallback) {
var tx = new Transaction(this, txCallback, errCallback, successCallback);
}
// TODO: readTransaction
......@@ -149,15 +149,15 @@ protected:
std::deque< Handle<Object> >::const_iterator ri(rows.begin());
for (int r = 0; r < rows.size(); ++r, ++ri)
rosult->Set(Integer::New(r), *ri);
rosult->Set(String::New("changes"), Integer::New(sqlite3_changes(*db)));
rosult->Set(String::New("rowid"),
rosult->Set(String::New("rowsAffected"), Integer::New(sqlite3_changes(*db)));
rosult->Set(String::New("insertId"),
Integer::New(sqlite3_last_insert_rowid(*db)));
resulting.push_back(rosult);
}
Local<Array> result(Array::New(0));
result->Set(String::New("changes"), Integer::New(changes));
result->Set(String::New("rowid"),
result->Set(String::New("rowsAffected"), Integer::New(changes));
result->Set(String::New("insertId"),
Integer::New(sqlite3_last_insert_rowid(*db)));
std::deque< Handle<Array> >::iterator ri(resulting.begin());
for (int r = 0; r < resulting.size(); ++r, ++ri) {
......
// Test script for node_sqlite
var sys = require("sys");
var posix = require("posix");
var sqlite3 = require("./sqlite3");
var db = new sqlite3.Db('test.db');
posix.unlink('test.db');
var db = sqlite3.openDatabaseSync('test.db');
db.query("CREATE TABLE egg (a,y,e)");
db.query("INSERT INTO egg (a) VALUES (1)", function () {
process.assert(this.rowid == 1);
});
process.assert(this.insertId == 1);
});
var i2 = db.query("INSERT INTO egg (a) VALUES (?)", [5]);
process.assert(i2.rowid == 2);
process.assert(i2.insertId == 2);
db.query("UPDATE egg SET y='Y'; UPDATE egg SET e='E';");
db.query("UPDATE egg SET y=?; UPDATE egg SET e=? WHERE ROWID=1",
["arm","leg"] );
......@@ -42,8 +45,8 @@ db.query("SELECT * FROM test WHERE rowid < ?;", [1],
});
db.query("UPDATE test SET y = 10;", [], function () {
sys.puts(this.changes + " rows affected");
process.assert(this.changes == 2);
sys.puts(this.rowsAffected + " rows affected");
process.assert(this.rowsAffected == 2);
});
......
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