Fix LongSparseArray and SparseArray key row adapter.

Update Room to use a SingleNamedColumnRowAdapter for the primitive key type of LongSparseArray and SparseArray.

Test: MultimapQueryTest
Change-Id: If7ee6bae0105c93e169809c8ac888f9cdcc07d0c
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MusicDao.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MusicDao.java
index 8e64440..6f74a64 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MusicDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MusicDao.java
@@ -208,12 +208,12 @@
     Map<Integer, List<Song>> getReleaseYearToAlbums();
 
     @RewriteQueriesToDropUnusedColumns
-    @MapInfo(keyColumn = "mArtistId")
+    @MapInfo(keyColumn = "mImageYear")
     @Query("SELECT * FROM Artist JOIN Image ON Artist.mArtistName = Image.mArtistInImage")
     LongSparseArray<Artist> getAllAlbumCoverYearToArtistsWithLongSparseArray();
 
     @RewriteQueriesToDropUnusedColumns
-    @MapInfo(keyColumn = "mArtistId")
+    @MapInfo(keyColumn = "mImageYear")
     @Query("SELECT * FROM Artist JOIN Image ON Artist.mArtistName = Image.mArtistInImage")
     SparseArrayCompat<Artist> getAllAlbumCoverYearToArtistsWithIntSparseArray();
 
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/MultimapQueryTest.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/MultimapQueryTest.java
index 43130e0..d045d02 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/MultimapQueryTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/MultimapQueryTest.java
@@ -964,7 +964,7 @@
                 mMusicDao.getAllAlbumCoverYearToArtistsWithLongSparseArray();
 
         assertThat(imageToArtistsMap.size()).isEqualTo(2);
-        assertThat(imageToArtistsMap.get(1)).isEqualTo(mRhcp);
+        assertThat(imageToArtistsMap.get(2006L)).isEqualTo(mRhcp);
     }
 
     @Test
@@ -976,8 +976,8 @@
                 mMusicDao.getAllAlbumCoverYearToArtistsWithIntSparseArray();
 
         assertThat(imageToArtistsMap.size()).isEqualTo(2);
-        assertThat(imageToArtistsMap.get(1)).isEqualTo(mRhcp);
-        assertThat(imageToArtistsMap.get(4)).isEqualTo(mPinkFloyd);
+        assertThat(imageToArtistsMap.get(2006)).isEqualTo(mRhcp);
+        assertThat(imageToArtistsMap.get(1973)).isEqualTo(mPinkFloyd);
     }
 
     @Test
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
index d8d51bf..bd8e0f7 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
@@ -786,6 +786,15 @@
             }
             return null
         } else {
+            if (columnName != null) {
+                val singleNamedColumn = findCursorValueReader(
+                    typeMirror,
+                    query.resultInfo?.columns?.find { it.name == columnName }?.type
+                )
+                if (singleNamedColumn != null) {
+                    return SingleNamedColumnRowAdapter(singleNamedColumn, columnName)
+                }
+            }
             val singleColumn = findCursorValueReader(typeMirror, null) ?: return null
             return SingleColumnRowAdapter(singleColumn)
         }