Skip to content

Commit

Permalink
Fix issue with sql cache not updated for the same CacheKey (#2245)
Browse files Browse the repository at this point in the history
* Fix issue with sql cache not updated for the same CacheKey

Closes #2231

* Add more naming arguments
  • Loading branch information
sav007 committed May 5, 2020
1 parent b95a345 commit 4deb11e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ class SqlNormalizedCache internal constructor(
override fun performMerge(apolloRecord: Record, cacheHeaders: CacheHeaders): Set<String> {
val oldRecord = selectRecordForKey(apolloRecord.key)
return if (oldRecord == null) {
cacheQueries.insert(apolloRecord.key, recordFieldAdapter.toJson(apolloRecord.fields))
cacheQueries.insert(key = apolloRecord.key, record = recordFieldAdapter.toJson(apolloRecord.fields))
emptySet()
} else {
oldRecord.mergeWith(apolloRecord).also {
if (it.isNotEmpty()) {
cacheQueries.update(oldRecord.key, recordFieldAdapter.toJson(oldRecord.fields))
cacheQueries.update(record = recordFieldAdapter.toJson(oldRecord.fields), key = oldRecord.key)
}
}
}
Expand Down Expand Up @@ -92,6 +92,6 @@ class SqlNormalizedCache internal constructor(
}

fun createRecord(key: String, fields: String) {
cacheQueries.insert(key, fields)
cacheQueries.insert(key = key, record = fields)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import kotlin.test.assertNotNull
import kotlin.test.assertNull

class SqlNormalizedCacheTest {

private val cache: SqlNormalizedCache = SqlNormalizedCacheFactory(createDriver()).create(RecordFieldJsonAdapter())

@BeforeTest
Expand Down Expand Up @@ -104,6 +104,29 @@ class SqlNormalizedCacheTest {
assertNull(record)
}

@Test
fun testRecordMerge_noOldRecord() {
cache.merge(Record.builder(STANDARD_KEY)
.addField("fieldKey", "valueUpdated")
.addField("newFieldKey", true).build(), CacheHeaders.NONE)
val record = cache.selectRecordForKey(STANDARD_KEY)
assertNotNull(record)
assertEquals(expected = "valueUpdated", actual = record.fields["fieldKey"])
assertEquals(expected = true, actual = record.fields["newFieldKey"])
}

@Test
fun testRecordMerge_withOldRecord() {
createRecord(STANDARD_KEY)
cache.merge(Record.builder(STANDARD_KEY)
.addField("fieldKey", "valueUpdated")
.addField("newFieldKey", true).build(), CacheHeaders.NONE)
val record = cache.selectRecordForKey(STANDARD_KEY)
assertNotNull(record)
assertEquals(expected = "valueUpdated", actual = record.fields["fieldKey"])
assertEquals(expected = true, actual = record.fields["newFieldKey"])
}

private fun createRecord(key: String) {
cache.createRecord(key, FIELDS)
}
Expand Down

0 comments on commit 4deb11e

Please sign in to comment.