Skip to content

Commit eda84d3

Browse files
post merge adjustments
1 parent 6a0f9f7 commit eda84d3

3 files changed

Lines changed: 54 additions & 53 deletions

File tree

src/main/java/graphql/normalized/ExecutableNormalizedOperationFactory.java

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import graphql.schema.GraphQLObjectType;
3939
import graphql.schema.GraphQLSchema;
4040
import graphql.schema.GraphQLType;
41+
import graphql.schema.GraphQLTypeUtil;
4142
import graphql.schema.GraphQLUnionType;
4243
import graphql.schema.GraphQLUnmodifiedType;
4344
import graphql.schema.impl.SchemaUtil;
@@ -52,7 +53,6 @@
5253
import java.util.Map;
5354
import java.util.Objects;
5455
import java.util.Set;
55-
import java.util.function.BiConsumer;
5656
import java.util.function.Function;
5757
import java.util.function.Predicate;
5858
import java.util.stream.Collectors;
@@ -242,14 +242,14 @@ public static ExecutableNormalizedOperation createExecutableNormalizedOperation(
242242
) {
243243
NodeUtil.GetOperationResult getOperationResult = NodeUtil.getOperation(document, operationName);
244244

245-
return createExecutableNormalizedOperation(
245+
return new ExecutableNormalizedOperationFactoryImpl(
246246
graphQLSchema,
247247
getOperationResult.operationDefinition,
248248
getOperationResult.fragmentsByName,
249249
coercedVariableValues,
250250
null,
251251
options
252-
);
252+
).createNormalizedQueryImpl();
253253
}
254254

