This repository was archived by the owner on Oct 26, 2022. It is now read-only.
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.
Problem
Connection cache does not work with
ActiveRecord
.Cause (for defects/bugs)
For ActiveRecord this returns
GraphQL::Relay::RelationConnection
wherenodes
is instance ofActiveRecord_Associations_CollectionProxy
. This is because ActiveRecord is lazy by design and when we callfield.resolve_proc.call(obj, args, ctx)
there is not a single SQL query in the database. SQL query is executed when we callto_a
onRelationConnection
level.So the problem is that currently we put into the cache not loaded
ActiveRecord_Associations_CollectionProxy
and whenever we havecache hit
we still have an SQL query:Solution
RelationConnection
separately and cachepaged_nodes
when they are loaded.Notes
This is still not an ideal solution because we cache only
paged_nodes
, butRelationConnection
has other methods (e.g.sliced_nodes_count
). But we don't know which exactly will be executed and I don't see how we can handle it without extra cache write.