UNPKG

libsqlite

Version:

Legacy SQLITE library for browser

821 lines (756 loc) 35.6 kB
"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; }();