@@ -7,7 +7,7 @@ use std::time::{Duration, Instant};
77use crate :: prelude:: { QueryExecutionOptions , StoreResolver , SubscriptionExecutionOptions } ;
88use crate :: query:: execute_query;
99use crate :: subscription:: execute_prepared_subscription;
10- use graph:: prelude:: { MetricsRegistry , QueryResult } ;
10+ use graph:: prelude:: MetricsRegistry ;
1111use graph:: prometheus:: { Gauge , Histogram } ;
1212use graph:: {
1313 components:: store:: SubscriptionManager ,
@@ -22,10 +22,10 @@ use graph::{
2222 prelude:: QueryStore ,
2323} ;
2424use graphql_tools:: validation:: rules:: {
25- FragmentsOnCompositeTypes , KnownFragmentNamesRule , LoneAnonymousOperation , NoUnusedFragments ,
26- OverlappingFieldsCanBeMerged ,
25+ FragmentsOnCompositeTypes , KnownFragmentNamesRule , LeafFieldSelections , LoneAnonymousOperation ,
26+ NoUnusedFragments , OverlappingFieldsCanBeMerged ,
2727} ;
28- use graphql_tools:: validation:: validate:: { validate , ValidationPlan } ;
28+ use graphql_tools:: validation:: validate:: ValidationPlan ;
2929
3030use lazy_static:: lazy_static;
3131
@@ -82,7 +82,7 @@ pub struct GraphQlRunner<S, SM> {
8282 subscription_manager : Arc < SM > ,
8383 load_manager : Arc < LoadManager > ,
8484 result_size : Arc < ResultSizeMetrics > ,
85- graphql_validation_plan : ValidationPlan ,
85+ pub graphql_validation_plan : Arc < ValidationPlan > ,
8686}
8787
8888lazy_static ! {
@@ -148,14 +148,15 @@ where
148148 graphql_validation_plan. add_rule ( Box :: new ( OverlappingFieldsCanBeMerged { } ) ) ;
149149 graphql_validation_plan. add_rule ( Box :: new ( KnownFragmentNamesRule { } ) ) ;
150150 graphql_validation_plan. add_rule ( Box :: new ( NoUnusedFragments { } ) ) ;
151+ graphql_validation_plan. add_rule ( Box :: new ( LeafFieldSelections { } ) ) ;
151152
152153 GraphQlRunner {
153154 logger,
154155 store,
155156 subscription_manager,
156157 load_manager,
157158 result_size,
158- graphql_validation_plan,
159+ graphql_validation_plan : Arc :: new ( graphql_validation_plan ) ,
159160 }
160161 }
161162
@@ -210,17 +211,6 @@ where
210211 // setting up here
211212 let store = self . store . query_store ( target, false ) . await ?;
212213 let schema = store. api_schema ( ) ?;
213-
214- let validation_errors = validate (
215- & schema. document ( ) ,
216- & query. document ,
217- & self . graphql_validation_plan ,
218- ) ;
219-
220- if validation_errors. len ( ) > 0 {
221- return Ok ( QueryResults :: from ( QueryResult :: from ( validation_errors) ) ) ;
222- }
223-
224214 let state = store. deployment_state ( ) . await ?;
225215 let network = Some ( store. network_name ( ) . to_string ( ) ) ;
226216
@@ -238,6 +228,7 @@ where
238228 schema,
239229 network,
240230 query,
231+ self . graphql_validation_plan . clone ( ) ,
241232 max_complexity,
242233 max_depth,
243234 ) ?;
@@ -343,6 +334,7 @@ where
343334 schema,
344335 Some ( network. clone ( ) ) ,
345336 subscription. query ,
337+ self . graphql_validation_plan . clone ( ) ,
346338 * GRAPHQL_MAX_COMPLEXITY ,
347339 * GRAPHQL_MAX_DEPTH ,
348340 ) ?;
0 commit comments