1
1
package com.apollographql.ijplugin.normalizedcache.provider
2
2
3
+ import com.apollographql.apollo.api.Error
3
4
import com.apollographql.apollo.api.json.JsonNumber
5
+ import com.apollographql.cache.normalized.api.CacheKey
4
6
import com.apollographql.ijplugin.normalizedcache.NormalizedCache
5
7
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.Field
6
8
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue
7
9
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.BooleanValue
8
10
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.CompositeValue
11
+ import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.ErrorValue
9
12
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.ListValue
10
13
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.Null
11
14
import com.apollographql.ijplugin.normalizedcache.NormalizedCache.FieldValue.NumberValue
@@ -25,16 +28,16 @@ import com.apollographql.cache.normalized.sql.SqlNormalizedCacheFactory as Apoll
25
28
class DatabaseNormalizedCacheProvider : NormalizedCacheProvider <File > {
26
29
private enum class DbFormat {
27
30
/* *
28
- * Classic normalized cache format with records containing JSON text, implemented in
31
+ * Classic format with records containing JSON text, implemented in
29
32
* `com.apollographql.apollo:apollo-normalized-cache-sqlite`.
30
33
*/
31
- JSON ,
34
+ CLASSIC ,
32
35
33
36
/* *
34
- * Experimental blob format with records containing a binary format, implemented in
37
+ * Modern format with records containing a binary format, implemented in
35
38
* `com.apollographql.cache:normalized-cache-sqlite-incubating`.
36
39
*/
37
- BLOB ,
40
+ MODERN ,
38
41
39
42
UNKNOWN_OR_ERROR ,
40
43
}
@@ -46,14 +49,14 @@ class DatabaseNormalizedCacheProvider : NormalizedCacheProvider<File> {
46
49
runCatching {
47
50
connection.createStatement().executeQuery(" SELECT key, record FROM records" ).use { resultSet ->
48
51
if (resultSet.next()) {
49
- return DbFormat .JSON
52
+ return DbFormat .CLASSIC
50
53
}
51
54
}
52
55
}
53
56
runCatching {
54
- connection.createStatement().executeQuery(" SELECT key, blob FROM blobs " ).use { resultSet ->
57
+ connection.createStatement().executeQuery(" SELECT key, record FROM record " ).use { resultSet ->
55
58
if (resultSet.next()) {
56
- return DbFormat .BLOB
59
+ return DbFormat .MODERN
57
60
}
58
61
}
59
62
}
@@ -66,14 +69,14 @@ class DatabaseNormalizedCacheProvider : NormalizedCacheProvider<File> {
66
69
return runCatching {
67
70
val format = checkDatabase(url)
68
71
when (format) {
69
- DbFormat .JSON -> readJsonDb (url)
70
- DbFormat .BLOB -> readBlobDb (url)
72
+ DbFormat .CLASSIC -> readClassicDb (url)
73
+ DbFormat .MODERN -> readModernDb (url)
71
74
DbFormat .UNKNOWN_OR_ERROR -> error(" Empty cache: no records were found" )
72
75
}
73
76
}
74
77
}
75
78
76
- private fun readJsonDb (url : String ): NormalizedCache {
79
+ private fun readClassicDb (url : String ): NormalizedCache {
77
80
val apolloNormalizedCache: ApolloClassicNormalizedCache = ApolloClassicSqlNormalizedCacheFactory (url).create()
78
81
val apolloRecords: Map <String , ApolloClassicRecord > = apolloNormalizedCache.dump().values.first()
79
82
return NormalizedCache (
@@ -89,13 +92,13 @@ class DatabaseNormalizedCacheProvider : NormalizedCacheProvider<File> {
89
92
)
90
93
}
91
94
92
- private fun readBlobDb (url : String ): NormalizedCache {
95
+ private fun readModernDb (url : String ): NormalizedCache {
93
96
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()
95
98
return NormalizedCache (
96
99
apolloRecords.map { (key, apolloRecord) ->
97
100
NormalizedCache .Record (
98
- key = key,
101
+ key = key.key ,
99
102
fields = apolloRecord.map { (fieldKey, fieldValue) ->
100
103
Field (fieldKey, fieldValue.toFieldValue())
101
104
},
@@ -117,6 +120,7 @@ private fun Any?.toFieldValue(): FieldValue {
117
120
is Map <* , * > -> CompositeValue (map { Field (it.key as String , it.value.toFieldValue()) })
118
121
is ApolloClassicCacheKey -> Reference (this .key)
119
122
is ApolloModernCacheKey -> Reference (this .key)
123
+ is Error -> ErrorValue (this .message)
120
124
else -> error(" Unsupported type ${this ::class } " )
121
125
}
122
126
}
0 commit comments