Bug 1252500 - Provide all the necessary columns when retrieving topsites r=rnewman
MozReview-Commit-ID: IYeQ3Z6LLPy
--- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserProvider.java
@@ -799,16 +799,18 @@ public class BrowserProvider extends Sha
db.beginTransaction();
try {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_TOPSITES);
db.execSQL("CREATE TEMP TABLE " + TABLE_TOPSITES + " AS" +
" SELECT " +
Bookmarks._ID + ", " +
+ Combined.BOOKMARK_ID + ", " +
+ Combined.HISTORY_ID + ", " +
Bookmarks.URL + ", " +
Bookmarks.TITLE + ", " +
Combined.HISTORY_ID + ", " +
TopSites.TYPE_TOP + " AS " + TopSites.TYPE +
" FROM " + Combined.VIEW_NAME +
" WHERE " + ignoreForTopSitesWhereClause +
" ORDER BY " + BrowserContract.getFrecencySortOrder(true, false) +
" LIMIT ?",
@@ -817,16 +819,18 @@ public class BrowserProvider extends Sha
totalLimitArgs));
db.execSQL("INSERT INTO " + TABLE_TOPSITES +
// We need to LIMIT _after_ selecting the relevant suggested sites, which requires us to
// use an additional internal subquery, since we cannot LIMIT a subquery that is part of UNION ALL.
// Hence the weird SELECT * FROM (SELECT ...relevant suggested sites... LIMIT ?)
" SELECT * FROM (SELECT " +
Bookmarks._ID + ", " +
+ Bookmarks._ID + " AS " + Combined.BOOKMARK_ID + ", " +
+ " -1 AS " + Combined.HISTORY_ID + ", " +
Bookmarks.URL + ", " +
Bookmarks.TITLE + ", " +
"NULL AS " + Combined.HISTORY_ID + ", " +
TopSites.TYPE_SUGGESTED + " as " + TopSites.TYPE +
" FROM ( " + suggestedSitesBuilder.toString() + " )" +
" WHERE " +
Bookmarks.URL + " NOT IN (SELECT url FROM " + TABLE_TOPSITES + ")" +
" AND " +
@@ -835,31 +839,35 @@ public class BrowserProvider extends Sha
DBUtils.concatenateSelectionArgs(suggestedSiteArgs,
pinnedSitesArgs,
suggestedLimitArgs));
final SQLiteCursor c = (SQLiteCursor) db.rawQuery(
"SELECT " +
Bookmarks._ID + ", " +
+ TopSites.BOOKMARK_ID + ", " +
+ TopSites.HISTORY_ID + ", " +
Bookmarks.URL + ", " +
Bookmarks.TITLE + ", " +
Bookmarks.POSITION + ", " +
Combined.HISTORY_ID + ", " +
TopSites.TYPE +
" FROM " + TABLE_TOPSITES +
" LEFT OUTER JOIN " + // TABLE_IDS +
"(" + freeIDSubquery + ") AS id_results" +
" ON " + DBUtils.qualifyColumn(TABLE_TOPSITES, "rowid") +
" = " + DBUtils.qualifyColumn("id_results", "rowid") +
" UNION ALL " +
"SELECT " +
Bookmarks._ID + ", " +
+ Bookmarks._ID + " AS " + TopSites.BOOKMARK_ID + ", " +
+ " -1 AS " + TopSites.HISTORY_ID + ", " +
Bookmarks.URL + ", " +
Bookmarks.TITLE + ", " +
Bookmarks.POSITION + ", " +
"NULL AS " + Combined.HISTORY_ID + ", " +
TopSites.TYPE_PINNED + " as " + TopSites.TYPE +
" FROM " + TABLE_BOOKMARKS +
" WHERE " + Bookmarks.PARENT + " == ? " +
--- a/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java
@@ -1680,23 +1680,27 @@ public class LocalBrowserDB implements B
// that inside out topsites SQL query would be difficult given the other processing we're already doing there).
final int blanksRequired = suggestedRangeLimit - topSitesCursor.getCount();
if (blanksRequired <= 0) {
return topSitesCursor;
}
MatrixCursor blanksCursor = new MatrixCursor(new String[] {
- Bookmarks._ID,
- Bookmarks.URL,
- Bookmarks.TITLE,
- Bookmarks.TYPE});
+ TopSites._ID,
+ TopSites.BOOKMARK_ID,
+ TopSites.HISTORY_ID,
+ TopSites.URL,
+ TopSites.TITLE,
+ TopSites.TYPE});
final MatrixCursor.RowBuilder rb = blanksCursor.newRow();
rb.add(-1);
+ rb.add(-1);
+ rb.add(-1);
rb.add("");
rb.add("");
rb.add(TopSites.TYPE_BLANK);
return new MergeCursor(new Cursor[] {topSitesCursor, blanksCursor});
}
}