@@ -43,7 +43,12 @@ type extensionser interface {
43
43
}
44
44
45
45
func 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
+ }
47
52
}
48
53
49
54
func (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
188
193
var result reflect.Value
189
194
var err * errors.QueryError
190
195
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
-
196
196
err = func () (err * errors.QueryError ) {
197
197
defer func () {
198
198
if panicValue := recover (); panicValue != nil {
@@ -206,20 +206,26 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
206
206
}
207
207
}()
208
208
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
+
209
215
if f .field .FixedResult .IsValid () {
210
216
result = f .field .FixedResult
211
217
return nil
212
218
}
213
219
214
- if err := traceCtx .Err (); err != nil {
220
+ if err := ctx .Err (); err != nil {
215
221
return errors .Errorf ("%s" , err ) // don't execute any more resolvers if context got cancelled
216
222
}
217
223
218
224
res := f .resolver
219
225
if f .field .UseMethodResolver () {
220
226
var in []reflect.Value
221
227
if f .field .HasContext {
222
- in = append (in , reflect .ValueOf (traceCtx ))
228
+ in = append (in , reflect .ValueOf (ctx ))
223
229
}
224
230
if f .field .ArgsPacker != nil {
225
231
in = append (in , f .field .PackedArgs )
@@ -258,7 +264,7 @@ func execFieldSelection(ctx context.Context, r *Request, s *resolvable.Schema, f
258
264
return
259
265
}
260
266
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 )
262
268
}
263
269
264
270
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