Niedzielski has uploaded a new change for review. https://gerrit.wikimedia.org/r/284610
Change subject: Fix optional table joins and unmarshalling ...................................................................... Fix optional table joins and unmarshalling Several of the new table joins expect the rows of the right hand table to be optional. This requires a _left_ join, not just a join. Additionally, Cursors returned from join queries always have these columns but they may be empty. Instead of checking for the presence of a column name to determine whether the joined part exists or not, check that a field with a nonnull constraint is nonnull. Change-Id: I3da94a9953f880e03cac4b3ab40f9c8c73b21110 --- M app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java M app/src/main/java/org/wikipedia/database/contract/UserOptionContract.java M app/src/main/java/org/wikipedia/page/PageTitle.java M app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageHttpRow.java M app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java M app/src/main/java/org/wikipedia/useroption/database/UserOptionRow.java 6 files changed, 10 insertions(+), 9 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/10/284610/1 diff --git a/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java b/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java index fece015..b3bc3e5 100644 --- a/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java +++ b/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java @@ -140,7 +140,7 @@ } public static final class HttpWithPage implements Page { - public static final String TABLES = ":httpTbl join :tbl on (:tbl.keyCol = :httpTbl.keyCol)" + public static final String TABLES = ":httpTbl left join :tbl on (:tbl.keyCol = :httpTbl.keyCol)" .replaceAll(":tbl.keyCol", KEY.qualifiedName()) .replaceAll(":httpTbl.keyCol", HttpCol.KEY.qualifiedName()) .replaceAll(":httpTbl", TABLE_HTTP) @@ -165,7 +165,7 @@ } public static final class DiskWithPage implements Page { - public static final String TABLES = ":diskTbl join :tbl on (:tbl.keyCol = :diskTbl.keyCol)" + public static final String TABLES = ":diskTbl left join :tbl on (:tbl.keyCol = :diskTbl.keyCol)" .replaceAll(":tbl.keyCol", KEY.qualifiedName()) .replaceAll(":diskTbl.keyCol", DiskCol.KEY.qualifiedName()) .replaceAll(":diskTbl", TABLE_DISK) diff --git a/app/src/main/java/org/wikipedia/database/contract/UserOptionContract.java b/app/src/main/java/org/wikipedia/database/contract/UserOptionContract.java index 6c275e6..97b5100 100644 --- a/app/src/main/java/org/wikipedia/database/contract/UserOptionContract.java +++ b/app/src/main/java/org/wikipedia/database/contract/UserOptionContract.java @@ -73,7 +73,7 @@ } interface HttpWithOption extends Option { - String TABLES = ":httpTbl join :tbl on (:tbl.keyCol = :httpTbl.keyCol)" + String TABLES = ":httpTbl left join :tbl on (:tbl.keyCol = :httpTbl.keyCol)" .replaceAll(":tbl.keyCol", KEY.qualifiedName()) .replaceAll(":httpTbl.keyCol", HttpCol.KEY.qualifiedName()) .replaceAll(":httpTbl", TABLE_HTTP) @@ -90,4 +90,4 @@ String[] PROJECTION = DbUtil.qualifiedNames(ID, KEY, VAL, HTTP_KEY, HTTP_STATUS, HTTP_TIMESTAMP, HTTP_TRANSACTION_ID); } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/wikipedia/page/PageTitle.java b/app/src/main/java/org/wikipedia/page/PageTitle.java index 74f8fc1..9b7e871 100644 --- a/app/src/main/java/org/wikipedia/page/PageTitle.java +++ b/app/src/main/java/org/wikipedia/page/PageTitle.java @@ -47,6 +47,7 @@ * * [[Utilisateur:Deskana]] on frwiki will have a namespace of "Utilisateur", even if you got * to the page by going to [[User:Deskana]] and having MediaWiki automatically redirect you. */ + // TODO: use Namespace. Clients shouldn't have to bear this knowledge to access a String. @Nullable private final String namespace; private final String text; private final String fragment; diff --git a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageHttpRow.java b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageHttpRow.java index 8cf5479..fd438a3 100644 --- a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageHttpRow.java +++ b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageHttpRow.java @@ -12,7 +12,7 @@ public class ReadingListPageHttpRow extends HttpRow<ReadingListPageRow> { public static ReadingListPageHttpRow fromCursor(@NonNull Cursor cursor) { HttpRow<ReadingListPageRow> httpRow = ReadingListPage.HTTP_DATABASE_TABLE.fromCursor(cursor); - boolean hasRow = cursor.getColumnIndex(ReadingListPageContract.HttpWithPage.KEY.getName()) != -1; + boolean hasRow = ReadingListPageContract.HttpWithPage.KEY.val(cursor) != null; ReadingListPageRow row = hasRow ? ReadingListPage.DATABASE_TABLE.fromCursor(cursor) : null; return new ReadingListPageHttpRow(httpRow, row); } @@ -25,4 +25,4 @@ @Nullable ReadingListPageRow row) { super(httpRow, row); } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java index 4a62a12..20a6dd6 100644 --- a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java +++ b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java @@ -13,7 +13,7 @@ public static ReadingListPageDiskRow fromCursor(@NonNull Cursor cursor) { ReadingListDiskRow diskRow = ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor); - boolean hasRow = cursor.getColumnIndex(ReadingListPageContract.DiskWithPage.KEY.getName()) != -1; + boolean hasRow = ReadingListPageContract.DiskWithPage.KEY.val(cursor) != null; ReadingListPageRow row = hasRow ? ReadingListPage.DATABASE_TABLE.fromCursor(cursor) : null; return new ReadingListPageDiskRow(diskRow, row); } diff --git a/app/src/main/java/org/wikipedia/useroption/database/UserOptionRow.java b/app/src/main/java/org/wikipedia/useroption/database/UserOptionRow.java index fca1a97..4ee4627 100644 --- a/app/src/main/java/org/wikipedia/useroption/database/UserOptionRow.java +++ b/app/src/main/java/org/wikipedia/useroption/database/UserOptionRow.java @@ -14,7 +14,7 @@ public static UserOptionRow fromCursor(@NonNull Cursor cursor) { HttpRow<UserOption> httpRow = HTTP_DATABASE_TABLE.fromCursor(cursor); - boolean hasRow = cursor.getColumnIndex(UserOptionContract.HttpWithOption.KEY.getName()) != -1; + boolean hasRow = UserOptionContract.HttpWithOption.KEY.val(cursor) != null; UserOption row = hasRow ? DATABASE_TABLE.fromCursor(cursor) : null; return new UserOptionRow(httpRow, row); } @@ -26,4 +26,4 @@ public UserOptionRow(@NonNull HttpRow<UserOption> httpRow, @Nullable UserOption row) { super(httpRow, row); } -} \ No newline at end of file +} -- To view, visit https://gerrit.wikimedia.org/r/284610 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3da94a9953f880e03cac4b3ab40f9c8c73b21110 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits