Skip to content

Commit 9d2e0a0

Browse files
authored
Use incubating cache 0.0.8 and show errors in cache viewer (#6439)
1 parent 078d5c2 commit 9d2e0a0

File tree

5 files changed

+38
-19
lines changed

5 files changed

+38
-19
lines changed

gradle/libraries.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ androidx-sqlite = "2.3.1"
1717
# This is used by the gradle integration tests to get the artifacts locally
1818
apollo = "4.1.2-SNAPSHOT"
1919
apollo-execution = "0.1.0"
20-
apollo-normalizedcache-incubating = "0.0.7"
20+
apollo-normalizedcache-incubating = "0.0.8"
2121
# Used by the apollo-tooling project which uses a published version of Apollo
2222
apollo-published = "4.0.1"
2323
atomicfu = "0.26.0"

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/normalizedcache/NormalizedCache.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ data class NormalizedCache(
2424
data class CompositeValue(val value: List<Field>) : FieldValue
2525
data object Null : FieldValue
2626
data class Reference(val key: String) : FieldValue
27+
data class ErrorValue(val message: String) : FieldValue
2728
}
2829

2930
fun sorted() = NormalizedCache(

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/normalizedcache/provider/ApolloDebugNormalizedCacheProvider.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.apollographql.ijplugin.normalizedcache.provider
22

33
import com.apollographql.apollo.api.json.JsonNumber
4-
import com.apollographql.apollo.cache.normalized.api.CacheKey
54
import com.apollographql.ijplugin.apollodebugserver.GetNormalizedCacheQuery
65
import com.apollographql.ijplugin.normalizedcache.NormalizedCache
76
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.Field
87
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue
98
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.BooleanValue
109
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.CompositeValue
10+
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.ErrorValue
1111
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.ListValue
1212
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.Null
1313
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.NumberValue
@@ -44,10 +44,18 @@ private fun Any.toFields(): List<Field> {
4444
private fun Any?.toFieldValue(): FieldValue {
4545
return when (this) {
4646
null -> Null
47-
is String -> if (CacheKey.canDeserialize(this)) {
48-
Reference(CacheKey.deserialize(this).key)
49-
} else {
50-
StringValue(this)
47+
is String -> when {
48+
this.startsWith(APOLLO_CACHE_REFERENCE_PREFIX) -> {
49+
Reference(this.removePrefix(APOLLO_CACHE_REFERENCE_PREFIX).removeSuffix("}"))
50+
}
51+
52+
this.startsWith(APOLLO_CACHE_ERROR_PREFIX) -> {
53+
ErrorValue(this.removePrefix(APOLLO_CACHE_ERROR_PREFIX).removeSuffix("}"))
54+
}
55+
56+
else -> {
57+
StringValue(this)
58+
}
5159
}
5260

5361
is Number -> NumberValue(this.toString())
@@ -58,3 +66,6 @@ private fun Any?.toFieldValue(): FieldValue {
5866
else -> error("Unsupported type ${this::class}")
5967
}
6068
}
69+
70+
private const val APOLLO_CACHE_REFERENCE_PREFIX = "ApolloCacheReference{"
71+
private const val APOLLO_CACHE_ERROR_PREFIX = "ApolloCacheError{"

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/normalizedcache/provider/DatabaseNormalizedCacheProvider.kt

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.apollographql.ijplugin.normalizedcache.provider
22

3+
import com.apollographql.apollo.api.Error
34
import com.apollographql.apollo.api.json.JsonNumber
5+
import com.apollographql.cache.normalized.api.CacheKey
46
import com.apollographql.ijplugin.normalizedcache.NormalizedCache
57
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.Field
68
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue
79
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.BooleanValue
810
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.CompositeValue
11+
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.ErrorValue
912
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.ListValue
1013
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.Null
1114
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.NumberValue
@@ -25,16 +28,16 @@ import com.apollographql.cache.normalized.sql.SqlNormalizedCacheFactory as Apoll
2528
class DatabaseNormalizedCacheProvider : NormalizedCacheProvider<File> {
2629
private enum class DbFormat {
2730
/**
28-
* Classic normalized cache format with records containing JSON text, implemented in
31+
* Classic format with records containing JSON text, implemented in
2932
* `com.apollographql.apollo:apollo-normalized-cache-sqlite`.
3033
*/
31-
JSON,
34+
CLASSIC,
3235

3336
/**
34-
* Experimental blob format with records containing a binary format, implemented in
37+
* Modern format with records containing a binary format, implemented in
3538
* `com.apollographql.cache:normalized-cache-sqlite-incubating`.
3639
*/
37-
BLOB,
40+
MODERN,
3841

3942
UNKNOWN_OR_ERROR,
4043
}
@@ -46,14 +49,14 @@ class DatabaseNormalizedCacheProvider : NormalizedCacheProvider<File> {
4649
runCatching {
4750
connection.createStatement().executeQuery("SELECT key, record FROM records").use { resultSet ->
4851
if (resultSet.next()) {
49-
return DbFormat.JSON
52+
return DbFormat.CLASSIC
5053
}
5154
}
5255
}
5356
runCatching {
54-
connection.createStatement().executeQuery("SELECT key, blob FROM blobs").use { resultSet ->
57+
connection.createStatement().executeQuery("SELECT key, record FROM record").use { resultSet ->
5558
if (resultSet.next()) {
56-
return DbFormat.BLOB
59+
return DbFormat.MODERN
5760
}
5861
}
5962
}
@@ -66,14 +69,14 @@ class DatabaseNormalizedCacheProvider : NormalizedCacheProvider<File> {
6669
return runCatching {
6770
val format = checkDatabase(url)
6871
when (format) {
69-
DbFormat.JSON -> readJsonDb(url)
70-
DbFormat.BLOB -> readBlobDb(url)
72+
DbFormat.CLASSIC -> readClassicDb(url)
73+
DbFormat.MODERN -> readModernDb(url)
7174
DbFormat.UNKNOWN_OR_ERROR -> error("Empty cache: no records were found")
7275
}
7376
}
7477
}
7578

76-
private fun readJsonDb(url: String): NormalizedCache {
79+
private fun readClassicDb(url: String): NormalizedCache {
7780
val apolloNormalizedCache: ApolloClassicNormalizedCache = ApolloClassicSqlNormalizedCacheFactory(url).create()
7881
val apolloRecords: Map<String, ApolloClassicRecord> = apolloNormalizedCache.dump().values.first()
7982
return NormalizedCache(
@@ -89,13 +92,13 @@ class DatabaseNormalizedCacheProvider : NormalizedCacheProvider<File> {
8992
)
9093
}
9194

92-
private fun readBlobDb(url: String): NormalizedCache {
95+
private fun readModernDb(url: String): NormalizedCache {
9396
val apolloNormalizedCache: ApolloModernNormalizedCache = ApolloModernSqlNormalizedCacheFactory(url).create()
94-
val apolloRecords: Map<String, ApolloModernRecord> = apolloNormalizedCache.dump().values.first()
97+
val apolloRecords: Map<CacheKey, ApolloModernRecord> = apolloNormalizedCache.dump().values.first()
9598
return NormalizedCache(
9699
apolloRecords.map { (key, apolloRecord) ->
97100
NormalizedCache.Record(
98-
key = key,
101+
key = key.key,
99102
fields = apolloRecord.map { (fieldKey, fieldValue) ->
100103
Field(fieldKey, fieldValue.toFieldValue())
101104
},
@@ -117,6 +120,7 @@ private fun Any?.toFieldValue(): FieldValue {
117120
is Map<*, *> -> CompositeValue(map { Field(it.key as String, it.value.toFieldValue()) })
118121
is ApolloClassicCacheKey -> Reference(this.key)
119122
is ApolloModernCacheKey -> Reference(this.key)
123+
is Error -> ErrorValue(this.message)
120124
else -> error("Unsupported type ${this::class}")
121125
}
122126
}

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/normalizedcache/ui/FieldTreeTable.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ class FieldTreeTable(selectRecord: (String) -> Unit) : JBTreeTable(FieldTreeTabl
5555
append("", SimpleTextAttributes.GRAY_ITALIC_ATTRIBUTES)
5656
append(v.key, SimpleTextAttributes.LINK_PLAIN_ATTRIBUTES)
5757
}
58+
is NormalizedCache.FieldValue.ErrorValue -> {
59+
append("Error: '${v.message}'", SimpleTextAttributes.ERROR_ATTRIBUTES)
60+
}
5861
}
5962
}
6063
}

0 commit comments

Comments
 (0)