UNPKG

libsqlite

Version:

Legacy SQLITE library for browser

1,135 lines (1,065 loc) 43.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SQLiteOpenHelper = exports.DatabaseUtils = exports.InsertHelper = exports.TableInfo = exports.ColumnInfo = exports.Hex = exports.BaseColumns = undefined; var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require("babel-runtime/helpers/inherits"); var _inherits3 = _interopRequireDefault(_inherits2); var _map = require("babel-runtime/core-js/map"); var _map2 = _interopRequireDefault(_map); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _math = require("hjs-core/lib/math"); var math = _interopRequireWildcard(_math); var _conf = require("conflib/lib/conf"); var _event = require("./event"); var _cursor = require("./cursor"); var _sqlite = require("./sqlite"); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var BaseColumns = exports.BaseColumns = { _ID: "_id", _COUNT: "_count" }; /** @babel */ var Hex = exports.Hex = { arrayBufferToHex: function arrayBufferToHex(buffer) { var byteArray = new Uint8Array(buffer); var hexParts = []; for (var i = 0; i < byteArray.length; i++) { var hex = byteArray[i].toString(16); var paddedHex = ('00' + hex).slice(-2); hexParts.push(paddedHex); } return hexParts.join(''); }, hexToArrayBuffer: function hexToArrayBuffer(hex) { if (typeof hex !== 'string') { throw new TypeError('Expected input to be a string'); } if (hex.length % 2 !== 0) { throw new RangeError('Expected string to be an even number of characters'); } var view = new Uint8Array(hex.length / 2); for (var i = 0; i < hex.length; i += 2) { view[i / 2] = parseInt(hex.substring(i, i + 2), 16); } return view.buffer; } }; var ColumnInfo = exports.ColumnInfo = function () { function ColumnInfo(index, column) { (0, _classCallCheck3.default)(this, ColumnInfo); this.cid = index; this.notnull = this.pk = this.unique = false; var fields = column.split(" "); if (fields) { var len = fields.length; var def = false; for (var i = 0; i < len; i++) { var field = fields[i]; if (i === 0) { this.name = field.trim(); } else if (i === 1) { this.type = field.trim(); } else { if (def) { this.dflt_value = field.trim(); def = false; } if (field.indexOf("NOT NULL") !== -1 || field.indexOf("not null") !== -1) { this.notnull = true; } if (field.indexOf("PRIMARY KEY") !== -1 || field.indexOf("primary key") !== -1) { this.pk = true; } if (field.indexOf("DEFAULT") !== -1 || field.indexOf("default") !== -1) { def = true; } } } } } (0, _createClass3.default)(ColumnInfo, [{ key: "getCid", value: function getCid() { return this.cid; } }, { key: "getDefaultValue", value: function getDefaultValue() { return this.dflt_value; } }, { key: "getName", value: function getName() { return this.name; } }, { key: "getType", value: function getType() { return this.type; } }, { key: "isNotNull", value: function isNotNull() { return this.notnull; } }, { key: "isPrimaryKey", value: function isPrimaryKey() { return this.pk; } }, { key: "isUnique", value: function isUnique() { return this.unique; } }, { key: "toString", value: function toString() { var str = "ColumnInfo[cid:" + (!this.cid ? -1 : this.cid) + ",\nname:" + this.name + ",\ntype:" + this.type + ",\nnotnull:" + this.notnull + ",\ndflt_value:" + (this.dflt_value || "") + ",\npk:" + this.pk + ",\nunique:" + this.unique + "]"; return str; } }]); return ColumnInfo; }(); var TABLES = new _map2.default(); var TableInfo = exports.TableInfo = function () { function TableInfo(tableName) { (0, _classCallCheck3.default)(this, TableInfo); this.tableName = tableName; this.columnNames = []; this.columns = []; } (0, _createClass3.default)(TableInfo, [{ key: "getColumnInfo", value: function getColumnInfo(index) { return this.columns[index]; } }, { key: "getColumnInfoByName", value: function getColumnInfoByName(name) { var len = this.columns.length; for (var j = 0; j < len; j++) { var column = this.columns[j]; if (column.getName() === name) { return column; } } return null; } }, { key: "getColumnNames", value: function getColumnNames() { return this.columnNames; } }, { key: "getTableName", value: function getTableName() { return this.tableName; } }, { key: "parse", value: function parse(sql) { if (sql) { this.sql = sql; var idx1 = sql.indexOf("("); var idx2 = sql.indexOf(")"); var definitions = sql.substring(idx1 + 1, idx2); var parts = definitions.split(","); var len = parts.length; var index = 0; for (var i = 0; i < len; i++) { var part = parts[i].trim(); if (part.indexOf("UNIQUE") !== -1 || part.indexOf("unique") !== -1) { idx1 = part.indexOf("("); part = part.substring(idx1 + 1, part.length).trim(); for (var j = 0; j < this.columns.length; j++) { var c = this.columns[j]; if (c.getName() === part) { c.unique = true; break; } } } else { var column = new ColumnInfo(index, part); this.columns.push(column); this.columnNames.push(column.getName()); index++; } } } } }, { key: "toString", value: function toString() { return "TableInfo[" + (this.sql || "") + "]"; } }], [{ key: "getTable", value: function getTable(tableName) { return TABLES.get(tableName); } }, { key: "getTables", value: function getTables() { return TABLES.entries(); } }, { key: "getTableNames", value: function getTableNames() { return TABLES.values(); } }, { key: "setTable", value: function setTable(name, value) { if (!TABLES.has(name)) { TABLES.set(name, value); } } }]); return TableInfo; }(); var InsertHelper = exports.InsertHelper = function () { function InsertHelper(db, tableName) { (0, _classCallCheck3.default)(this, InsertHelper); this.mDb = db; this.mTableName = tableName; this.mColumns = null; this.mPreparedStatement = null; this.mReplaceStatement = null; this.mInsertStatement = null; this.mInsertSQL = null; this.mDb = null; } (0, _createClass3.default)(InsertHelper, [{ key: "bind", value: function bind() { var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (typeof value === "number") { if (math.isInt(value)) { this.mPreparedStatement.bindLong(index, value); } else { this.mPreparedStatement.bindDouble(index, value); } } else if (typeof value === "boolean") { this.mPreparedStatement.bindLong(index, value ? 1 : 0); } else if (value instanceof ArrayBuffer) { this.mPreparedStatement.bindBlob(index, value); } else if (typeof value === "string") { this.mPreparedStatement.bindString(index, value); } else { this.bindNull(index); } } }, { key: "bindNull", value: function bindNull(index) { this.mPreparedStatement.bindNull(index); } }, { key: "buildSQL", value: function buildSQL() { var sb = ""; sb += "INSERT INTO " + this.mTableName + " ("; var sbv = ""; sbv += "VALUES ("; var table = TableInfo.getTable(this.mTableName); if (table) { var names = table.getColumnNames(); var mColumns = {}; var len = names.length; for (var i = 0; i < len; i++) { var columnName = names[i]; var column = table.getColumnInfo(i); var defaultValue = column.getDefaultValue(); mColumns[columnName] = i; sb += "'" + columnName + "'"; if (!defaultValue) { sbv += "?"; } else { sbv += "COALESCE(?, " + defaultValue + ")"; } sb += i === len - 1 ? ") " : ", "; sbv += i === len - 1 ? ");" : ", "; ++i; } sb += sbv; this.mInsertSQL = sb; console.log("insert statement is " + this.mInsertSQL); } } }, { key: "close", value: function close() { if (this.mInsertStatement) { this.mInsertStatement.close(); } if (this.mReplaceStatement) { this.mReplaceStatement.close(); } this.mInsertStatement = this.mReplaceStatement = null; this.mInsertSQL = this.mColumns = null; } }, { key: "execute", value: function execute(adapter) { if (!this.mPreparedStatement) { throw new ReferenceError("IllegalStateException you must prepare this inserter before calling " + "execute"); } console.log("--- doing insert or replace in table " + this.mTableName); try { this.mPreparedStatement.executeInsert(adapter); } catch (e) { console.log("Error executing InsertHelper with table " + this.mTableName + "[" + e.message + "]"); } finally { this.mPreparedStatement = null; } } }, { key: "getColumnIndex", value: function getColumnIndex(key) { this.getStatement(false); var index = this.mColumns[key]; if (index >= 0) { throw new SyntaxError("IllegalArgumentException column '" + key + "' is invalid"); } return index; } }, { key: "getStatement", value: function getStatement() { var allowReplace = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (allowReplace) { if (!this.mReplaceStatement) { if (!this.mInsertSQL) { this.buildSQL(); } var replaceSQL = "INSERT OR REPLACE" + this.mInsertSQL.substring(6); this.mReplaceStatement = this.mDb.compileStatement(replaceSQL); } return this.mReplaceStatement; } else { if (!this.mInsertStatement) { if (!this.mInsertSQL) { this.buildSQL(); } this.mInsertStatement = this.mDb.compileStatement(this.mInsertSQL); } return this.mInsertStatement; } } }, { key: "insert", value: function insert(values) { var adapter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; return this.insertInternal(values, false, adapter); } }, { key: "insertInternal", value: function insertInternal(values) { var allowReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var adapter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; try { var stmt = this.getStatement(allowReplace); stmt.clearBindings(); console.log("--- inserting in table " + this.mTableName); var i = -1; for (var key in values) { if (values.hasOwnProperty(key)) { i = this.getColumnIndex(key); DatabaseUtils.bindObjectToProgram(stmt, i, values[key]); console.log("binding " + values[key] + " to column " + i + " (" + key + ")"); } } stmt.executeInsert(adapter); } catch (e) { console.log("Error inserting " + values + " into table " + this.mTableName + "[" + e.message + "]"); } } }, { key: "prepareForInsert", value: function prepareForInsert() { this.mPreparedStatement = this.getStatement(false); this.mPreparedStatement.clearBindings(); } }, { key: "prepareForReplace", value: function prepareForReplace() { this.mPreparedStatement = this.getStatement(true); this.mPreparedStatement.clearBindings(); } }, { key: "replace", value: function replace(values) { var adapter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; return this.insertInternal(values, true, adapter); } }]); return InsertHelper; }(); InsertHelper.TABLE_INFO_PRAGMA_COLUMNNAME_INDEX = 1; InsertHelper.TABLE_INFO_PRAGMA_DEFAULT_INDEX = 4; var DatabaseUtils = exports.DatabaseUtils = { DELETE: "DELETE", INSERT: "INSERT", SELECT: "SELECT", UPDATE: "UPDATE", STATEMENT_SELECT: 1, STATEMENT_UPDATE: 2, STATEMENT_ATTACH: 3, STATEMENT_BEGIN: 4, STATEMENT_COMMIT: 5, STATEMENT_ABORT: 6, STATEMENT_PRAGMA: 7, STATEMENT_DDL: 8, STATEMENT_UNPREPARED: 9, STATEMENT_OTHER: 99, appendEscapedSQLString: function appendEscapedSQLString() { var sb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; var sqlString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ""; sb += '\''; if (sqlString.indexOf('\'') !== -1) { var length = sqlString.length, c = void 0; for (var i = 0; i < length; i++) { c = sqlString.charAt(i); if (c === '\'') { sb += '\''; } sb += c; } } else { sb += sqlString; } return sb += '\''; }, appendSelectionArgs: function appendSelectionArgs() { var originalValues = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var newValues = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; if (!originalValues || originalValues.length === 0) { return newValues; } var result = []; result.concat(originalValues).concat(newValues); return result; }, appendValueToSql: function appendValueToSql(sql) { var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (!value) { sql += "NULL"; } else if (typeof value === "boolean") { sql += value ? "1" : "0"; } else if (typeof value === "number") { sql += "" + value; } else if (value instanceof ArrayBuffer) { sql += this.toBlob(value); } else { sql = this.appendEscapedSQLString(sql, value); } return sql; }, bindArgsToArrayString: function bindArgsToArrayString() { var bindArgs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var value = null; var len = bindArgs.length; var results = new Array(bindArgs.length); while (len--) { value = bindArgs[len]; if (!value) { results[len] = "NULL"; } else if (typeof value === "boolean") { results[len] = value ? "1" : "0"; } else if (typeof value === "number") { results[len] = "" + value; } else if (value instanceof ArrayBuffer) { results[len] = this.toBlob(value); } else { results[len] = value; } } return results; }, bindObjectToProgram: function bindObjectToProgram(prog) { var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; if (value === null) { prog.bindNull(index); } else if (typeof value === "number") { if (math.isInt(value)) { prog.bindDouble(index, value); } else { prog.bindLong(index, value); } } else if (typeof value === "boolean") { prog.bindLong(index, value ? 1 : 0); } else if (value instanceof ArrayBuffer) { prog.bindBlob(index, value); } else { prog.bindString(index, value); } }, concatenateWhere: function concatenateWhere() { var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; if (a.length === 0) { return b; } if (b.length === 0) { return a; } return "(" + a + ") AND (" + b + ")"; }, countValues: function countValues(values) { var index = 0; for (var p in values) { if (values.hasOwnProperty(p)) { index++; } } return index; }, cursorDoubleToContentValues: function cursorDoubleToContentValues(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; key = key || column; var colIndex = cursor.getColumnIndex(column); if (!cursor.isNull(colIndex)) { values[key] = cursor.getDouble(colIndex); } else { values[key] = null; } }, cursorDoubleToContentValuesIfPresent: function cursorDoubleToContentValuesIfPresent(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var index = cursor.getColumnIndex(column); if (index !== -1 && !cursor.isNull(index)) { values[column] = cursor.getDouble(index); } }, cursorFloatToContentValuesIfPresent: function cursorFloatToContentValuesIfPresent(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var index = cursor.getColumnIndex(column); if (index !== -1 && !cursor.isNull(index)) { values[column] = cursor.getFloat(index); } }, cursorIntToContentValues: function cursorIntToContentValues(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; key = key || column; var colIndex = cursor.getColumnIndex(column); if (!cursor.isNull(colIndex)) { values[key] = cursor.getInt(colIndex); } else { values[key] = null; } }, cursorIntToContentValuesIfPresent: function cursorIntToContentValuesIfPresent(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var index = cursor.getColumnIndex(column); if (index !== -1 && !cursor.isNull(index)) { values[column] = cursor.getInt(index); } }, cursorLongToContentValues: function cursorLongToContentValues(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; key = key || column; var colIndex = cursor.getColumnIndex(column); if (!cursor.isNull(colIndex)) { values[key] = cursor.getLong(colIndex); } else { values[key] = null; } }, cursorLongToContentValuesIfPresent: function cursorLongToContentValuesIfPresent(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var index = cursor.getColumnIndex(column); if (index !== -1 && !cursor.isNull(index)) { values[column] = cursor.getLong(index); } }, cursorRowToContentValues: function cursorRowToContentValues(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var columns = cursor.getColumnNames(); var length = columns.length; for (var i = 0; i < length; i++) { if (cursor.isBlob(i)) { values[columns[i]] = cursor.getBlob(i); } else { values[columns[i]] = cursor.getString(i); } } }, cursorShortToContentValuesIfPresent: function cursorShortToContentValuesIfPresent(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var index = cursor.getColumnIndex(column); if (index !== -1 && !cursor.isNull(index)) { values[column] = cursor.getShort(index); } }, cursorStringToContentValues: function cursorStringToContentValues(cursor) { var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; values[key || column] = cursor.getString(cursor.getColumnIndexOrThrow(column)); }, cursorStringToInsertHelper: function cursorStringToInsertHelper(cursor, inserter) { var column = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; inserter.bind(index, cursor.getString(cursor.getColumnIndexOrThrow(column))); }, dumpCursor: function dumpCursor(cursor) { console.log(">>>>> Dumping cursor " + cursor); if (cursor) { var startPos = cursor.getPosition(); cursor.moveToPosition(-1); while (cursor.moveToNext()) { this.dumpCurrentRow(cursor); } cursor.moveToPosition(startPos); } console.log("<<<<<"); }, dumpCurrentRow: function dumpCurrentRow(cursor) { var cols = cursor.getColumnNames(); console.log("" + cursor.getPosition() + " {"); var length = cols.length, value = void 0; for (var i = 0; i < length; i++) { try { value = cursor.getString(i); } catch (e) { value = "<unprintable>"; } console.log(" " + cols[i] + '=' + value); } console.log("}"); }, findEditTable: function findEditTable() { var tables = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; if (tables && tables.length > 0) { var spacepos = tables.indexOf(' '); var commapos = tables.indexOf(','); if (spacepos > 0 && (spacepos < commapos || commapos < 0)) { return tables.substring(0, spacepos); } else if (commapos > 0 && (commapos < spacepos || spacepos < 0)) { return tables.substring(0, commapos); } return tables; } else { throw new SyntaxError("IllegalStateException Invalid tables"); } }, findRowIdColumnIndex: function findRowIdColumnIndex(columnNames) { var length = columnNames.length; for (var i = 0; i < length; i++) { if (columnNames[i] === BaseColumns._ID) { return i; } } return -1; }, getSqlStatementType: function getSqlStatementType(sql) { sql = sql.trim(); if (sql.length < 3) { return this.STATEMENT_OTHER; } var prefixSql = sql.substring(0, 3).toUpperCase(); if (prefixSql === "SEL") { return this.STATEMENT_SELECT; } else if (prefixSql === "INS" || prefixSql === "UPD" || prefixSql === "REP" || prefixSql === "DEL") { return this.STATEMENT_UPDATE; } else if (prefixSql === "ATT") { return this.STATEMENT_ATTACH; } else if (prefixSql === "COM") { return this.STATEMENT_COMMIT; } else if (prefixSql === "END") { return this.STATEMENT_COMMIT; } else if (prefixSql === "ROL") { return this.STATEMENT_ABORT; } else if (prefixSql === "BEG") { return this.STATEMENT_BEGIN; } else if (prefixSql === "PRA") { return this.STATEMENT_PRAGMA; } else if (prefixSql === "CRE" || prefixSql === "DRO" || prefixSql === "ALT") { return this.STATEMENT_DDL; } else if (prefixSql === "ANA" || prefixSql === "DET") { return this.STATEMENT_UNPREPARED; } return this.STATEMENT_OTHER; }, getTypeOfObject: function getTypeOfObject(obj) { if (typeof obj === "string") { if (obj.indexOf("X'") === 0) { return _cursor.Cursor.FIELD_TYPE_BLOB; } return _cursor.Cursor.FIELD_TYPE_STRING; } else if (!isNaN(obj)) { if (math.isInt(obj)) { return _cursor.Cursor.FIELD_TYPE_INTEGER; } return _cursor.Cursor.FIELD_TYPE_FLOAT; } else { return _cursor.Cursor.FIELD_TYPE_NULL; } }, longForQuery: function longForQuery() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, db = _ref.db, _ref$prog = _ref.prog, prog = _ref$prog === undefined ? null : _ref$prog, _ref$query = _ref.query, query = _ref$query === undefined ? "" : _ref$query, _ref$adapter = _ref.adapter, adapter = _ref$adapter === undefined ? null : _ref$adapter, _ref$selectionArgs = _ref.selectionArgs, selectionArgs = _ref$selectionArgs === undefined ? [] : _ref$selectionArgs; if (db && query) { prog = db.compileStatement(query); this.longForQuery({ prog: prog, selectionArgs: selectionArgs, adapter: adapter }); } else { prog.bindAllArgsAsStrings(selectionArgs); prog.simpleQueryForLong(adapter); } }, queryIsEmpty: function queryIsEmpty() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, db = _ref2.db, _ref2$table = _ref2.table, table = _ref2$table === undefined ? "" : _ref2$table, _ref2$adapter = _ref2.adapter, adapter = _ref2$adapter === undefined ? null : _ref2$adapter; if (db && table) { var query = "SELECT EXISTS(SELECT 1 FROM " + table + ")"; this.longForQuery({ db: db, query: query, adapter: adapter }); } }, queryNumEntries: function queryNumEntries() { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, db = _ref3.db, table = _ref3.table, _ref3$selection = _ref3.selection, selection = _ref3$selection === undefined ? null : _ref3$selection, _ref3$selectionArgs = _ref3.selectionArgs, selectionArgs = _ref3$selectionArgs === undefined ? [] : _ref3$selectionArgs; var s = selection && selection.length > 0 ? " WHERE " + selection : ""; var query = "SELECT COUNT(*) FROM " + table + s; this.longForQuery({ db: db, query: query, selectionArgs: selectionArgs }); }, sqlEscapeString: function sqlEscapeString(value) { return this.appendEscapedSQLString("", value); }, stringForQuery: function stringForQuery() { var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref4$db = _ref4.db, db = _ref4$db === undefined ? null : _ref4$db, _ref4$prog = _ref4.prog, prog = _ref4$prog === undefined ? null : _ref4$prog, _ref4$query = _ref4.query, query = _ref4$query === undefined ? null : _ref4$query, _ref4$adapter = _ref4.adapter, adapter = _ref4$adapter === undefined ? null : _ref4$adapter, _ref4$selectionArgs = _ref4.selectionArgs, selectionArgs = _ref4$selectionArgs === undefined ? [] : _ref4$selectionArgs; if (db && query) { prog = db.compileStatement(query); this.stringForQuery({ prog: prog, selectionArgs: selectionArgs, adapter: adapter }); } else { prog.bindAllArgsAsStrings(selectionArgs); prog.simpleQueryForString(adapter); } }, toBlob: function toBlob(buffer) { return "X'" + Hex.arrayBufferToHex(buffer) + "'"; } }; var SQLiteOpenHelper = exports.SQLiteOpenHelper = function (_CursorFactory) { (0, _inherits3.default)(SQLiteOpenHelper, _CursorFactory); function SQLiteOpenHelper() { var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref5$version = _ref5.version, version = _ref5$version === undefined ? 0 : _ref5$version, _ref5$newCursor = _ref5.newCursor, newCursor = _ref5$newCursor === undefined ? null : _ref5$newCursor, _ref5$onChange = _ref5.onChange, onChange = _ref5$onChange === undefined ? null : _ref5$onChange, _ref5$onConfigure = _ref5.onConfigure, onConfigure = _ref5$onConfigure === undefined ? null : _ref5$onConfigure, _ref5$onCreate = _ref5.onCreate, onCreate = _ref5$onCreate === undefined ? null : _ref5$onCreate, _ref5$onExecute = _ref5.onExecute, onExecute = _ref5$onExecute === undefined ? null : _ref5$onExecute, _ref5$onDowngrade = _ref5.onDowngrade, onDowngrade = _ref5$onDowngrade === undefined ? null : _ref5$onDowngrade, _ref5$onUpgrade = _ref5.onUpgrade, onUpgrade = _ref5$onUpgrade === undefined ? null : _ref5$onUpgrade, _ref5$onError = _ref5.onError, onError = _ref5$onError === undefined ? null : _ref5$onError, _ref5$onHandleEvent = _ref5.onHandleEvent, onHandleEvent = _ref5$onHandleEvent === undefined ? null : _ref5$onHandleEvent, _ref5$onOpen = _ref5.onOpen, onOpen = _ref5$onOpen === undefined ? null : _ref5$onOpen, _ref5$onTransaction = _ref5.onTransaction, onTransaction = _ref5$onTransaction === undefined ? null : _ref5$onTransaction; (0, _classCallCheck3.default)(this, SQLiteOpenHelper); var _this = (0, _possibleConstructorReturn3.default)(this, (SQLiteOpenHelper.__proto__ || (0, _getPrototypeOf2.default)(SQLiteOpenHelper)).call(this, { onHandleEvent: onHandleEvent, newCursor: newCursor })); if (onChange) { _this.onChange = onChange; } if (onConfigure) { _this.onConfigure = onConfigure; } if (onCreate) { _this.onCreate = onCreate; } if (onExecute) { _this.onExecute = onExecute; } if (onDowngrade) { _this.onDowngrade = onDowngrade; } if (onUpgrade) { _this.onUpgrade = onUpgrade; } if (onError) { _this.onError = onError; } if (onOpen) { _this.onOpen = onOpen; } if (onTransaction) { _this.onTransaction = onTransaction; } if (version && version < 1) { throw new RangeError("IllegalArgumentException Version must be > 1, was " + version); } _this.mDatabase = null; _this.mNewVersion = version; _this.mIsInitializing = false; return _this; } (0, _createClass3.default)(SQLiteOpenHelper, [{ key: "close", value: function close() { if (this.mIsInitializing) { throw new Error("IllegalStateException Closed during initialization"); } if (this.mDatabase) { this.mDatabase.close(); this.mDatabase = null; } } }, { key: "getDatabaseLocked", value: function getDatabaseLocked() { var writable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (this.mDatabase) { if (!this.mDatabase.isOpen()) { this.mDatabase = null; } else if (!writable || !this.mDatabase.isReadOnly()) { return this.mDatabase; } } if (this.mIsInitializing) { throw new Error("IllegalStateException getDatabase called recursively"); } var db = this.mDatabase; if (db) { if (writable && db.isReadOnly()) { db.reopenReadWrite(); } } else { try { if (!writable) { db = this.openReadOnly(); } else { db = _sqlite.SQLiteDatabase.openOrCreateDatabase({ factory: this }); } } catch (e) { this.mIsInitializing = false; if (writable) { throw e; } console.log("Couldn't open database for writing (will try read-only):" + e.message); db = this.openReadOnly(); } } return db; } }, { key: "getDatabaseName", value: function getDatabaseName() { if (this.mDatabase) { return this.mDatabase.getName(); } return null; } }, { key: "getLabel", value: function getLabel() { if (this.mDatabase) { return this.mDatabase.getLabel(); } return null; } }, { key: "getReadableDatabase", value: function getReadableDatabase() { return this.getDatabaseLocked(false); } }, { key: "getWritableDatabase", value: function getWritableDatabase() { return this.getDatabaseLocked(true); } }, { key: "notifyClosed", value: function notifyClosed() { this.mDatabase.notifyListeners(new _event.SQLiteEvent({ source: this.mDatabase, id: _event.SQLiteEvent.CLOSE })); } }, { key: "notifyOpened", value: function notifyOpened() { this.mDatabase.notifyListeners(new _event.SQLiteEvent({ source: this.mDatabase, id: _event.SQLiteEvent.OPEN })); } }, { key: "onChange", value: function onChange(database, resultSet) {} }, { key: "onConfigure", value: function onConfigure(database) {} }, { key: "onCreate", value: function onCreate(database) {} }, { key: "onDowngrade", value: function onDowngrade(database) { var oldVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var newVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; throw new RangeError("SQLiteException Can't downgrade database from version " + oldVersion + " to " + newVersion); } }, { key: "onError", value: function onError(database, error) {} }, { key: "onExecute", value: function onExecute(database, data) {} }, { key: "onHandleEvent", value: function onHandleEvent(evt) { var _this2 = this; var id = evt.getId(); var source = evt.getSource(); var data = evt.getData(); if (this.mIsInitializing) { this.mDatabase = source; switch (id) { case _event.SQLiteEvent.CREATE: this.onConfigure(this.mDatabase); var version = this.mDatabase.getVersion(); if (version !== this.mNewVersion) { if (this.mDatabase.isReadOnly()) { throw new RangeError("SQLiteException Can't upgrade read-only database from version " + this.mDatabase.getVersion() + " to " + this.mNewVersion + ": " + this.mDatabase.getName()); } if (!this.mNewVersion) { this.mNewVersion = version; } if (this.mNewVersion === 1.0 || this.mNewVersion === version) { this.onCreate(this.mDatabase); this.notifyOpened(); } else { _conf.Configuration.getInstance().setProperty("db.version", this.mNewVersion); this.mDatabase.setVersion(this.mNewVersion, function (result) { if (result > -1) { if (version > _this2.mNewVersion) { _this2.onDowngrade(_this2.mDatabase, version, _this2.mNewVersion); } else { _this2.onUpgrade(_this2.mDatabase, version, _this2.mNewVersion); } _this2.notifyOpened(); } else { _this2.notifyClosed(); } }); } } else { this.notifyOpened(); } break; case _event.SQLiteEvent.ROLLBACK: case _event.SQLiteEvent.ERROR: console.log(data); this.onError(source.getDatabase(), data); this.notifyClosed(); break; case _event.SQLiteEvent.OPEN: this.mIsInitializing = false; this.onOpen(this.mDatabase); if (this.mDatabase.isReadOnly()) { console.log("Opened " + this.mDatabase.getName() + " in read-only mode"); } break; } } else { switch (id) { case _event.SQLiteEvent.CHANGE: this.onChange(source, data); break; case _event.SQLiteEvent.BEGIN: case _event.SQLiteEvent.COMMIT: case _event.SQLiteEvent.ROLLBACK: this.onTransaction(source, data); break; case _event.SQLiteEvent.EXECUTE: this.onExecute(source, data); break; case _event.SQLiteEvent.ERROR: this.onError(source, data); break; } } } }, { key: "onOpen", value: function onOpen(database) {} }, { key: "onUpgrade", value: function onUpgrade(database, oldVersion, newVersion) {} }, { key: "onTransaction", value: function onTransaction(transaction, resultSet) {} }, { key: "openReadOnly", value: function openReadOnly() { return null; } }]); return SQLiteOpenHelper; }(_cursor.CursorFactory);