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

Reply via email to