Bug 888784 - Make FormHistory.count use Sqlite.jsm database backend. r?mak
MozReview-Commit-ID: 53gec0qQL1y
--- a/toolkit/components/satchel/FormHistory.jsm
+++ b/toolkit/components/satchel/FormHistory.jsm
@@ -260,25 +260,16 @@ function makeQueryPredicates(aQueryData,
return field + " = :" + field;
}).join(delimiter);
}
/**
* Storage statement creation and parameter binding
*/
-function makeCountStatement(aSearchData) {
- let query = "SELECT COUNT(*) AS numEntries FROM moz_formhistory";
- let queryTerms = makeQueryPredicates(aSearchData);
- if (queryTerms) {
- query += " WHERE " + queryTerms;
- }
- return dbCreateAsyncStatement(query, aSearchData);
-}
-
function makeSearchStatement(aSearchData, aSelectTerms) {
let query = "SELECT " + aSelectTerms.join(", ") + " FROM moz_formhistory";
let queryTerms = makeQueryPredicates(aSearchData);
if (queryTerms) {
query += " WHERE " + queryTerms;
}
return dbCreateAsyncStatement(query, aSearchData);
@@ -1068,16 +1059,40 @@ this.FormHistory = {
get db() {
return DB.conn;
},
get enabled() {
return Prefs.enabled;
},
+ _prepareHandlers(handlers) {
+ let defaultHandlers = {
+ handleResult: NOOP,
+ handleError: NOOP,
+ handleCompletion: NOOP,
+ };
+
+ if (!handlers) {
+ return defaultHandlers;
+ }
+
+ if (handlers.handleResult) {
+ defaultHandlers.handleResult = handlers.handleResult;
+ }
+ if (handlers.handleError) {
+ defaultHandlers.handleError = handlers.handleError;
+ }
+ if (handlers.handleCompletion) {
+ defaultHandlers.handleCompletion = handlers.handleCompletion;
+ }
+
+ return defaultHandlers;
+ },
+
search(aSelectTerms, aSearchData, aCallbacks) {
// if no terms selected, select everything
if (!aSelectTerms) {
aSelectTerms = validFields;
}
validateSearchData(aSearchData, "Search");
let stmt = makeSearchStatement(aSearchData, aSelectTerms);
@@ -1111,46 +1126,42 @@ this.FormHistory = {
);
}
},
};
stmt.executeAsync(handlers);
},
- count(aSearchData, aCallbacks) {
+ count(aSearchData, aHandlers) {
validateSearchData(aSearchData, "Count");
- let stmt = makeCountStatement(aSearchData);
- let handlers = {
- handleResult(aResultSet) {
- let row = aResultSet.getNextRow();
- let count = row.getResultByName("numEntries");
- if (aCallbacks && aCallbacks.handleResult) {
- aCallbacks.handleResult(count);
- }
- },
+
+ let query = "SELECT COUNT(*) AS numEntries FROM moz_formhistory";
+ let queryTerms = makeQueryPredicates(aSearchData);
+ if (queryTerms) {
+ query += " WHERE " + queryTerms;
+ }
+
+ let handlers = this._prepareHandlers(aHandlers);
- handleError(aError) {
- if (aCallbacks && aCallbacks.handleError) {
- aCallbacks.handleError(aError);
+ return new Promise((resolve, reject) => {
+ this.db.then(async conn => {
+ try {
+ let rows = await conn.executeCached(query, aSearchData);
+ let count = rows[0].getResultByName("numEntries");
+ handlers.handleResult(count);
+ handlers.handleCompletion(0);
+ resolve(count);
+ } catch (e) {
+ handlers.handleError(e);
+ handlers.handleCompletion(1);
+ reject(e);
}
- },
-
- handleCompletion(aReason) {
- if (aCallbacks && aCallbacks.handleCompletion) {
- aCallbacks.handleCompletion(
- aReason == Ci.mozIStorageStatementCallback.REASON_FINISHED ?
- 0 :
- 1
- );
- }
- },
- };
-
- stmt.executeAsync(handlers);
+ });
+ });
},
update(aChanges, aCallbacks) {
// Used to keep track of how many searches have been started. When that number
// are finished, updateFormHistoryWrite can be called.
let numSearches = 0;
let completedSearches = 0;
let searchFailed = false;