@@ -360,7 +360,7 @@ private static function resolveField(ExecutionContext $exeContext, ObjectType $p
360
360
{
361
361
$ fieldAST = $ fieldASTs [0 ];
362
362
363
- $ uid = self ::getFieldUid ($ fieldAST );
363
+ $ uid = self ::getFieldUid ($ fieldAST, $ parentType );
364
364
365
365
// Get memoized variables if they exist
366
366
if (isset ($ exeContext ->memoized ['resolveField ' ][$ uid ])) {
@@ -383,7 +383,6 @@ private static function resolveField(ExecutionContext $exeContext, ObjectType $p
383
383
384
384
// Build hash of arguments from the field.arguments AST, using the
385
385
// variables scope to fulfill any variable references.
386
- // TODO: find a way to memoize, in case this field is within a List type.
387
386
$ args = Values::getArgumentValues (
388
387
$ fieldDef ->args ,
389
388
$ fieldAST ->arguments ,
@@ -406,21 +405,19 @@ private static function resolveField(ExecutionContext $exeContext, ObjectType $p
406
405
407
406
// Memoizing results for same query field
408
407
// (useful for lists when several values are resolved against the same field)
409
- if ($ returnType instanceof ObjectType) {
410
- $ memoized = $ exeContext ->memoized ['resolveField ' ][$ uid ] = [
411
- 'fieldDef ' => $ fieldDef ,
412
- 'args ' => $ args ,
413
- 'info ' => $ info ,
414
- 'results ' => new \SplObjectStorage
415
- ];
416
- }
408
+ $ exeContext ->memoized ['resolveField ' ][$ uid ] = $ memoized = [
409
+ 'fieldDef ' => $ fieldDef ,
410
+ 'args ' => $ args ,
411
+ 'info ' => $ info ,
412
+ 'results ' => new \SplObjectStorage
413
+ ];
417
414
}
418
415
419
416
// When source value is object it is possible to memoize certain subset of results
420
417
$ isObject = is_object ($ source );
421
418
422
419
if ($ isObject && isset ($ memoized ['results ' ][$ source ])) {
423
- $ result = $ exeContext -> memoized [ ' resolveField ' ][ $ uid ] ['results ' ][$ source ];
420
+ $ result = $ memoized ['results ' ][$ source ];
424
421
} else {
425
422
if (isset ($ fieldDef ->resolveFn )) {
426
423
$ resolveFn = $ fieldDef ->resolveFn ;
@@ -442,8 +439,8 @@ private static function resolveField(ExecutionContext $exeContext, ObjectType $p
442
439
$ result
443
440
);
444
441
445
- if ($ isObject && isset ( $ memoized [ ' results ' ]) ) {
446
- $ exeContext -> memoized [ ' resolveField ' ][ $ uid ] ['results ' ][$ source ] = $ result ;
442
+ if ($ isObject ) {
443
+ $ memoized ['results ' ][$ source ] = $ result ;
447
444
}
448
445
}
449
446
@@ -592,7 +589,7 @@ private static function completeValue(ExecutionContext $exeContext, Type $return
592
589
$ visitedFragmentNames = new \ArrayObject ();
593
590
for ($ i = 0 ; $ i < count ($ fieldASTs ); $ i ++) {
594
591
// Get memoized value if it exists
595
- $ uid = self ::getFieldUid ($ fieldASTs [$ i ]);
592
+ $ uid = self ::getFieldUid ($ fieldASTs [$ i ], $ runtimeType );
596
593
if (isset ($ exeContext ->memoized ['collectSubFields ' ][$ uid ][$ runtimeType ->name ])) {
597
594
$ subFieldASTs = $ exeContext ->memoized ['collectSubFields ' ][$ uid ][$ runtimeType ->name ];
598
595
}
@@ -674,8 +671,8 @@ private static function getFieldDef(Schema $schema, ObjectType $parentType, $fie
674
671
* @param object $fieldAST
675
672
* @return string
676
673
*/
677
- private static function getFieldUid ($ fieldAST )
674
+ private static function getFieldUid ($ fieldAST, ObjectType $ fieldType )
678
675
{
679
- return $ fieldAST ->loc ->start . '- ' . $ fieldAST ->loc ->end ;
676
+ return $ fieldAST ->loc ->start . '- ' . $ fieldAST ->loc ->end . ' - ' . $ fieldType -> name ;
680
677
}
681
678
}
0 commit comments