diff --git a/src/main/java/graphql/execution/incremental/DeferredExecutionSupport.java b/src/main/java/graphql/execution/incremental/DeferredExecutionSupport.java index 3b8e7efe8a..2b9ef720a1 100644 --- a/src/main/java/graphql/execution/incremental/DeferredExecutionSupport.java +++ b/src/main/java/graphql/execution/incremental/DeferredExecutionSupport.java @@ -73,14 +73,14 @@ public DeferredExecutionSupportImpl( ImmutableList.Builder nonDeferredFieldNamesBuilder = ImmutableList.builder(); mergedSelectionSet.getSubFields().values().forEach(mergedField -> { + if (mergedField.getFields().size() > mergedField.getDeferredExecutions().size()) { + nonDeferredFieldNamesBuilder.add(mergedField.getSingleField().getResultKey()); + return; + } mergedField.getDeferredExecutions().forEach(de -> { deferredExecutionToFieldsBuilder.put(de, mergedField); deferredFieldsBuilder.add(mergedField); }); - - if (mergedField.getDeferredExecutions().isEmpty()) { - nonDeferredFieldNamesBuilder.add(mergedField.getSingleField().getResultKey()); - } }); this.deferredExecutionToFields = deferredExecutionToFieldsBuilder.build(); diff --git a/src/test/groovy/graphql/execution/incremental/DeferExecutionSupportIntegrationTest.groovy b/src/test/groovy/graphql/execution/incremental/DeferExecutionSupportIntegrationTest.groovy index 3f149a8ad5..7e3cae0520 100644 --- a/src/test/groovy/graphql/execution/incremental/DeferExecutionSupportIntegrationTest.groovy +++ b/src/test/groovy/graphql/execution/incremental/DeferExecutionSupportIntegrationTest.groovy @@ -1604,6 +1604,37 @@ class DeferExecutionSupportIntegrationTest extends Specification { incrementalResults.any { it.incremental[0].path == ["posts", 2] } } + + def "two fragments one with defer and one without"() { + given: + def query = ''' + query { + post { + text + ...f1 @defer + ...f2 + } + } + + fragment f1 on Post { + summary + } + fragment f2 on Post { + summary + } + ''' + when: + def initialResult = executeQuery(query) + + then: + initialResult.toSpecification() == [ + data: [post: [summary: "A summary", text: "The full text"]] + ] + + + } + + private ExecutionResult executeQuery(String query) { return this.executeQuery(query, true, [:]) }