@@ -43,7 +43,12 @@ type extensionser interface {
4343}
4444
4545func makePanicError (value interface {}) * errors.QueryError {
46- return errors .Errorf ("panic occurred: %v" , value )
46+ return & errors.QueryError {
47+ Message : fmt .Sprintf ("graphql: panic occurred: %v" , value ),
48+ Extensions : map [string ]interface {}{
49+ "code" : 500 , "success" : false ,
50+ },
51+ }
4752}
4853
4954func (r * Request ) Execute (ctx context.Context , s * resolvable.Schema , op * query.Operation ) ([]byte , []* errors.QueryError ) {
@@ -188,11 +193,6 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
188193 var result reflect.Value
189194 var err * errors.QueryError
190195
191- traceCtx , finish := r .Tracer .TraceField (ctx , f .field .TraceLabel , f .field .TypeName , f .field .Name , ! f .field .Async , f .field .Args )
192- defer func () {
193- finish (f .out .Bytes (), err )
194- }()
195-
196196 err = func () (err * errors.QueryError ) {
197197 defer func () {
198198 if panicValue := recover (); panicValue != nil {
@@ -206,20 +206,26 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
206206 }
207207 }()
208208
209+ var finish trace.TraceFieldFinishFunc
210+ ctx , finish = r .Tracer .TraceField (ctx , f .field .TraceLabel , f .field .TypeName , f .field .Name , ! f .field .Async , f .field .Args )
211+ defer func () {
212+ finish (f .out .Bytes (), err )
213+ }()
214+
209215 if f .field .FixedResult .IsValid () {
210216 result = f .field .FixedResult
211217 return nil
212218 }
213219
214- if err := traceCtx .Err (); err != nil {
220+ if err := ctx .Err (); err != nil {
215221 return errors .Errorf ("%s" , err ) // don't execute any more resolvers if context got cancelled
216222 }
217223
218224 res := f .resolver
219225 if f .field .UseMethodResolver () {
220226 var in []reflect.Value
221227 if f .field .HasContext {
222- in = append (in , reflect .ValueOf (traceCtx ))
228+ in = append (in , reflect .ValueOf (ctx ))
223229 }
224230 if f .field .ArgsPacker != nil {
225231 in = append (in , f .field .PackedArgs )
@@ -258,7 +264,7 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
258264 return
259265 }
260266
261- r .execSelectionSet (traceCtx , f .sels , f .field .Type , path , s , result , f .out )
267+ r .execSelectionSet (ctx , f .sels , f .field .Type , path , s , result , f .out )
262268}
263269
264270func (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