Skip to content

Commit 87ec5dc

Browse files
committed
Update ExecuteQuery with hasNext logic
1 parent d099d56 commit 87ec5dc

File tree

1 file changed

+29
-27
lines changed

1 file changed

+29
-27
lines changed

spec/Section 6 -- Execution.md

+29-27
Original file line numberDiff line numberDiff line change
@@ -137,16 +137,18 @@ ExecuteQuery(query, schema, variableValues, initialValue):
137137
*normally* (allowing parallelization).
138138
* Let {errors} be any *field errors* produced while executing the
139139
selection set.
140-
* Yield an unordered map containing {data} and {errors}.
141-
* For each {payload} in {subsequentPayloads}:
142-
* If {payload} is a Deferred Fragment Record:
143-
* Yield the value from calling {ResolveDeferredFragmentRecord(payload, variableValues, subsequentPayloads)}.
144-
* If {payload} is not the final payload in {subsequentPayloads}
145-
* Add an entry to {payload} named `hasNext` with the value {true}.
146-
* If {payload} is the final payload in {subsequentPayloads}
147-
* Add an entry to {payload} named `hasNext` with the value {false}.
148-
* If {payload} is a Stream Record:
149-
* Yield ResolveStreamRecord(payload, variableValues, subsequentPayloads).
140+
* Yield an unordered map containing {data}, {errors} and {hasNext} if
141+
{subsequentPayloads} is non-empty.
142+
* For each {record} in {subsequentPayloads}:
143+
* If {record} is a Deferred Fragment Record:
144+
* Let {payload} be the result of running {ResolveDeferredFragmentRecord(record, variableValues, subsequentPayloads)}.
145+
* If {record} is a Stream Record:
146+
* Let {payload} be the result of running ResolveStreamRecord(record, variableValues, subsequentPayloads).
147+
* If {record} is not the final element in {subsequentPayloads}
148+
* Add an entry to {payload} named `hasNext` with the value {true}.
149+
* If {record} is the final element in {subsequentPayloads}
150+
* Add an entry to {payload} named `hasNext` with the value {false}.
151+
* Yield {payload}
150152

151153
### Mutation
152154

@@ -580,13 +582,13 @@ DeferFragment(objectType, objectValue, fragmentSelectionSet, parentPath):
580582
#### Deferred Fragment Record
581583

582584
**Formal Specification**
583-
Let {deferredFragment} be an inline fragment or fragment spread with `@defer` provided.
585+
Let {deferredFragmentRecord} be an inline fragment or fragment spread with `@defer` provided.
584586
Deferred Fragment Record is a structure containing:
585587
* {label} value derived from the `@defer` directive.
586-
* {objectType} of the {deferredFragment}.
587-
* {objectValue} of the {deferredFragment}.
588-
* {fragmentSelectionSet}: the top level selection set of {deferredFragment}.
589-
* {path} a list of field names and indices from root to {deferredFragment}.
588+
* {objectType} of the {deferredFragmentRecord}.
589+
* {objectValue} of the {deferredFragmentRecord}.
590+
* {fragmentSelectionSet}: the top level selection set of {deferredFragmentRecord}.
591+
* {path} a list of field names and indices from root to {deferredFragmentRecord}.
590592

591593
CreateDeferredFragmentRecord(label, objectType, objectValue, fragmentSelectionSet, path):
592594
* If {path} is not provided, initialize it to an empty list.
@@ -749,18 +751,18 @@ CreateStreamRecord(label, initialCount, iterator, resolvedItems, index, fields,
749751
* Construct a stream record based on the parameters passed in.
750752

751753
ResolveStreamRecord(streamRecord, variableValues, subsequentPayloads):
752-
* Let {label}, {iterator}, {resolvedItems}, {index}, {path}, {fields},
753-
{innerType} be the correspondent fields on the Stream Record structure.
754-
* Remove the first entry from {resolvedItem}, let the entry be {item}. If
755-
{resolvedItem} is empty, retrieve more items from {iterator}:
756-
* Append {index} to {path}.
757-
* Increment {index}.
758-
* Let {payload} be the result of calling CompleteValue(innerType, fields, item, variableValues, subsequentPayloads, path)}.
759-
* Add an entry to {payload} named `label` with the value {label}.
760-
* Add an entry to {payload} named `path` with the value {path}.
761-
* If {resolveItem} is not empty or {iterator} does not reach the end:
762-
* Append {streamRecord} to {subsequentPayloads}.
763-
* Return {payload}.
754+
* Let {label}, {iterator}, {resolvedItems}, {index}, {path}, {fields},
755+
{innerType} be the correspondent fields on the Stream Record structure.
756+
* Remove the first entry from {resolvedItem}, let the entry be {item}. If
757+
{resolvedItem} is empty, retrieve more items from {iterator}:
758+
* Append {index} to {path}.
759+
* Increment {index}.
760+
* Let {payload} be the result of calling CompleteValue(innerType, fields, item, variableValues, subsequentPayloads, path)}.
761+
* Add an entry to {payload} named `label` with the value {label}.
762+
* Add an entry to {payload} named `path` with the value {path}.
763+
* If {resolveItem} is not empty or {iterator} does not reach the end:
764+
* Append {streamRecord} to {subsequentPayloads}.
765+
* Return {payload}.
764766

765767

766768
CompleteValue(fieldType, fields, result, variableValues, subsequentPayloads, parentPath):

0 commit comments

Comments
 (0)