From 8f4a014d67ee74f97a7693dd464fb443c2a08c47 Mon Sep 17 00:00:00 2001 From: Veyndan Stuart Date: Tue, 19 Jul 2022 16:29:43 +0200 Subject: [PATCH] Make OffsetQueryPagingSource only work with Int --- .../paging3/OffsetQueryPagingSource.kt | 22 +++++++------- .../sqldelight/paging3/QueryPagingSource.kt | 6 ++-- .../paging3/OffsetQueryPagingSourceTest.kt | 30 +++++++++---------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/extensions/android-paging3/src/main/java/app/cash/sqldelight/paging3/OffsetQueryPagingSource.kt b/extensions/android-paging3/src/main/java/app/cash/sqldelight/paging3/OffsetQueryPagingSource.kt index 5d0aafb4dee..1495e713296 100644 --- a/extensions/android-paging3/src/main/java/app/cash/sqldelight/paging3/OffsetQueryPagingSource.kt +++ b/extensions/android-paging3/src/main/java/app/cash/sqldelight/paging3/OffsetQueryPagingSource.kt @@ -22,26 +22,26 @@ import kotlinx.coroutines.withContext import kotlin.coroutines.CoroutineContext internal class OffsetQueryPagingSource( - private val queryProvider: (limit: Long, offset: Long) -> Query, - private val countQuery: Query, + private val queryProvider: (limit: Int, offset: Int) -> Query, + private val countQuery: Query, private val transacter: Transacter, private val context: CoroutineContext, -) : QueryPagingSource() { +) : QueryPagingSource() { override val jumpingSupported get() = true override suspend fun load( - params: LoadParams, - ): LoadResult = withContext(context) { + params: LoadParams, + ): LoadResult = withContext(context) { try { - val key = params.key ?: 0L + val key = params.key ?: 0 transacter.transactionWithResult { val count = countQuery.executeAsOne() - if (count != 0L && key >= count) throw IndexOutOfBoundsException() + if (count != 0 && key >= count) throw IndexOutOfBoundsException() val loadSize = if (key < 0) params.loadSize + key else params.loadSize - val data = queryProvider(loadSize.toLong(), maxOf(0, key)) + val data = queryProvider(loadSize, maxOf(0, key)) .also { currentQuery = it } .executeAsList() @@ -51,8 +51,8 @@ internal class OffsetQueryPagingSource( // misaligned prepend queries to avoid duplicates. prevKey = if (key <= 0L) null else key - params.loadSize, nextKey = if (key + params.loadSize >= count) null else key + params.loadSize, - itemsBefore = maxOf(0L, key).toInt(), - itemsAfter = maxOf(0, (count - (key + params.loadSize))).toInt(), + itemsBefore = maxOf(0, key), + itemsAfter = maxOf(0, (count - (key + params.loadSize))), ) } } catch (e: Exception) { @@ -61,5 +61,5 @@ internal class OffsetQueryPagingSource( } } - override fun getRefreshKey(state: PagingState) = state.anchorPosition?.toLong() + override fun getRefreshKey(state: PagingState) = state.anchorPosition } diff --git a/extensions/android-paging3/src/main/java/app/cash/sqldelight/paging3/QueryPagingSource.kt b/extensions/android-paging3/src/main/java/app/cash/sqldelight/paging3/QueryPagingSource.kt index 4a87c202f8c..ec90db5fcec 100644 --- a/extensions/android-paging3/src/main/java/app/cash/sqldelight/paging3/QueryPagingSource.kt +++ b/extensions/android-paging3/src/main/java/app/cash/sqldelight/paging3/QueryPagingSource.kt @@ -59,11 +59,11 @@ internal abstract class QueryPagingSource : */ @Suppress("FunctionName") fun QueryPagingSource( - countQuery: Query, + countQuery: Query, transacter: Transacter, context: CoroutineContext = Dispatchers.IO, - queryProvider: (limit: Long, offset: Long) -> Query, -): PagingSource = OffsetQueryPagingSource( + queryProvider: (limit: Int, offset: Int) -> Query, +): PagingSource = OffsetQueryPagingSource( queryProvider, countQuery, transacter, diff --git a/extensions/android-paging3/src/test/java/app/cash/sqldelight/paging3/OffsetQueryPagingSourceTest.kt b/extensions/android-paging3/src/test/java/app/cash/sqldelight/paging3/OffsetQueryPagingSourceTest.kt index b63b74fdfe5..023b38022e7 100644 --- a/extensions/android-paging3/src/test/java/app/cash/sqldelight/paging3/OffsetQueryPagingSourceTest.kt +++ b/extensions/android-paging3/src/test/java/app/cash/sqldelight/paging3/OffsetQueryPagingSourceTest.kt @@ -72,7 +72,7 @@ class OffsetQueryPagingSourceTest { val results = runBlocking { source.load(Refresh(null, 2, false)) } assertNull((results as LoadResult.Page).prevKey) - assertEquals(2L, results.nextKey) + assertEquals(2, results.nextKey) } @Test fun `aligned last page gives correct prevKey and nextKey`() { @@ -85,7 +85,7 @@ class OffsetQueryPagingSourceTest { val results = runBlocking { source.load(Refresh(8, 2, false)) } - assertEquals(6L, (results as LoadResult.Page).prevKey) + assertEquals(6, (results as LoadResult.Page).prevKey) assertNull(results.nextKey) } @@ -98,8 +98,8 @@ class OffsetQueryPagingSourceTest { ) runBlocking { - val expected = (0L until 10L).chunked(2).iterator() - var nextKey: Long? = null + val expected = (0 until 10).chunked(2).iterator() + var nextKey: Int? = null do { val results = source.load(Refresh(nextKey, 2, false)) assertEquals(expected.next(), (results as LoadResult.Page).data) @@ -118,7 +118,7 @@ class OffsetQueryPagingSourceTest { val results = runBlocking { source.load(Refresh(9, 2, false)) } - assertEquals(7L, (results as LoadResult.Page).prevKey) + assertEquals(7, (results as LoadResult.Page).prevKey) assertNull(results.nextKey) } @@ -130,10 +130,10 @@ class OffsetQueryPagingSourceTest { EmptyCoroutineContext, ) - val results = runBlocking { source.load(Refresh(1L, 2, false)) } + val results = runBlocking { source.load(Refresh(1, 2, false)) } - assertEquals(-1L, (results as LoadResult.Page).prevKey) - assertEquals(3L, results.nextKey) + assertEquals(-1, (results as LoadResult.Page).prevKey) + assertEquals(3, results.nextKey) } @Test fun `initial page has correct itemsBefore and itemsAfter`() { @@ -215,8 +215,8 @@ class OffsetQueryPagingSourceTest { ) runBlocking { - val expected = listOf(listOf(1L, 2L), listOf(0L)).iterator() - var prevKey: Long? = 1L + val expected = listOf(listOf(1, 2), listOf(0)).iterator() + var prevKey: Int? = 1 do { val results = source.load(Refresh(prevKey, 2, false)) assertEquals(expected.next(), (results as LoadResult.Page).data) @@ -256,12 +256,12 @@ class OffsetQueryPagingSourceTest { assertTrue(source.invalid) } - private fun query(limit: Long, offset: Long) = object : Query( - { cursor -> cursor.getLong(0)!! }, + private fun query(limit: Int, offset: Int) = object : Query( + { cursor -> cursor.getLong(0)!!.toInt() }, ) { override fun execute(mapper: (SqlCursor) -> R) = driver.executeQuery(1, "SELECT value FROM testTable LIMIT ? OFFSET ?", mapper, 2) { - bindLong(0, limit) - bindLong(1, offset) + bindLong(0, limit.toLong()) + bindLong(1, offset.toLong()) } override fun addListener(listener: Listener) = driver.addListener(listener, arrayOf("testTable")) @@ -275,7 +275,7 @@ class OffsetQueryPagingSourceTest { "Test.sq", "count", "SELECT count(*) FROM testTable", - { it.getLong(0)!! }, + { it.getLong(0)!!.toInt() }, ) private fun insert(value: Long, db: SqlDriver = driver) {