Bug 888784 - Make FormHistory.search use Sqlite.jsm database backend. r?mak
MozReview-Commit-ID: J1ElTJpWHza
--- a/toolkit/components/satchel/FormHistory.jsm
+++ b/toolkit/components/satchel/FormHistory.jsm
@@ -1083,57 +1083,68 @@ this.FormHistory = {
}
if (handlers.handleCompletion) {
defaultHandlers.handleCompletion = handlers.handleCompletion;
}
return defaultHandlers;
},
- search(aSelectTerms, aSearchData, aCallbacks) {
+ search(aSelectTerms, aSearchData, aRowFuncOrHandlers) {
// if no terms selected, select everything
if (!aSelectTerms) {
aSelectTerms = validFields;
}
validateSearchData(aSearchData, "Search");
- let stmt = makeSearchStatement(aSearchData, aSelectTerms);
+ let query = "SELECT " + aSelectTerms.join(", ") + " FROM moz_formhistory";
+ let queryTerms = makeQueryPredicates(aSearchData);
+ if (queryTerms) {
+ query += " WHERE " + queryTerms;
+ }
+
+ let handlers;
- let handlers = {
- handleResult(aResultSet) {
- for (let row = aResultSet.getNextRow(); row; row = aResultSet.getNextRow()) {
- let result = {};
- for (let field of aSelectTerms) {
- result[field] = row.getResultByName(field);
- }
+ if (typeof aRowFuncOrHandlers == "function") {
+ handlers = this._prepareHandlers();
+ handlers.handleResult = aRowFuncOrHandlers;
+ } else if (typeof aRowFuncOrHandlers == "object") {
+ handlers = this._prepareHandlers(aRowFuncOrHandlers);
+ }
- if (aCallbacks && aCallbacks.handleResult) {
- aCallbacks.handleResult(result);
- }
- }
- },
+ let allResults = [];
- handleError(aError) {
- if (aCallbacks && aCallbacks.handleError) {
- aCallbacks.handleError(aError);
- }
- },
+ return new Promise((resolve, reject) => {
+ this.db.then(async conn => {
+ try {
+ await conn.executeCached(query, aSearchData, row => {
+ let result = {};
+ for (let field of aSelectTerms) {
+ result[field] = row.getResultByName(field);
+ }
- handleCompletion(aReason) {
- if (aCallbacks && aCallbacks.handleCompletion) {
- aCallbacks.handleCompletion(
- aReason == Ci.mozIStorageStatementCallback.REASON_FINISHED ?
- 0 :
- 1
- );
+ if (handlers) {
+ handlers.handleResult(result);
+ } else {
+ allResults.push(result);
+ }
+ });
+ if (handlers) {
+ handlers.handleCompletion(0);
+ }
+ resolve(allResults);
+ } catch (e) {
+ if (handlers) {
+ handlers.handleError(e);
+ handlers.handleCompletion(1);
+ }
+ reject(e);
}
- },
- };
-
- stmt.executeAsync(handlers);
+ });
+ });
},
count(aSearchData, aHandlers) {
validateSearchData(aSearchData, "Count");
let query = "SELECT COUNT(*) AS numEntries FROM moz_formhistory";
let queryTerms = makeQueryPredicates(aSearchData);
if (queryTerms) {