UNPKG

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
$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);