@@ -41,7 +41,12 @@ type extensionser interface {
41
41
}
42
42
43
43
func 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
+ }
45
50
}
46
51
47
52
func (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
181
186
var result reflect.Value
182
187
var err * errors.QueryError
183
188
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
-
189
189
err = func () (err * errors.QueryError ) {
190
190
defer func () {
191
191
if panicValue := recover (); panicValue != nil {
@@ -199,20 +199,26 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
199
199
}
200
200
}()
201
201
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
+
202
208
if f .field .FixedResult .IsValid () {
203
209
result = f .field .FixedResult
204
210
return nil
205
211
}
206
212
207
- if err := traceCtx .Err (); err != nil {
213
+ if err := ctx .Err (); err != nil {
208
214
return errors .Errorf ("%s" , err ) // don't execute any more resolvers if context got cancelled
209
215
}
210
216
211
217
res := f .resolver
212
218
if f .field .UseMethodResolver () {
213
219
var in []reflect.Value
214
220
if f .field .HasContext {
215
- in = append (in , reflect .ValueOf (traceCtx ))
221
+ in = append (in , reflect .ValueOf (ctx ))
216
222
}
217
223
if f .field .ArgsPacker != nil {
218
224
in = append (in , f .field .PackedArgs )
@@ -251,7 +257,7 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
251
257
return
252
258
}
253
259
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 )
255
261
}
256
262
257
263
func (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