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