@@ -41,7 +41,12 @@ type extensionser interface {
4141}
4242
4343func makePanicError (value interface {}) * errors.QueryError {
44- return errors .Errorf ("graphql: panic occurred: %v" , value )
44+ return & errors.QueryError {
45+ Message : fmt .Sprintf ("graphql: panic occurred: %v" , value ),
46+ Extensions : map [string ]interface {}{
47+ "code" : 500 , "success" : false ,
48+ },
49+ }
4550}
4651
4752func (r * Request ) Execute (ctx context.Context , s * resolvable.Schema , op * query.Operation ) ([]byte , []* errors.QueryError ) {
@@ -181,11 +186,6 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
181186 var result reflect.Value
182187 var err * errors.QueryError
183188
184- traceCtx , finish := r .Tracer .TraceField (ctx , f .field .TraceLabel , f .field .TypeName , f .field .Name , ! f .field .Async , f .field .Args )
185- defer func () {
186- finish (f .out .Bytes (), err )
187- }()
188-
189189 err = func () (err * errors.QueryError ) {
190190 defer func () {
191191 if panicValue := recover (); panicValue != nil {
@@ -199,20 +199,26 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
199199 }
200200 }()
201201
202+ var finish trace.TraceFieldFinishFunc
203+ ctx , finish = r .Tracer .TraceField (ctx , f .field .TraceLabel , f .field .TypeName , f .field .Name , ! f .field .Async , f .field .Args )
204+ defer func () {
205+ finish (f .out .Bytes (), err )
206+ }()
207+
202208 if f .field .FixedResult .IsValid () {
203209 result = f .field .FixedResult
204210 return nil
205211 }
206212
207- if err := traceCtx .Err (); err != nil {
213+ if err := ctx .Err (); err != nil {
208214 return errors .Errorf ("%s" , err ) // don't execute any more resolvers if context got cancelled
209215 }
210216
211217 res := f .resolver
212218 if f .field .UseMethodResolver () {
213219 var in []reflect.Value
214220 if f .field .HasContext {
215- in = append (in , reflect .ValueOf (traceCtx ))
221+ in = append (in , reflect .ValueOf (ctx ))
216222 }
217223 if f .field .ArgsPacker != nil {
218224 in = append (in , f .field .PackedArgs )
@@ -251,7 +257,7 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
251257 return
252258 }
253259
254- r .execSelectionSet (traceCtx , f .sels , f .field .Type , path , s , result , f .out )
260+ r .execSelectionSet (ctx , f .sels , f .field .Type , path , s , result , f .out )
255261}
256262
257263func (r * Request ) execSelectionSet (ctx context.Context , sels []selected.Selection , typ common.Type , path * pathSegment , s * resolvable.Schema , resolver reflect.Value , out * bytes.Buffer ) {
0 commit comments