-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fields with lazy results aren't resolved inside directive context #5004
Comments
Hey, thanks for the detailed report. I agree this is how this should work. Unfortunately it doesn't, and it's not going to be easy. The problem is that directives are
(At first, I thought putting And it won't be as easy as "just moving it up" to a higher spot in the call stack because of how GraphQL-Ruby does multiplexing. Given two queries like this: q1 = "query Query1 @withAttribute { lazyValue}"
q2 = "query Query2 { lazyValue }"
r1, r2 = MySchema.multiplex([q1, q2]) We'd expect the first It might be possible to split them out -- detect queries which have directives and run them separately. That's the technique GraphQL-Ruby uses for fields and fragments, but there isn't already a place to do it for queries.) I'll keep this open while I'm thinking it over and follow up here when I have anything more to report. |
Describe the bug
If you have a field that is resolved lazily, e.g. using a
GraphQL::Batch::Loader
, and that field is selected in a query using a directive which applies to the field, the field will be resolved outside of the directive's scope (outside of theyield
of the directive'sresolve
).Say you're using a gem with a class method that's given a block and that method sets/reverts a class variable before/after the block is called. Then you write a directive that passes
resolve
's block into that gem's class method as its block. Given a lazy field that uses the class variable, that field will be resolved using the "after" value instead of the "during" value.Versions
graphql
version: 2.3.7rails
(or other framework): N/Aother applicable versions (
graphql-batch
, etc):graphql-batch
0.6.0GraphQL schema
GraphQL query
Steps to reproduce
Run the query above using the provided schema and classes
Expected behavior
Both
value
andlazyValue
resolve tored
Actual behavior
lazyValue
resolves to nil because it's outside of thewithAttribute
directive scope when it gets resolved and soAttributed.with_attributed
has reverted to its previousattr
value.The text was updated successfully, but these errors were encountered: