@@ -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 ;
10+ use graph:: prelude:: { MetricsRegistry , QueryResult } ;
1111use graph:: prometheus:: { Gauge , Histogram } ;
1212use graph:: {
1313 components:: store:: SubscriptionManager ,
@@ -21,6 +21,8 @@ use graph::{
2121 data:: query:: { QueryResults , QueryTarget } ,
2222 prelude:: QueryStore ,
2323} ;
24+ use graphql_tools:: validation:: validate:: { validate, ValidationPlan } ;
25+ use graphql_tools:: validation:: rules:: { OverlappingFieldsCanBeMerged } ;
2426
2527use lazy_static:: lazy_static;
2628
@@ -77,6 +79,7 @@ pub struct GraphQlRunner<S, SM> {
7779 subscription_manager : Arc < SM > ,
7880 load_manager : Arc < LoadManager > ,
7981 result_size : Arc < ResultSizeMetrics > ,
82+ graphql_validation_plan : ValidationPlan ,
8083}
8184
8285lazy_static ! {
@@ -135,12 +138,16 @@ where
135138 ) -> Self {
136139 let logger = logger. new ( o ! ( "component" => "GraphQlRunner" ) ) ;
137140 let result_size = Arc :: new ( ResultSizeMetrics :: new ( registry) ) ;
141+ let mut graphql_validation_plan = ValidationPlan { rules : Vec :: new ( ) } ;
142+ graphql_validation_plan. add_rule ( Box :: new ( OverlappingFieldsCanBeMerged { } ) ) ;
143+
138144 GraphQlRunner {
139145 logger,
140146 store,
141147 subscription_manager,
142148 load_manager,
143149 result_size,
150+ graphql_validation_plan
144151 }
145152 }
146153
@@ -197,6 +204,11 @@ where
197204 let state = store. deployment_state ( ) . await ?;
198205 let network = Some ( store. network_name ( ) . to_string ( ) ) ;
199206 let schema = store. api_schema ( ) ?;
207+ let validation_errors = validate ( & schema. document ( ) , & query. document , & self . graphql_validation_plan ) ;
208+
209+ if validation_errors. len ( ) > 0 {
210+ return Ok ( QueryResults :: from ( QueryResult :: from ( validation_errors) ) ) ;
211+ }
200212
201213 // Test only, see c435c25decbc4ad7bbbadf8e0ced0ff2
202214 #[ cfg( debug_assertions) ]
0 commit comments