@@ -52,6 +52,8 @@ public class DefaultExecutionGraphQlService implements ExecutionGraphQlService {
52
52
53
53
private final List <DataLoaderRegistrar > dataLoaderRegistrars = new ArrayList <>();
54
54
55
+ private boolean hasDataLoaderRegistrations ;
56
+
55
57
private final boolean isDefaultExecutionIdProvider ;
56
58
57
59
@@ -69,6 +71,13 @@ public DefaultExecutionGraphQlService(GraphQlSource graphQlSource) {
69
71
*/
70
72
public void addDataLoaderRegistrar (DataLoaderRegistrar registrar ) {
71
73
this .dataLoaderRegistrars .add (registrar );
74
+ this .hasDataLoaderRegistrations = (this .hasDataLoaderRegistrations || hasRegistrations (registrar ));
75
+ }
76
+
77
+ private static boolean hasRegistrations (DataLoaderRegistrar registrar ) {
78
+ DataLoaderRegistry registry = DataLoaderRegistry .newRegistry ().build ();
79
+ registrar .registerDataLoaders (registry , GraphQLContext .newContext ().build ());
80
+ return !registry .getDataLoaders ().isEmpty ();
72
81
}
73
82
74
83
@@ -78,26 +87,30 @@ public final Mono<ExecutionGraphQlResponse> execute(ExecutionGraphQlRequest requ
78
87
if (!this .isDefaultExecutionIdProvider && request .getExecutionId () == null ) {
79
88
request .configureExecutionInput (RESET_EXECUTION_ID_CONFIGURER );
80
89
}
90
+
81
91
ExecutionInput executionInput = request .toExecutionInput ();
92
+
93
+ GraphQLContext graphQLContext = executionInput .getGraphQLContext ();
82
94
snapshotFactory .captureFrom (contextView ).updateContext (executionInput .getGraphQLContext ());
83
- ExecutionInput updatedExecutionInput = registerDataLoaders (executionInput );
95
+
96
+ ExecutionInput updatedExecutionInput =
97
+ (this .hasDataLoaderRegistrations ? registerDataLoaders (executionInput ) : executionInput );
98
+
84
99
return Mono .fromFuture (this .graphQlSource .graphQl ().executeAsync (updatedExecutionInput ))
85
100
.map (result -> new DefaultExecutionGraphQlResponse (updatedExecutionInput , result ));
86
101
});
87
102
}
88
103
89
104
private ExecutionInput registerDataLoaders (ExecutionInput executionInput ) {
90
- if (!this .dataLoaderRegistrars .isEmpty ()) {
91
- GraphQLContext graphQLContext = executionInput .getGraphQLContext ();
92
- DataLoaderRegistry existingRegistry = executionInput .getDataLoaderRegistry ();
93
- if (existingRegistry == DataLoaderDispatcherInstrumentationState .EMPTY_DATALOADER_REGISTRY ) {
94
- DataLoaderRegistry newRegistry = DataLoaderRegistry .newRegistry ().build ();
95
- applyDataLoaderRegistrars (newRegistry , graphQLContext );
96
- executionInput = executionInput .transform (builder -> builder .dataLoaderRegistry (newRegistry ));
97
- }
98
- else {
99
- applyDataLoaderRegistrars (existingRegistry , graphQLContext );
100
- }
105
+ GraphQLContext graphQLContext = executionInput .getGraphQLContext ();
106
+ DataLoaderRegistry existingRegistry = executionInput .getDataLoaderRegistry ();
107
+ if (existingRegistry == DataLoaderDispatcherInstrumentationState .EMPTY_DATALOADER_REGISTRY ) {
108
+ DataLoaderRegistry newRegistry = DataLoaderRegistry .newRegistry ().build ();
109
+ applyDataLoaderRegistrars (newRegistry , graphQLContext );
110
+ executionInput = executionInput .transform (builder -> builder .dataLoaderRegistry (newRegistry ));
111
+ }
112
+ else {
113
+ applyDataLoaderRegistrars (existingRegistry , graphQLContext );
101
114
}
102
115
return executionInput ;
103
116
}
0 commit comments