libsqlite
Version:
Legacy SQLITE library for browser
821 lines (756 loc) • 35.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SQLiteQueryBuilder = exports.SQLiteStatement = exports.SQLiteQuery = exports.SQLiteProgram = undefined;
var _map = require("babel-runtime/core-js/map");
var _map2 = _interopRequireDefault(_map);
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 _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _event = require("./event");
var _helper = require("./helper");
var _cursor = require("./cursor");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var SQLiteProgram = exports.SQLiteProgram = function () {
function SQLiteProgram() {
var _this = this;
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
database = _ref.database,
_ref$editTable = _ref.editTable,
editTable = _ref$editTable === undefined ? "" : _ref$editTable,
_ref$query = _ref.query,
query = _ref$query === undefined ? "" : _ref$query,
_ref$bindArgs = _ref.bindArgs,
bindArgs = _ref$bindArgs === undefined ? [] : _ref$bindArgs;
(0, _classCallCheck3.default)(this, SQLiteProgram);
if (!database) {
throw new ReferenceError("NullPointerException database is null");
}
this.mDatabase = database;
this.mSql = query.trim();
this.mBindArgs = [];
this.mSession = null;
this.mReadOnly = true;
var n = _helper.DatabaseUtils.getSqlStatementType(this.mSql);
switch (n) {
case _helper.DatabaseUtils.STATEMENT_BEGIN:
case _helper.DatabaseUtils.STATEMENT_COMMIT:
case _helper.DatabaseUtils.STATEMENT_ABORT:
this.mReadOnly = false;
this.mColumnNames = [];
this.mNumParameters = 0;
break;
default:
var tableInfo = _helper.TableInfo.getTable(editTable);
if (!tableInfo) {
var _query = "SELECT sql FROM sqlite_master WHERE name = '" + editTable + "'";
this.mDatabase.beginTransaction(_query, [], new _event.SQLiteTransactionListener({
onBegin: function onBegin(session) {},
onCommit: function onCommit(session, resultSet) {
var rows = resultSet.rows;
var len = rows.length;
for (var i = 0; i < len; i++) {
var row = rows.item(i);
for (var p in row) {
if (row.hasOwnProperty(p)) {
if (p === "sql") {
var statements = row[p];
var _tableInfo = new _helper.TableInfo(editTable);
_tableInfo.parse(statements);
_this.mColumnNames = _tableInfo.getColumnNames();
_this.mNumParameters = _this.mColumnNames.length;
_helper.TableInfo.setTable(editTable, _tableInfo);
_this.notifyChange(_tableInfo);
break;
}
}
}
}
},
onRollback: function onRollback(session, error) {
_this.notifyError(error);
}
}));
} else {
this.mColumnNames = tableInfo.getColumnNames();
this.mNumParameters = this.mColumnNames.length;
this.setBindings(bindArgs);
this.mDatabase.notifyListeners(new _event.SQLiteEvent({
source: this,
id: _event.SQLiteEvent.CHANGE,
data: tableInfo
}));
}
break;
}
}
(0, _createClass3.default)(SQLiteProgram, [{
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 (index < 1 || index > this.mNumParameters) {
console.log("index: " + index + ", value: " + value + ", mNumParameters: " + this.mNumParameters);
throw new RangeError("IllegalArgumentException Cannot bind argument at index " + index + " because the index is out of range. " + "The statement has " + this.mNumParameters + " parameters.");
}
this.mBindArgs[index - 1] = value;
}
}, {
key: "bindAllArgsAsStrings",
value: function bindAllArgsAsStrings() {
var bindArgs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
if (bindArgs) {
for (var i = bindArgs.length; i !== 0; i--) {
this.bindString(i, bindArgs[i - 1]);
}
}
}
}, {
key: "bindBlob",
value: function bindBlob() {
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (value === null) {
throw new ReferenceError("IllegalArgumentException the bind value at index " + index + " is null");
}
this.bind(index, _helper.DatabaseUtils.toBlob(value));
}
}, {
key: "bindDouble",
value: function bindDouble() {
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
this.bind(index, value);
}
}, {
key: "bindLong",
value: function bindLong() {
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
this.bind(index, value);
}
}, {
key: "bindNull",
value: function bindNull() {
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
this.bind(index, null);
}
}, {
key: "bindString",
value: function bindString() {
var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (value === null) {
throw new RangeError("IllegalArgumentException the bind value at index " + index + " is null");
}
this.bind(index, value);
}
}, {
key: "clearBindings",
value: function clearBindings() {
if (this.mBindArgs) {
this.mBindArgs = new Array(this.mNumParameters);
}
}
}, {
key: "execute",
value: function execute(listener) {
this.mDatabase.beginTransaction(this.getQuery(), this.getBindArgs(), listener);
}
}, {
key: "getBindArgs",
value: function getBindArgs() {
return this.mBindArgs;
}
}, {
key: "getColumnNames",
value: function getColumnNames() {
return this.mColumnNames;
}
}, {
key: "getDatabase",
value: function getDatabase() {
return this.mDatabase;
}
}, {
key: "getQuery",
value: function getQuery() {
return this.mSql;
}
}, {
key: "isReadOnly",
value: function isReadOnly() {
return this.mReadOnly;
}
}, {
key: "notifyChange",
value: function notifyChange(data) {
this.mDatabase.notifyListeners(new _event.SQLiteEvent({
source: this.mDatabase, id: _event.SQLiteEvent.CHANGE, data: data
}));
}
}, {
key: "notifyError",
value: function notifyError(error) {
this.mDatabase.notifyListeners(new _event.SQLiteEvent({
source: this.mDatabase, id: _event.SQLiteEvent.ERROR, data: error
}));
}
}, {
key: "setBindings",
value: function setBindings() {
var bindArgs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
if (bindArgs && bindArgs.length > this.mNumParameters) {
throw new RangeError("IllegalArgumentException Too many bind arguments. " + bindArgs.length + " arguments were provided but the statement needs " + this.mNumParameters + " arguments.");
}
if (this.mNumParameters !== 0) {
this.mBindArgs = bindArgs;
}
}
}, {
key: "setQuery",
value: function setQuery() {
var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (query) {
this.mSql = query.trim();
}
}
}, {
key: "toString",
value: function toString() {
return "SQLiteProgram: " + this.getQuery();
}
}]);
return SQLiteProgram;
}(); /** @babel */
var SQLiteQuery = exports.SQLiteQuery = function (_SQLiteProgram) {
(0, _inherits3.default)(SQLiteQuery, _SQLiteProgram);
function SQLiteQuery() {
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
database = _ref2.database,
_ref2$editTable = _ref2.editTable,
editTable = _ref2$editTable === undefined ? "" : _ref2$editTable,
_ref2$query = _ref2.query,
query = _ref2$query === undefined ? "" : _ref2$query,
_ref2$bindArgs = _ref2.bindArgs,
bindArgs = _ref2$bindArgs === undefined ? [] : _ref2$bindArgs;
(0, _classCallCheck3.default)(this, SQLiteQuery);
return (0, _possibleConstructorReturn3.default)(this, (SQLiteQuery.__proto__ || (0, _getPrototypeOf2.default)(SQLiteQuery)).call(this, { database: database, editTable: editTable, query: query, bindArgs: bindArgs }));
}
(0, _createClass3.default)(SQLiteQuery, [{
key: "toString",
value: function toString() {
return "SQLiteQuery: " + this.getQuery();
}
}]);
return SQLiteQuery;
}(SQLiteProgram);
var STATEMENTS = new _map2.default();
var SQLiteStatement = exports.SQLiteStatement = function (_SQLiteProgram2) {
(0, _inherits3.default)(SQLiteStatement, _SQLiteProgram2);
function SQLiteStatement() {
var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
database = _ref3.database,
_ref3$editTable = _ref3.editTable,
editTable = _ref3$editTable === undefined ? "" : _ref3$editTable,
_ref3$query = _ref3.query,
query = _ref3$query === undefined ? "" : _ref3$query,
_ref3$bindArgs = _ref3.bindArgs,
bindArgs = _ref3$bindArgs === undefined ? [] : _ref3$bindArgs;
(0, _classCallCheck3.default)(this, SQLiteStatement);
return (0, _possibleConstructorReturn3.default)(this, (SQLiteStatement.__proto__ || (0, _getPrototypeOf2.default)(SQLiteStatement)).call(this, { database: database, editTable: editTable, query: query, bindArgs: bindArgs }));
}
(0, _createClass3.default)(SQLiteStatement, [{
key: "commitAdapter",
value: function commitAdapter() {
var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var session = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var resultSet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (adapter) {
var database = this.mDatabase;
var table = _helper.TableInfo.getTable(adapter.getTable());
adapter.commit(session, new _cursor.ExecCursor({ database: database, table: table, resultSet: resultSet }));
}
}
}, {
key: "createTransitionListener",
value: function createTransitionListener() {
var _this4 = this;
var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
return new _event.SQLiteTransactionListener({
onBegin: function onBegin(session) {
if (adapter) {
adapter.begin(session);
}
},
onCommit: function onCommit(session, resultSet) {
if (adapter) {
_this4.commitAdapter(adapter, session, resultSet);
} else {
_this4.notifyExecute(resultSet);
}
},
onRollback: function onRollback(session, error) {
if (adapter && adapter.canCatchError()) {
adapter.rollback(session, error);
} else {
_this4.notifyError(error);
}
}
});
}
}, {
key: "execute",
value: function execute() {
var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var sql = this.getQuery();
var parameters = this.getBindArgs();
this.mDatabase.beginTransaction(sql, parameters, this.createTransitionListener(adapter));
}
}, {
key: "executeInsert",
value: function executeInsert() {
var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var sql = this.getQuery();
var parameters = this.getBindArgs();
if (!(sql.indexOf(_helper.DatabaseUtils.INSERT) !== -1 || sql.indexOf(_helper.DatabaseUtils.INSERT.toLowerCase()) !== -1)) {
this.notifyError(new SyntaxError("SQLException " + sql + " not an insert statement"));
} else {
this.mDatabase.beginTransaction(sql, parameters, this.createTransitionListener(adapter));
}
}
}, {
key: "executeUpdateDelete",
value: function executeUpdateDelete() {
var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var sql = this.getQuery();
var parameters = this.getBindArgs();
if (!(sql.indexOf(_helper.DatabaseUtils.UPDATE) !== -1 || sql.indexOf(_helper.DatabaseUtils.UPDATE.toLowerCase()) !== -1 || sql.indexOf(_helper.DatabaseUtils.DELETE) !== -1 || sql.indexOf(_helper.DatabaseUtils.DELETE.toLowerCase()) !== -1)) {
this.notifyError(new SyntaxError("SQLException " + sql + " not an update or delete statement"));
} else {
this.mDatabase.beginTransaction(sql, parameters, this.createTransitionListener(adapter));
}
}
}, {
key: "rollbackAdapter",
value: function rollbackAdapter() {
var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var session = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (adapter) {
adapter.rollback(session, error);
} else {
this.notifyExecute(error);
}
}
}, {
key: "simpleQueryForLong",
value: function simpleQueryForLong() {
var _this5 = this;
var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var sql = this.getQuery();
var parameters = this.getBindArgs();
this.mDatabase.beginTransaction(sql, parameters, new _event.SQLiteTransactionListener({
onBegin: function onBegin(session) {
if (adapter) {
adapter.begin(session);
}
},
onCommit: function onCommit(session, resultSet) {
var error = null;
var rows = resultSet.rows;
if (rows.length !== 1) {
error = new ReferenceError("SQLException " + sql + " no result found");
_this5.rollbackAdapter(adapter, session, error);
} else {
var row = rows[0];
for (var p in row) {
if (row.hasOwnProperty(p)) {
if (typeof row[p] !== "number") {
error = new TypeError("SQLException " + row[p] + " not a number");
_this5.rollbackAdapter(adapter, session, error);
break;
} else {
if (adapter) {
_this5.commitAdapter(adapter, session, resultSet);
} else {
_this5.notifyExecute(row[p]);
}
break;
}
}
}
}
},
onRollback: function onRollback(session, error) {
if (adapter && adapter.canCatchError()) {
adapter.rollback(session, error);
} else {
_this5.notifyError(error);
}
}
}));
}
}, {
key: "simpleQueryForString",
value: function simpleQueryForString() {
var _this6 = this;
var adapter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var sql = this.getQuery();
var parameters = this.getBindArgs();
this.mDatabase.beginTransaction(sql, parameters, new _event.SQLiteTransactionListener({
onBegin: function onBegin(session) {
if (adapter) {
adapter.begin(session);
}
},
onCommit: function onCommit(session, resultSet) {
var error = null;
var rows = resultSet.rows;
if (rows.length !== 1) {
error = new ReferenceError("SQLException " + sql + " no result found");
_this6.rollbackAdapter(adapter, session, error);
} else {
var row = rows[0];
for (var p in row) {
if (row.hasOwnProperty(p)) {
if (typeof row[p] !== "string") {
error = new TypeError("SQLException " + row[p] + " not a string");
_this6.rollbackAdapter(adapter, session, error);
break;
} else {
if (adapter) {
_this6.commitAdapter(adapter, session, resultSet);
} else {
_this6.notifyExecute(row[p]);
}
break;
}
}
}
}
},
onRollback: function onRollback(session, error) {
if (adapter && adapter.canCatchError()) {
adapter.rollback(session, error);
} else {
_this6.notifyError(error);
}
}
}));
}
}, {
key: "notifyExecute",
value: function notifyExecute(result) {
this.mDatabase.notifyListeners(new _event.SQLiteEvent({
source: this,
id: _event.SQLiteEvent.EXECUTE,
data: result
}));
}
}, {
key: "toString",
value: function toString() {
return "SQLiteStatement: " + this.getQuery();
}
}], [{
key: "getStatements",
value: function getStatements(sql) {
return STATEMENTS.get(sql);
}
}, {
key: "setStatements",
value: function setStatements(sql, statment) {
if (!STATEMENTS.has(sql)) {
STATEMENTS.set(sql, statment);
}
return STATEMENTS.get(sql);
}
}]);
return SQLiteStatement;
}(SQLiteProgram);
var SQLiteQueryBuilder = exports.SQLiteQueryBuilder = function () {
function SQLiteQueryBuilder() {
(0, _classCallCheck3.default)(this, SQLiteQueryBuilder);
this.mProjectionMap = null;
this.mTables = null;
this.mWhereClause = null;
this.mDistinct = false;
this.mFactory = null;
this.mStrict = false;
}
(0, _createClass3.default)(SQLiteQueryBuilder, [{
key: "appendWhere",
value: function appendWhere() {
var inWhere = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!this.mWhereClause) {
this.mWhereClause = "";
}
if (this.mWhereClause.length === 0) {
this.mWhereClause += '(';
}
this.mWhereClause += inWhere;
}
}, {
key: "appendWhereEscapeString",
value: function appendWhereEscapeString() {
var inWhere = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!this.mWhereClause) {
this.mWhereClause = "";
}
if (this.mWhereClause.length === 0) {
this.mWhereClause += '(';
}
this.mWhereClause = _helper.DatabaseUtils.appendEscapedSQLString(this.mWhereClause, inWhere);
}
}, {
key: "buildQuery",
value: function buildQuery() {
var projectionIn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var selection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var groupBy = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var having = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
var sortOrder = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
var limit = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
var projection = this.computeProjection(projectionIn);
var where = "";
var hasBaseWhereClause = this.mWhereClause && this.mWhereClause.length > 0;
if (hasBaseWhereClause) {
where += this.mWhereClause;
where += ')';
}
if (selection && selection.length > 0) {
if (hasBaseWhereClause) {
where += " AND ";
}
where += '(' + selection + ')';
}
return SQLiteQueryBuilder.buildQueryString(this.mDistinct, this.mTables, projection, where, groupBy, having, sortOrder, limit);
}
}, {
key: "buildUnionQuery",
value: function buildUnionQuery() {
var subQueries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var sortOrder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
var query = "";
var subQueryCount = subQueries.length;
var unionOperator = this.mDistinct ? " UNION " : " UNION ALL ";
for (var i = 0; i < subQueryCount; i++) {
if (i > 0) {
query += unionOperator;
}
query += subQueries[i];
}
SQLiteQueryBuilder.appendClause(query, " ORDER BY ", sortOrder);
SQLiteQueryBuilder.appendClause(query, " LIMIT ", limit);
return query;
}
}, {
key: "buildUnionSubQuery",
value: function buildUnionSubQuery() {
var typeDiscriminatorColumn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var unionColumns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var columnsPresentInTable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var computedColumnsOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
var typeDiscriminatorValue = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
var selection = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "";
var groupBy = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : "";
var having = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : "";
var unionColumnsCount = unionColumns.length;
var projectionIn = new Array(unionColumnsCount);
for (var i = 0; i < unionColumnsCount; i++) {
var unionColumn = unionColumns[i];
if (unionColumn === typeDiscriminatorColumn) {
projectionIn[i] = "'" + typeDiscriminatorValue + "' AS " + typeDiscriminatorColumn;
} else if (i <= computedColumnsOffset || columnsPresentInTable.indexOf(unionColumn) !== -1) {
projectionIn[i] = unionColumn;
} else {
projectionIn[i] = "NULL AS " + unionColumn;
}
}
return this.buildQuery(projectionIn, selection, groupBy, having, null, null);
}
}, {
key: "computeProjection",
value: function computeProjection() {
var projectionIn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
if (projectionIn && projectionIn.length > 0) {
if (this.mProjectionMap) {
var length = projectionIn.length;
var projection = new Array(length);
for (var i = 0; i < length; i++) {
var userColumn = projectionIn[i];
var column = this.mProjectionMap[userColumn];
if (column) {
projection[i] = column;
continue;
}
if (!this.mStrict && (userColumn.indexOf(" AS ") !== -1 || userColumn.indexOf(" as ") !== -1)) {
projection[i] = userColumn;
continue;
}
throw new RangeError("IllegalArgumentException Invalid column " + projectionIn[i]);
}
return projection;
} else {
return projectionIn;
}
} else if (this.mProjectionMap) {
var _projection = [];
for (var p in this.mProjectionMap) {
if (this.mProjectionMap.hasOwnProperty(p)) {
if (p === _helper.BaseColumns._COUNT) {
continue;
}
_projection.push(this.mProjectionMap[p]);
}
}
return _projection;
}
return null;
}
}, {
key: "getTables",
value: function getTables() {
return this.mTables;
}
}, {
key: "query",
value: function query() {
var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
database = _ref4.database,
_ref4$projection = _ref4.projection,
projection = _ref4$projection === undefined ? [] : _ref4$projection,
_ref4$selection = _ref4.selection,
selection = _ref4$selection === undefined ? "" : _ref4$selection,
_ref4$selectionArgs = _ref4.selectionArgs,
selectionArgs = _ref4$selectionArgs === undefined ? [] : _ref4$selectionArgs,
_ref4$groupBy = _ref4.groupBy,
groupBy = _ref4$groupBy === undefined ? "" : _ref4$groupBy,
_ref4$having = _ref4.having,
having = _ref4$having === undefined ? "" : _ref4$having,
_ref4$sortOrder = _ref4.sortOrder,
sortOrder = _ref4$sortOrder === undefined ? "" : _ref4$sortOrder,
_ref4$limit = _ref4.limit,
limit = _ref4$limit === undefined ? "" : _ref4$limit,
_ref4$adapter = _ref4.adapter,
adapter = _ref4$adapter === undefined ? null : _ref4$adapter;
if (!database) {
throw new ReferenceError("NullPointerException database is null");
}
if (!this.mTables) {
return null;
}
if (this.mStrict && selection && selection.length > 0) {
var sqlForValidation = this.buildQuery(projection, "(" + selection + ")", groupBy, having, sortOrder, limit);
this.validateQuerySql(database, sqlForValidation);
}
var query = this.buildQuery(projection, selection, groupBy, having, sortOrder, limit);
console.log("Performing query: " + query);
var editTable = _helper.DatabaseUtils.findEditTable(this.mTables);
var cursorFactory = this.mFactory;
database.rawQueryWithFactory({ cursorFactory: cursorFactory, query: query, selectionArgs: selectionArgs, editTable: editTable, adapter: adapter });
}
}, {
key: "setCursorFactory",
value: function setCursorFactory(factory) {
this.mFactory = factory;
}
}, {
key: "setDistinct",
value: function setDistinct(distinct) {
this.mDistinct = distinct;
}
}, {
key: "setProjectionMap",
value: function setProjectionMap(columnMap) {
this.mProjectionMap = columnMap;
}
}, {
key: "setStrict",
value: function setStrict(flag) {
this.mStrict = flag;
}
}, {
key: "setTables",
value: function setTables(inTables) {
this.mTables = inTables;
}
}, {
key: "validateQuerySql",
value: function validateQuerySql(db, sql) {}
}], [{
key: "appendClause",
value: function appendClause() {
var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var clause = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
if (clause.length > 0) {
query += name + clause;
}
return query;
}
}, {
key: "appendColumns",
value: function appendColumns() {
var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var n = columns.length;
for (var i = 0; i < n; i++) {
var column = columns[i];
if (column) {
if (i > 0) {
query += ", ";
}
query += column;
}
}
return query += ' ';
}
}, {
key: "buildQueryString",
value: function buildQueryString() {
var distinct = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var tables = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
var columns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var where = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
var groupBy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : "";
var having = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : "";
var orderBy = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : "";
var limit = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : "";
if (groupBy && groupBy.length === 0 && having && having.length > 0) {
throw new SyntaxError("IllegalArgumentException HAVING clauses are only permitted when using a groupBy clause");
}
if (limit && limit.length > 0 && !limit.test('^[0-9]+$')) {
throw new TypeError("IllegalArgumentException invalid LIMIT clauses:" + limit);
}
var query = "SELECT ";
if (distinct) {
query += "DISTINCT ";
}
if (columns && columns.length > 0) {
query = SQLiteQueryBuilder.appendColumns(query, columns);
} else {
query += "* ";
}
query += "FROM ";
query += tables;
query = SQLiteQueryBuilder.appendClause(query, " WHERE ", where);
query = SQLiteQueryBuilder.appendClause(query, " GROUP BY ", groupBy);
query = SQLiteQueryBuilder.appendClause(query, " HAVING ", having);
query = SQLiteQueryBuilder.appendClause(query, " ORDER BY ", orderBy);
query = SQLiteQueryBuilder.appendClause(query, " LIMIT ", limit);
return query;
}
}]);
return SQLiteQueryBuilder;
}();