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_QUERYandROOT_MUTATIONin theInMemoryCachewill no longer depend on whether other queries/mutations have previously written data into the cache.This matters because (until just recently: #7098)
cache.readwould returnnullfor a completely missingROOT_QUERYobject, but throw missing field errors ifROOT_QUERYexisted but did not have the requested fields:In other words, this commit hides the difference between the absence of
ROOT_QUERYand 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_QUERYis important to let thosereadfunctions be called, instead of prematurely returningnullfromcache.readwhenROOT_QUERYdoes not exist.