Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public final class com/apollographql/cache/normalized/sql/SqlNormalizedCache : c
public fun close (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun dump (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun getNextCache ()Lcom/apollographql/cache/normalized/api/ReadOnlyNormalizedCache;
public fun loadAllRecords (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun loadRecord-7OwBRqc (Ljava/lang/String;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun loadRecords (Ljava/util/Collection;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun merge (Lcom/apollographql/cache/normalized/api/Record;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lcom/apollographql/cache/normalized/api/RecordMerger;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down Expand Up @@ -63,8 +64,8 @@ public final class com/apollographql/cache/normalized/sql/internal/record/Record
public final fun deleteAllRecords (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun deleteRecords (Ljava/util/Collection;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun insertOrUpdateRecord (Ljava/lang/String;[BJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun selectAllRecords ()Lapp/cash/sqldelight/Query;
public final fun selectAllRecords (Lkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query;
public final fun selectAllRecords (JJ)Lapp/cash/sqldelight/Query;
public final fun selectAllRecords (JJLkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query;
public final fun selectRecords (Ljava/util/Collection;)Lapp/cash/sqldelight/Query;
public final fun selectRecords (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query;
public final fun setCacheSize (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down
5 changes: 3 additions & 2 deletions normalized-cache-sqlite/api/jvm/normalized-cache-sqlite.api
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ public final class com/apollographql/cache/normalized/sql/SqlNormalizedCache : c
public fun close (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun dump (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun getNextCache ()Lcom/apollographql/cache/normalized/api/ReadOnlyNormalizedCache;
public fun loadAllRecords (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun loadRecord-7OwBRqc (Ljava/lang/String;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun loadRecords (Ljava/util/Collection;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun merge (Lcom/apollographql/cache/normalized/api/Record;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lcom/apollographql/cache/normalized/api/RecordMerger;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down Expand Up @@ -52,8 +53,8 @@ public final class com/apollographql/cache/normalized/sql/internal/record/Record
public final fun deleteAllRecords (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun deleteRecords (Ljava/util/Collection;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun insertOrUpdateRecord (Ljava/lang/String;[BJLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun selectAllRecords ()Lapp/cash/sqldelight/Query;
public final fun selectAllRecords (Lkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query;
public final fun selectAllRecords (JJ)Lapp/cash/sqldelight/Query;
public final fun selectAllRecords (JJLkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query;
public final fun selectRecords (Ljava/util/Collection;)Lapp/cash/sqldelight/Query;
public final fun selectRecords (Ljava/util/Collection;Lkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query;
public final fun setCacheSize (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@ final class com.apollographql.cache.normalized.sql.internal.record/Record { // c
final class com.apollographql.cache.normalized.sql.internal.record/RecordQueries : app.cash.sqldelight/SuspendingTransacterImpl { // com.apollographql.cache.normalized.sql.internal.record/RecordQueries|null[0]
constructor <init>(app.cash.sqldelight.db/SqlDriver) // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.<init>|<init>(app.cash.sqldelight.db.SqlDriver){}[0]

final fun <#A1: kotlin/Any> selectAllRecords(kotlin/Function2<kotlin/String, kotlin/ByteArray, #A1>): app.cash.sqldelight/Query<#A1> // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.selectAllRecords|selectAllRecords(kotlin.Function2<kotlin.String,kotlin.ByteArray,0:0>){0§<kotlin.Any>}[0]
final fun <#A1: kotlin/Any> selectAllRecords(kotlin/Long, kotlin/Long, kotlin/Function2<kotlin/String, kotlin/ByteArray, #A1>): app.cash.sqldelight/Query<#A1> // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.selectAllRecords|selectAllRecords(kotlin.Long;kotlin.Long;kotlin.Function2<kotlin.String,kotlin.ByteArray,0:0>){0§<kotlin.Any>}[0]
final fun <#A1: kotlin/Any> selectRecords(kotlin.collections/Collection<kotlin/String>, kotlin/Function2<kotlin/String, kotlin/ByteArray, #A1>): app.cash.sqldelight/Query<#A1> // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.selectRecords|selectRecords(kotlin.collections.Collection<kotlin.String>;kotlin.Function2<kotlin.String,kotlin.ByteArray,0:0>){0§<kotlin.Any>}[0]
final fun changes(): app.cash.sqldelight/ExecutableQuery<kotlin/Long> // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.changes|changes(){}[0]
final fun count(): app.cash.sqldelight/Query<kotlin/Long> // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.count|count(){}[0]
final fun selectAllRecords(): app.cash.sqldelight/Query<com.apollographql.cache.normalized.sql.internal.record/SelectAllRecords> // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.selectAllRecords|selectAllRecords(){}[0]
final fun selectAllRecords(kotlin/Long, kotlin/Long): app.cash.sqldelight/Query<com.apollographql.cache.normalized.sql.internal.record/SelectAllRecords> // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.selectAllRecords|selectAllRecords(kotlin.Long;kotlin.Long){}[0]
final fun selectRecords(kotlin.collections/Collection<kotlin/String>): app.cash.sqldelight/Query<com.apollographql.cache.normalized.sql.internal.record/SelectRecords> // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.selectRecords|selectRecords(kotlin.collections.Collection<kotlin.String>){}[0]
final suspend fun deleteAllRecords(): kotlin/Long // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.deleteAllRecords|deleteAllRecords(){}[0]
final suspend fun deleteRecords(kotlin.collections/Collection<kotlin/String>): kotlin/Long // com.apollographql.cache.normalized.sql.internal.record/RecordQueries.deleteRecords|deleteRecords(kotlin.collections.Collection<kotlin.String>){}[0]
Expand Down Expand Up @@ -91,6 +91,7 @@ final class com.apollographql.cache.normalized.sql/SqlNormalizedCache : com.apol
final suspend fun clearAll() // com.apollographql.cache.normalized.sql/SqlNormalizedCache.clearAll|clearAll(){}[0]
final suspend fun close() // com.apollographql.cache.normalized.sql/SqlNormalizedCache.close|close(){}[0]
final suspend fun dump(): kotlin.collections/Map<kotlin.reflect/KClass<*>, kotlin.collections/Map<com.apollographql.cache.normalized.api/CacheKey, com.apollographql.cache.normalized.api/Record>> // com.apollographql.cache.normalized.sql/SqlNormalizedCache.dump|dump(){}[0]
final suspend fun loadAllRecords(): kotlinx.coroutines.flow/Flow<com.apollographql.cache.normalized.api/Record> // com.apollographql.cache.normalized.sql/SqlNormalizedCache.loadAllRecords|loadAllRecords(){}[0]
final suspend fun loadRecord(com.apollographql.cache.normalized.api/CacheKey, com.apollographql.cache.normalized.api/CacheHeaders): com.apollographql.cache.normalized.api/Record? // com.apollographql.cache.normalized.sql/SqlNormalizedCache.loadRecord|loadRecord(com.apollographql.cache.normalized.api.CacheKey;com.apollographql.cache.normalized.api.CacheHeaders){}[0]
final suspend fun loadRecords(kotlin.collections/Collection<com.apollographql.cache.normalized.api/CacheKey>, com.apollographql.cache.normalized.api/CacheHeaders): kotlin.collections/Collection<com.apollographql.cache.normalized.api/Record> // com.apollographql.cache.normalized.sql/SqlNormalizedCache.loadRecords|loadRecords(kotlin.collections.Collection<com.apollographql.cache.normalized.api.CacheKey>;com.apollographql.cache.normalized.api.CacheHeaders){}[0]
final suspend fun merge(com.apollographql.cache.normalized.api/Record, com.apollographql.cache.normalized.api/CacheHeaders, com.apollographql.cache.normalized.api/RecordMerger): kotlin.collections/Set<kotlin/String> // com.apollographql.cache.normalized.sql/SqlNormalizedCache.merge|merge(com.apollographql.cache.normalized.api.Record;com.apollographql.cache.normalized.api.CacheHeaders;com.apollographql.cache.normalized.api.RecordMerger){}[0]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import com.apollographql.cache.normalized.api.withSizeInBytes
import com.apollographql.cache.normalized.sql.internal.RecordDatabase
import com.apollographql.cache.normalized.sql.internal.RecordSerializer
import com.apollographql.cache.normalized.sql.internal.parametersMax
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.toList
import kotlin.reflect.KClass

class SqlNormalizedCache internal constructor(
Expand All @@ -36,6 +39,17 @@ class SqlNormalizedCache internal constructor(
}
}

override suspend fun loadAllRecords(): Flow<Record> {
return try {
recordDatabase.init()
recordDatabase.selectAllRecords()
} catch (e: Exception) {
// Unable to clear the records from the database, it is possibly corrupted
apolloExceptionHandler(Exception("Unable to read records from the database", e))
emptyFlow()
}
}

override suspend fun clearAll() {
try {
recordDatabase.init()
Expand Down Expand Up @@ -83,7 +97,7 @@ class SqlNormalizedCache internal constructor(
override suspend fun dump(): Map<KClass<*>, Map<CacheKey, Record>> {
recordDatabase.init()
return mapOf(
this::class to (recordDatabase.selectAllRecords().associateBy { it.key })
this::class to (recordDatabase.selectAllRecords().toList().associateBy { it.key })
.mapValues { (_, record) -> record.withSizeInBytes(sizeOfRecord(record)) },
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import com.apollographql.apollo.mpp.currentTimeMillis
import com.apollographql.cache.normalized.api.Record
import com.apollographql.cache.normalized.sql.internal.record.RecordQueries
import com.apollographql.cache.normalized.sql.internal.record.SqlRecordDatabase
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock

Expand Down Expand Up @@ -48,8 +50,21 @@ internal class RecordDatabase(
return recordQueries.selectRecords(keys).awaitAsList().map { RecordSerializer.deserialize(it.key, it.record) }
}

suspend fun selectAllRecords(): List<Record> {
return recordQueries.selectAllRecords().awaitAsList().map { RecordSerializer.deserialize(it.key, it.record) }
fun selectAllRecords(pageSize: Long = 100): Flow<Record> {
return flow {
var offset = 0L
while (true) {
val page = recordQueries.selectAllRecords(limit = pageSize, offset = offset).awaitAsList()
.map { RecordSerializer.deserialize(it.key, it.record) }
for (record in page) {
emit(record)
}
if (page.size < pageSize) {
break
}
offset += pageSize
}
}
}

suspend fun insertOrUpdateRecord(record: Record) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ selectRecords:
SELECT key, record FROM record WHERE key IN ?;

selectAllRecords:
SELECT key, record FROM record;
SELECT key, record FROM record LIMIT :limit OFFSET :offset;

insertOrUpdateRecord:
INSERT INTO record (key, record, updated_date) VALUES (?, ?, ?);
Expand Down
2 changes: 2 additions & 0 deletions normalized-cache/api/normalized-cache.api
Original file line number Diff line number Diff line change
Expand Up @@ -634,6 +634,7 @@ public abstract interface class com/apollographql/cache/normalized/api/ReadOnlyN
public abstract fun close (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun dump (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun getNextCache ()Lcom/apollographql/cache/normalized/api/ReadOnlyNormalizedCache;
public abstract fun loadAllRecords (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun loadRecord-7OwBRqc (Ljava/lang/String;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun loadRecords (Ljava/util/Collection;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun size (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down Expand Up @@ -775,6 +776,7 @@ public final class com/apollographql/cache/normalized/memory/MemoryCache : com/a
public fun dump (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun getNextCache ()Lcom/apollographql/cache/normalized/api/NormalizedCache;
public synthetic fun getNextCache ()Lcom/apollographql/cache/normalized/api/ReadOnlyNormalizedCache;
public fun loadAllRecords (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun loadRecord-7OwBRqc (Ljava/lang/String;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun loadRecords (Ljava/util/Collection;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun merge (Lcom/apollographql/cache/normalized/api/Record;Lcom/apollographql/cache/normalized/api/CacheHeaders;Lcom/apollographql/cache/normalized/api/RecordMerger;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down
2 changes: 2 additions & 0 deletions normalized-cache/api/normalized-cache.klib.api
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ abstract interface com.apollographql.cache.normalized.api/ReadOnlyNormalizedCach
open fun <get-nextCache>(): com.apollographql.cache.normalized.api/ReadOnlyNormalizedCache? // com.apollographql.cache.normalized.api/ReadOnlyNormalizedCache.nextCache.<get-nextCache>|<get-nextCache>(){}[0]

abstract suspend fun dump(): kotlin.collections/Map<kotlin.reflect/KClass<*>, kotlin.collections/Map<com.apollographql.cache.normalized.api/CacheKey, com.apollographql.cache.normalized.api/Record>> // com.apollographql.cache.normalized.api/ReadOnlyNormalizedCache.dump|dump(){}[0]
abstract suspend fun loadAllRecords(): kotlinx.coroutines.flow/Flow<com.apollographql.cache.normalized.api/Record> // com.apollographql.cache.normalized.api/ReadOnlyNormalizedCache.loadAllRecords|loadAllRecords(){}[0]
abstract suspend fun loadRecord(com.apollographql.cache.normalized.api/CacheKey, com.apollographql.cache.normalized.api/CacheHeaders): com.apollographql.cache.normalized.api/Record? // com.apollographql.cache.normalized.api/ReadOnlyNormalizedCache.loadRecord|loadRecord(com.apollographql.cache.normalized.api.CacheKey;com.apollographql.cache.normalized.api.CacheHeaders){}[0]
abstract suspend fun loadRecords(kotlin.collections/Collection<com.apollographql.cache.normalized.api/CacheKey>, com.apollographql.cache.normalized.api/CacheHeaders): kotlin.collections/Collection<com.apollographql.cache.normalized.api/Record> // com.apollographql.cache.normalized.api/ReadOnlyNormalizedCache.loadRecords|loadRecords(kotlin.collections.Collection<com.apollographql.cache.normalized.api.CacheKey>;com.apollographql.cache.normalized.api.CacheHeaders){}[0]
open fun sizeOfRecord(com.apollographql.cache.normalized.api/Record): kotlin/Int // com.apollographql.cache.normalized.api/ReadOnlyNormalizedCache.sizeOfRecord|sizeOfRecord(com.apollographql.cache.normalized.api.Record){}[0]
Expand Down Expand Up @@ -412,6 +413,7 @@ final class com.apollographql.cache.normalized.memory/MemoryCache : com.apollogr
final fun sizeOfRecord(com.apollographql.cache.normalized.api/Record): kotlin/Int // com.apollographql.cache.normalized.memory/MemoryCache.sizeOfRecord|sizeOfRecord(com.apollographql.cache.normalized.api.Record){}[0]
final suspend fun clearAll() // com.apollographql.cache.normalized.memory/MemoryCache.clearAll|clearAll(){}[0]
final suspend fun dump(): kotlin.collections/Map<kotlin.reflect/KClass<*>, kotlin.collections/Map<com.apollographql.cache.normalized.api/CacheKey, com.apollographql.cache.normalized.api/Record>> // com.apollographql.cache.normalized.memory/MemoryCache.dump|dump(){}[0]
final suspend fun loadAllRecords(): kotlinx.coroutines.flow/Flow<com.apollographql.cache.normalized.api/Record> // com.apollographql.cache.normalized.memory/MemoryCache.loadAllRecords|loadAllRecords(){}[0]
final suspend fun loadRecord(com.apollographql.cache.normalized.api/CacheKey, com.apollographql.cache.normalized.api/CacheHeaders): com.apollographql.cache.normalized.api/Record? // com.apollographql.cache.normalized.memory/MemoryCache.loadRecord|loadRecord(com.apollographql.cache.normalized.api.CacheKey;com.apollographql.cache.normalized.api.CacheHeaders){}[0]
final suspend fun loadRecords(kotlin.collections/Collection<com.apollographql.cache.normalized.api/CacheKey>, com.apollographql.cache.normalized.api/CacheHeaders): kotlin.collections/Collection<com.apollographql.cache.normalized.api/Record> // com.apollographql.cache.normalized.memory/MemoryCache.loadRecords|loadRecords(kotlin.collections.Collection<com.apollographql.cache.normalized.api.CacheKey>;com.apollographql.cache.normalized.api.CacheHeaders){}[0]
final suspend fun merge(com.apollographql.cache.normalized.api/Record, com.apollographql.cache.normalized.api/CacheHeaders, com.apollographql.cache.normalized.api/RecordMerger): kotlin.collections/Set<kotlin/String> // com.apollographql.cache.normalized.memory/MemoryCache.merge|merge(com.apollographql.cache.normalized.api.Record;com.apollographql.cache.normalized.api.CacheHeaders;com.apollographql.cache.normalized.api.RecordMerger){}[0]
Expand Down
Loading