255255
/**
@@ -425,8 +425,7 @@ private ExecutableNormalizedOperation createNormalizedQueryImpl() {
425425
topLevel,
426426
fieldAndAstParents,
427427
1,
428-
options.getMaxChildrenDepth(),
429-
options.deferSupport);
428+
options.getMaxChildrenDepth());
430429
}
431430
// getPossibleMergerList
432431
for (PossibleMerger possibleMerger : possibleMergerList) {
@@ -444,7 +443,7 @@ private ExecutableNormalizedOperation createNormalizedQueryImpl() {
444443
);
445444
}
446445

447-
private void captureMergedField(ExecutableNormalizedField enf, MergedField mergedFld) {
446+
private void captureMergedField(ExecutableNormalizedField enf, MergedField mergedFld) {
448447
// QueryDirectivesImpl is a lazy object and only computes itself when asked for
449448
QueryDirectives queryDirectives = new QueryDirectivesImpl(mergedFld, graphQLSchema, coercedVariableValues.toMap(), options.getGraphQLContext(), options.getLocale());
450449
normalizedFieldToQueryDirectives.put(enf, queryDirectives);
@@ -454,8 +453,7 @@ private void captureMergedField(ExecutableNormalizedField enf, MergedField merge
454453
private void buildFieldWithChildren(ExecutableNormalizedField executableNormalizedField,
455454
ImmutableList<FieldAndAstParent> fieldAndAstParents,
456455
int curLevel,
457-
int maxLevel,
458-
boolean deferSupport) {
456+
int maxLevel) {
459457
if (curLevel > maxLevel) {
460458
throw new AbortExecutionException("Maximum query depth exceeded " + curLevel + " > " + maxLevel);
461459
}
@@ -475,8 +473,7 @@ private void buildFieldWithChildren(ExecutableNormalizedField executableNormaliz
475473
buildFieldWithChildren(childENF,
476474
childFieldAndAstParents,
477475
curLevel + 1,
478-
maxLevel,
479-
deferSupport);
476+
maxLevel);
480477
}
481478
}
482479

@@ -517,7 +514,8 @@ public CollectNFResult collectFromMergedField(ExecutableNormalizedField executab
517514
this.collectFromSelectionSet(fieldAndAstParent.field.getSelectionSet(),
518515
collectedFields,
519516
(GraphQLCompositeType) astParentType,
520-
possibleObjects
517+
possibleObjects,
518+
null
521519
);
522520
}
523521
Map<String, List<CollectedField>> fieldsByName = fieldsByResultKey(collectedFields);
@@ -542,7 +540,7 @@ public CollectNFResult collectFromOperation(GraphQLObjectType rootType) {
542540

543541
Set<GraphQLObjectType> possibleObjects = ImmutableSet.of(rootType);
544542
List<CollectedField> collectedFields = new ArrayList<>();
545-
collectFromSelectionSet(operationDefinition.getSelectionSet(), collectedFields, rootType, possibleObjects);
543+
collectFromSelectionSet(operationDefinition.getSelectionSet(), collectedFields, rootType, possibleObjects, null);
546544
// group by result key
547545
Map<String, List<CollectedField>> fieldsByName = fieldsByResultKey(collectedFields);
548546
ImmutableList.Builder<ExecutableNormalizedField> resultNFs = ImmutableList.builder();
@@ -553,12 +551,6 @@ public CollectNFResult collectFromOperation(GraphQLObjectType rootType) {
553551
return new CollectNFResult(resultNFs.build(), normalizedFieldToAstFields.build());
554552
}
555553

556-
public CollectNFResult collectFromOperation(FieldCollectorNormalizedQueryParams parameters,
557-
OperationDefinition operationDefinition,
558-
GraphQLObjectType rootType) {
559-
return this.collectFromOperation(parameters, operationDefinition, rootType, false);
560-
}
561-
562554
private void createNFs(ImmutableList.Builder<ExecutableNormalizedField> nfListBuilder,
563555
Map<String, List<CollectedField>> fieldsByName,
564556
ImmutableListMultimap.Builder<ExecutableNormalizedField, FieldAndAstParent> normalizedFieldToAstFields,
@@ -626,10 +618,9 @@ public CollectedFieldGroup(Set<CollectedField> fields, Set<GraphQLObjectType> ob
626618
this.deferExecutions = deferExecutions;
627619
}
628620
}
629-
}
630621

631-
private List<CollectedFieldGroup> groupByCommonParents(Collection<CollectedField> fields, boolean deferSupport) {
632-
if (deferSupport) {
622+
private List<CollectedFieldGroup> groupByCommonParents(Collection<CollectedField> fields) {
623+
if (this.options.deferSupport) {
633624
return groupByCommonParentsWithDeferSupport(fields);
634625
} else {
635626
return groupByCommonParentsNoDeferSupport(fields);
@@ -644,12 +635,12 @@ private List<CollectedFieldGroup> groupByCommonParentsNoDeferSupport(Collection<
644635
Set<GraphQLObjectType> allRelevantObjects = objectTypes.build();
645636
Map<GraphQLType, ImmutableList<CollectedField>> groupByAstParent = groupingBy(fields, fieldAndType -> fieldAndType.astTypeCondition);
646637
if (groupByAstParent.size() == 1) {
647-
return singletonList(new CollectedFieldGroup(ImmutableSet.copyOf(fields), allRelevantObjects));
638+
return singletonList(new CollectedFieldGroup(ImmutableSet.copyOf(fields), allRelevantObjects, null));
648639
}
649640
ImmutableList.Builder<CollectedFieldGroup> result = ImmutableList.builder();
650641
for (GraphQLObjectType objectType : allRelevantObjects) {
651642
Set<CollectedField> relevantFields = filterSet(fields, field -> field.objectTypes.contains(objectType));
652-
result.add(new CollectedFieldGroup(relevantFields, singleton(objectType)));
643+
result.add(new CollectedFieldGroup(relevantFields, singleton(objectType), null));
653644
}
654645
return result.build();
655646
}
@@ -868,11 +859,21 @@ private static class CollectedField {
868859
Field field;
869860
Set<GraphQLObjectType> objectTypes;
870861
GraphQLCompositeType astTypeCondition;
862+
DeferExecution deferExecution;
871863

872-
public CollectedField(Field field, Set<GraphQLObjectType> objectTypes, GraphQLCompositeType astTypeCondition) {
864+
public CollectedField(Field field, Set<GraphQLObjectType> objectTypes, GraphQLCompositeType astTypeCondition, DeferExecution deferExecution) {
873865
this.field = field;
874866
this.objectTypes = objectTypes;
875867
this.astTypeCondition = astTypeCondition;
868+
this.deferExecution = deferExecution;
869+
}
870+
871+
public boolean isAbstract() {
872+
return GraphQLTypeUtil.isInterfaceOrUnion(astTypeCondition);
873+
}
874+
875+
public boolean isConcrete() {
876+
return GraphQLTypeUtil.isObjectType(astTypeCondition);
876877
}
877878
}
878879

src/test/groovy/graphql/normalized/ExecutableNormalizedOperationFactoryTest.groovy

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ type Dog implements Animal{
329329

330330
Document document = TestUtil.parseQuery(query)
331331

332-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
332+
333333
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
334334
def printedTree = printTree(tree)
335335

@@ -372,7 +372,7 @@ type Dog implements Animal{
372372

373373
Document document = TestUtil.parseQuery(query)
374374

375-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
375+
376376
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
377377
def printedTree = printTree(tree)
378378

@@ -422,7 +422,7 @@ type Dog implements Animal{
422422

423423
Document document = TestUtil.parseQuery(query)
424424

425-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
425+
426426
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
427427
def printedTree = printTree(tree)
428428

@@ -485,7 +485,7 @@ type Dog implements Animal{
485485

486486
Document document = TestUtil.parseQuery(query)
487487

488-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
488+
489489
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
490490
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
491491

@@ -531,7 +531,7 @@ type Dog implements Animal{
531531

532532
Document document = TestUtil.parseQuery(query)
533533

534-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
534+
535535
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
536536
def printedTree = printTree(tree)
537537

@@ -575,7 +575,7 @@ type Dog implements Animal{
575575

576576
Document document = TestUtil.parseQuery(query)
577577

578-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
578+
579579
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
580580
def printedTree = printTree(tree)
581581

@@ -619,7 +619,7 @@ type Dog implements Animal{
619619

620620
Document document = TestUtil.parseQuery(query)
621621

622-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
622+
623623
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
624624
def printedTree = printTree(tree)
625625

@@ -651,7 +651,7 @@ type Dog implements Animal{
651651

652652
Document document = TestUtil.parseQuery(query)
653653

654-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
654+
655655
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
656656
def printedTree = printTree(tree)
657657

@@ -702,7 +702,7 @@ type Dog implements Animal{
702702

703703
Document document = TestUtil.parseQuery(query)
704704

705-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
705+
706706
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
707707
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
708708

@@ -752,7 +752,7 @@ type Dog implements Animal{
752752

753753
Document document = TestUtil.parseQuery(query)
754754

755-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
755+
756756
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
757757
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
758758

@@ -791,7 +791,7 @@ type Dog implements Animal{
791791

792792
Document document = TestUtil.parseQuery(query)
793793

794-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
794+
795795
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
796796
def printedTree = printTree(tree)
797797

@@ -835,7 +835,7 @@ type Dog implements Animal{
835835
836836
Document document = TestUtil.parseQuery(query)
837837
838-
def dependencyGraph = new ExecutableNormalizedOperationFactory()
838+
839839
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
840840
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
841841
@@ -875,7 +875,7 @@ type Dog implements Animal{
875875
876876
Document document = TestUtil.parseQuery(query)
877877
878-
def dependencyGraph = new ExecutableNormalizedOperationFactory()
878+
879879
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
880880
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
881881
@@ -923,7 +923,7 @@ type Dog implements Animal{
923923
924924
Document document = TestUtil.parseQuery(query)
925925
926-
def dependencyGraph = new ExecutableNormalizedOperationFactory()
926+
927927
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
928928
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
929929
@@ -1026,7 +1026,7 @@ type Dog implements Animal{
10261026
Document document = TestUtil.parseQuery(query)
10271027
def subFooField = (document.getDefinitions()[1] as FragmentDefinition).getSelectionSet().getSelections()[0] as Field
10281028
1029-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
1029+
10301030
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
10311031
def fieldToNormalizedField = tree.getFieldToNormalizedField()
10321032
@@ -1069,7 +1069,7 @@ type Dog implements Animal{
10691069
def petsField = (document.getDefinitions()[0] as OperationDefinition).getSelectionSet().getSelections()[0] as Field
10701070
def idField = petsField.getSelectionSet().getSelections()[0] as Field
10711071
1072-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
1072+
10731073
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
10741074
def fieldToNormalizedField = tree.getFieldToNormalizedField()
10751075
@@ -1118,7 +1118,7 @@ type Dog implements Animal{
11181118
def schemaField = selections[2] as Field
11191119
def typeField = selections[3] as Field
11201120
1121-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
1121+
11221122
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
11231123
def fieldToNormalizedField = tree.getFieldToNormalizedField()
11241124
@@ -1175,7 +1175,7 @@ type Dog implements Animal{
11751175
11761176
Document document = TestUtil.parseQuery(query)
11771177
1178-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
1178+
11791179
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
11801180
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
11811181
@@ -1218,7 +1218,7 @@ type Dog implements Animal{
12181218
12191219
Document document = TestUtil.parseQuery(query)
12201220
1221-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
1221+
12221222
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
12231223
def printedTree = printTree(tree)
12241224
@@ -1246,7 +1246,7 @@ type Dog implements Animal{
12461246
12471247
Document document = TestUtil.parseQuery(query)
12481248
1249-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
1249+
12501250
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
12511251
def normalizedFieldToMergedField = tree.getNormalizedFieldToMergedField()
12521252
Traverser<ExecutableNormalizedField> traverser = Traverser.depthFirst({ it.getChildren() })
@@ -1385,7 +1385,7 @@ schema {
13851385
13861386
Document document = TestUtil.parseQuery(mutation)
13871387
1388-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
1388+
13891389
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
13901390
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
13911391
@@ -2584,7 +2584,7 @@ fragment personName on Person {
25842584
25852585
Document document = TestUtil.parseQuery(query)
25862586
2587-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
2587+
25882588
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
25892589
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
25902590
@@ -2637,7 +2637,7 @@ fragment personName on Person {
26372637
26382638
Document document = TestUtil.parseQuery(query)
26392639
2640-
def dependencyGraph = new ExecutableNormalizedOperationFactory()
2640+
26412641
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
26422642
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
26432643
@@ -2684,7 +2684,7 @@ fragment personName on Person {
26842684
26852685
Document document = TestUtil.parseQuery(query)
26862686
2687-
def dependencyGraph = new ExecutableNormalizedOperationFactory()
2687+
26882688
def tree = localCreateExecutableNormalizedOperation(graphQLSchema, document, null, CoercedVariables.emptyVariables())
26892689
def printedTree = printTreeWithLevelInfo(tree, graphQLSchema)
26902690
@@ -2882,10 +2882,10 @@ fragment personName on Person {
28822882
String operationName,
28832883
CoercedVariables coercedVariableValues
28842884
) {
2885-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
2885+
28862886
def options = ExecutableNormalizedOperationFactory.Options.defaultOptions().deferSupport(deferSupport)
28872887
2888-
return dependencyGraph.createExecutableNormalizedOperation(graphQLSchema, document, operationName, coercedVariableValues, options)
2888+
return ExecutableNormalizedOperationFactory.createExecutableNormalizedOperation(graphQLSchema, document, operationName, coercedVariableValues, options)
28892889
}
28902890
28912891
private static ExecutableNormalizedOperation localCreateExecutableNormalizedOperationWithRawVariables(
@@ -2894,10 +2894,10 @@ fragment personName on Person {
28942894
String operationName,
28952895
RawVariables rawVariables
28962896
) {
2897-
ExecutableNormalizedOperationFactory dependencyGraph = new ExecutableNormalizedOperationFactory()
2897+
28982898
def options = ExecutableNormalizedOperationFactory.Options.defaultOptions().deferSupport(deferSupport)
28992899
2900-
return dependencyGraph.createExecutableNormalizedOperationWithRawVariables(
2900+
return ExecutableNormalizedOperationFactory.createExecutableNormalizedOperationWithRawVariables(
29012901
graphQLSchema,
29022902
document,
29032903
operationName,

0 commit comments

Comments
 (0)