Provide default empty StoreObject for root IDs like ROOT_QUERY. #7100
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This change means the existence of root objects like
ROOT_QUERY
andROOT_MUTATION
in theInMemoryCache
will no longer depend on whether other queries/mutations have previously written data into the cache.This matters because (until just recently: #7098)
cache.read
would returnnull
for a completely missingROOT_QUERY
object, but throw missing field errors ifROOT_QUERY
existed but did not have the requested fields:In other words, this commit hides the difference between the absence of
ROOT_QUERY
and its incompleteness, so unrelated cache writes can no longer unexpectedly influence thenull
-returning vs. exception-throwing behavior ofcache.read
.As an additional motivation, with AC3 field policies, it's possible now to define synthetic root query fields that have a chance of returning useful values even if the cache is completely empty. Providing a default empty object for root IDs like
ROOT_QUERY
is important to let thoseread
functions be called, instead of prematurely returningnull
fromcache.read
whenROOT_QUERY
does not exist.