[MediaWiki-commits] [Gerrit] Fix optional table joins and unmarshalling - change (apps...wikipedia)
jenkins-bot has submitted this change and it was merged. 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(-) Approvals: Dbrant: Looks good to me, approved jenkins-bot: Verified 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 { public static ReadingListPageHttpRow fromCursor(@NonNull Cursor cursor) { HttpRow httpRow = ReadingListPage.HTTP_DATABASE_TABLE.fromCursor(cursor); -
[MediaWiki-commits] [Gerrit] Fix optional table joins and unmarshalling - change (apps...wikipedia)
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 { public static ReadingListPageHttpRow fromCursor(@NonNull Cursor cursor) { HttpRow httpRow =