class GraphQL::Execution::Multiplex
@api private
@see {Schema#multiplex} for public API
one of these errors in one query will not affect the other queries.
Validation errors and {GraphQL::ExecutionError}s are handled in isolation:
If one query raises an application error, all queries will be in undefined states.
- Multiplex instrumentation teardown
- Query instrumentation teardown
- Finish each query (eg, get errors)
- Resolve lazy values, breadth-first across all queries
- Begin each query
- Analyze the multiplex + each query
- Query instrumentation setup
- Multiplex instrumentation setup
The flow is:
They can share a batching context and reduce redundant database hits.
Execute multiple queries under the same multiplex “umbrella”.
def initialize(schema:, queries:, context:, max_complexity:)
def initialize(schema:, queries:, context:, max_complexity:) @schema = schema @queries = queries @queries.each { |q| q.multiplex = self } @context = context @current_trace = @context[:trace] || schema.new_trace(multiplex: self) @dataloader = @context[:dataloader] ||= @schema.dataloader_class.new @tracers = schema.tracers + (context[:tracers] || []) # Support `context: {backtrace: true}` if context[:backtrace] && !@tracers.include?(GraphQL::Backtrace::Tracer) @tracers << GraphQL::Backtrace::Tracer end @max_complexity = max_complexity end