jaydata-sqlite
Version:
Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)
70 lines (68 loc) • 2.43 kB
JavaScript
$data.Class.define('$data.dbClient.sqLiteNJClient.SqLiteNjCommand', $data.dbClient.DbCommand, null,
{
constructor: function (con, queryStr, params) {
this.query = queryStr;
this.connection = con;
this.parameters = params;
},
executeNonQuery: function (callback) {
// TODO
callback = $data.typeSystem.createCallbackSetting(callback);
this.exec(this.query, this.parameters, callback.success, callback.error);
},
executeQuery: function (callback) {
callback = $data.typeSystem.createCallbackSetting(callback);
this.exec(this.query, this.parameters, callback.success, callback.error);
},
exec: function (query, parameters, callback, errorhandler) {
if (!this.connection.isOpen()) {
this.connection.open();
}
if (parameters == null || parameters == undefined) {
parameters = {};
}
var single = false;
if (!(query instanceof Array)) {
single = true;
query = [query];
parameters = [parameters];
}
var provider = this;
var results = [];
var remainingCommands = 0;
var decClb = function () {
if (--remainingCommands == 0) {
provider.connection.database.exec('COMMIT');
callback(single ? results[0] : results);
}
};
provider.connection.database.exec('BEGIN');
query.forEach(function (q, i) {
remainingCommands++;
if (q) {
var sqlClb = function (error, rows) {
if (error != null) {
errorhandler(error);
return;
}
if (this.lastID) {
results[i] = { insertId: this.lastID, rows: [] };
} else {
results[i] = { rows: rows };
}
decClb();
};
var stmt = provider.connection.database.prepare(q, parameters[i]);
if (q.indexOf('SELECT') == 0) {
stmt.all(sqlClb);
} else {
stmt.run(sqlClb);
}
stmt.finalize();
} else {
results[i] = null;
decClb();
}
}, this);
}
}, null);