Description
Intended outcome:
From the docs for refetch:
Update the variables of this observable query, and fetch the new results
It seems wrong to me that when the new results come back it triggers the field's merge function. As we are resetting the variables the previous value for the query should be considered invalid and thrown out implicitly.
If there is not agreement on the above proposition, at the very least I would like to have a way to know that I'm in a merge function as the result of a refetch, so I can throw out the previous result explicitly.
Actual outcome:
The field's merge function is triggered and new results are merged with the old, creating an erroneous cache entry that results from a combination of old variable values and new.
How to reproduce the issue:
This is default behavior, trigger a refetch on a query whose result has a custom field merge policy. The problem is most easily identified in the context of list type fields and pagination.
Versions
System:
OS: macOS 10.15.7
Binaries:
Node: 12.18.2 - ~/.nvm/versions/node/v12.18.2/bin/node
npm: 6.14.5 - ~/.nvm/versions/node/v12.18.2/bin/npm
Browsers:
Chrome: 87.0.4280.88
Firefox: 79.0
Safari: 14.0.2
npmPackages:
@apollo/client: 3.0.0-rc.4 => 3.0.0-rc.4
apollo-angular: ^2.0.0-beta.2 => 2.0.0-beta.2