Skip to content

Commit c45f628

Browse files
committed
support sequential mutation fields
1 parent 8f04cc9 commit c45f628

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

lib/graphql/execution/interpreter/runtime.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,29 @@ def initialize(dataloader:, lazies_at_depth:)
3939
@next_flush = []
4040
@dataloader = dataloader
4141
@lazies_at_depth = lazies_at_depth
42+
@running_eagerly = false
4243
end
4344

4445
def <<(step)
45-
@next_flush << step
46+
if @running_eagerly
47+
step.run
48+
else
49+
@next_flush << step
50+
end
4651
end
4752

48-
def complete
53+
def complete(eager: false)
54+
prev_eagerly = @running_eagerly
55+
@running_eagerly = eager
4956
while (fl = @next_flush) && !fl.empty?
5057
@next_flush = []
5158
while (step = fl.shift)
5259
step.run
5360
end
5461
Interpreter::Resolve.resolve_each_depth(@lazies_at_depth, @dataloader)
5562
end
63+
ensure
64+
@running_eagerly = prev_eagerly
5665
end
5766
end
5867

@@ -65,7 +74,7 @@ def complete
6574
# @return [GraphQL::Query::Context]
6675
attr_reader :context
6776

68-
attr_reader :dataloader
77+
attr_reader :dataloader, :run_queue
6978

7079
def initialize(query:, lazies_at_depth:)
7180
@query = query

lib/graphql/execution/interpreter/runtime/graphql_result.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ def run
6363
@ordered_result_keys ||= ordered_result_keys
6464
if is_selection_array
6565
selections_result = GraphQLResultHash.new(
66-
@graphql_response_name,
66+
@graphql_result_name,
6767
@graphql_result_type,
6868
@graphql_application_value,
6969
@graphql_parent,
7070
@graphql_is_non_null_in_parent,
7171
gathered_selections,
72-
false,
72+
@graphql_is_eager,
7373
@ast_node,
7474
@graphql_arguments,
7575
@graphql_field)
@@ -106,6 +106,7 @@ def run
106106
selections_result.merge_into(target_result)
107107
end
108108
end
109+
@runtime.run_queue.complete(eager: true)
109110
@runtime.dataloader.clear_cache
110111
}
111112
else

0 commit comments

Comments
 (0)