libsqlite
Version:
Legacy SQLITE library for browser
1,135 lines (1,065 loc) • 43.8 kB
JavaScript
"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);