lib/graphql/execution/interpreter.rb in graphql-2.0.17.2 vs lib/graphql/execution/interpreter.rb in graphql-2.0.18
- old
+ new
@@ -32,15 +32,16 @@
raise "Expected Hash or GraphQL::Query, not #{opts.class} (#{opts.inspect})"
end
end
multiplex = Execution::Multiplex.new(schema: schema, queries: queries, context: context, max_complexity: max_complexity)
- multiplex.trace("execute_multiplex", { multiplex: multiplex }) do
+ multiplex.current_trace.execute_multiplex(multiplex: multiplex) do
schema = multiplex.schema
queries = multiplex.queries
query_instrumenters = schema.instrumenters[:query]
multiplex_instrumenters = schema.instrumenters[:multiplex]
+ lazies_at_depth = Hash.new { |h, k| h[k] = [] }
# First, run multiplex instrumentation, then query instrumentation for each query
call_hooks(multiplex_instrumenters, multiplex, :before_multiplex, :after_multiplex) do
each_query_call_hooks(query_instrumenters, queries) do
schema = multiplex.schema
@@ -65,14 +66,14 @@
else
begin
# Although queries in a multiplex _share_ an Interpreter instance,
# they also have another item of state, which is private to that query
# in particular, assign it here:
- runtime = Runtime.new(query: query)
+ runtime = Runtime.new(query: query, lazies_at_depth: lazies_at_depth)
query.context.namespace(:interpreter_runtime)[:runtime] = runtime
- query.trace("execute_query", {query: query}) do
+ query.current_trace.execute_query(query: query) do
runtime.run_eager
end
rescue GraphQL::ExecutionError => err
query.context.errors << err
NO_OPERATION
@@ -93,20 +94,17 @@
runtime = query.context.namespace(:interpreter_runtime)[:runtime]
# it might not be present if the query has an error
runtime ? runtime.final_result : nil
end
final_values.compact!
- tracer.trace("execute_query_lazy", {multiplex: multiplex, query: query}) do
- Interpreter::Resolve.resolve_all(final_values, multiplex.dataloader)
+ tracer.current_trace.execute_query_lazy(multiplex: multiplex, query: query) do
+ Interpreter::Resolve.resolve_each_depth(lazies_at_depth, multiplex.dataloader)
end
queries.each do |query|
runtime = query.context.namespace(:interpreter_runtime)[:runtime]
if runtime
- runtime.delete_interpreter_context(:current_path)
- runtime.delete_interpreter_context(:current_field)
- runtime.delete_interpreter_context(:current_object)
- runtime.delete_interpreter_context(:current_arguments)
+ runtime.delete_all_interpreter_context
end
end
}
multiplex.dataloader.run
@@ -148,13 +146,10 @@
raise
ensure
queries.map { |query|
runtime = query.context.namespace(:interpreter_runtime)[:runtime]
if runtime
- runtime.delete_interpreter_context(:current_path)
- runtime.delete_interpreter_context(:current_field)
- runtime.delete_interpreter_context(:current_object)
- runtime.delete_interpreter_context(:current_arguments)
+ runtime.delete_all_interpreter_context
end
}
end
end
end