Skip to content

Commit a9d3776

Browse files
committed
nextgen engine refactoring
1 parent e889103 commit a9d3776

5 files changed

Lines changed: 55 additions & 48 deletions

File tree

src/main/java/graphql/execution/nextgen/BatchedExecutionStrategy.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
import graphql.execution.nextgen.result.ExecutionResultMultiZipper;
1111
import graphql.execution.nextgen.result.ExecutionResultNode;
1212
import graphql.execution.nextgen.result.ExecutionResultZipper;
13+
import graphql.execution.nextgen.result.NamedResultNode;
1314
import graphql.execution.nextgen.result.ObjectExecutionResultNode;
1415
import graphql.execution.nextgen.result.ObjectExecutionResultNode.RootExecutionResultNode;
1516
import graphql.execution.nextgen.result.ResultNodesUtil;
17+
import graphql.util.FpKit;
1618

1719
import java.util.ArrayList;
18-
import java.util.LinkedHashMap;
1920
import java.util.List;
2021
import java.util.Map;
2122
import java.util.concurrent.CompletableFuture;
@@ -43,7 +44,7 @@ public CompletableFuture<RootExecutionResultNode> execute(ExecutionContext execu
4344
ExecutionResultMultiZipper unresolvedNodes = ResultNodesUtil.getUnresolvedNodes(rootNode);
4445
return nextStep(executionContext, unresolvedNodes);
4546
})
46-
.thenApply(finalZipper -> finalZipper.toRootNode())
47+
.thenApply(ExecutionResultMultiZipper::toRootNode)
4748
.thenApply(RootExecutionResultNode.class::cast);
4849
}
4950

@@ -65,7 +66,7 @@ private CompletableFuture<ExecutionResultMultiZipper> nextStepImpl(ExecutionCont
6566
CompletableFuture<List<List<ExecutionResultZipper>>> listListCF = Async.flatMap(unresolvedNodes,
6667
executionResultMultiZipper -> fetchAndAnalyze(executionContext, executionResultMultiZipper.getZippers()));
6768

68-
return Common.flatList(listListCF)
69+
return FpKit.flatList(listListCF)
6970
.thenApply(zippers -> new ExecutionResultMultiZipper(commonRoot, zippers));
7071

7172
}
@@ -113,7 +114,7 @@ private CompletableFuture<List<ExecutionResultZipper>> fetchAndAnalyze(Execution
113114

114115
return Async.each(fetchedValues).thenApply(fetchedValuesMatrix -> {
115116
List<ExecutionResultZipper> result = new ArrayList<>();
116-
List<List<FetchedValueAnalysis>> newChildsPerNode = Common.transposeMatrix(fetchedValuesMatrix);
117+
List<List<FetchedValueAnalysis>> newChildsPerNode = FpKit.transposeMatrix(fetchedValuesMatrix);
117118

118119
for (int i = 0; i < newChildsPerNode.size(); i++) {
119120
ExecutionResultZipper unresolvedNodeZipper = unresolvedNodes.get(i);
@@ -127,19 +128,11 @@ private CompletableFuture<List<ExecutionResultZipper>> fetchAndAnalyze(Execution
127128

128129
private ExecutionResultZipper resolvedZipper(ExecutionResultZipper unresolvedNodeZipper, List<FetchedValueAnalysis> fetchedValuesForNode) {
129130
ObjectExecutionResultNode.UnresolvedObjectResultNode unresolvedNode = (ObjectExecutionResultNode.UnresolvedObjectResultNode) unresolvedNodeZipper.getCurNode();
130-
Map<String, ExecutionResultNode> newChildren = fetchedValueAnalysisToNodes(fetchedValuesForNode);
131-
131+
List<NamedResultNode> newChildren = util.fetchedValueAnalysisToNodes(fetchedValuesForNode);
132132
ObjectExecutionResultNode newNode = unresolvedNode.withChildren(newChildren);
133133
return unresolvedNodeZipper.withNode(newNode);
134134
}
135135

136-
private Map<String, ExecutionResultNode> fetchedValueAnalysisToNodes(List<FetchedValueAnalysis> fetchedValueAnalysisList) {
137-
Map<String, ExecutionResultNode> result = new LinkedHashMap<>();
138-
fetchedValueAnalysisList.forEach(fetchedValueAnalysis -> {
139-
result.put(fetchedValueAnalysis.getName(), resultNodesCreator.createResultNode(fetchedValueAnalysis));
140-
});
141-
return result;
142-
}
143136

144137

145138
private List<FetchedValueAnalysis> analyseValues(ExecutionContext executionContext, List<FetchedValue> fetchedValues, String name, MergedField field, List<ExecutionStepInfo> executionInfos) {

src/main/java/graphql/execution/nextgen/Common.java

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@
66
import graphql.schema.GraphQLObjectType;
77
import graphql.schema.GraphQLSchema;
88

9-
import java.util.ArrayList;
10-
import java.util.List;
11-
import java.util.concurrent.CompletableFuture;
12-
import java.util.stream.Collectors;
13-
149
import static graphql.Assert.assertShouldNeverHappen;
1510
import static graphql.language.OperationDefinition.Operation.MUTATION;
1611
import static graphql.language.OperationDefinition.Operation.QUERY;
@@ -45,30 +40,5 @@ public static GraphQLObjectType getOperationRootType(GraphQLSchema graphQLSchema
4540
}
4641

4742

48-
public static <T> List<List<T>> transposeMatrix(List<? extends List<T>> matrix) {
49-
int rowCount = matrix.size();
50-
int colCount = matrix.get(0).size();
51-
List<List<T>> result = new ArrayList<>();
52-
for (int i = 0; i < rowCount; i++) {
53-
for (int j = 0; j < colCount; j++) {
54-
T val = matrix.get(i).get(j);
55-
if (result.size() <= j) {
56-
result.add(j, new ArrayList());
57-
}
58-
result.get(j).add(i, val);
59-
}
60-
}
61-
return result;
62-
}
63-
64-
public static <T> CompletableFuture<List<T>> flatList(CompletableFuture<List<List<T>>> cf) {
65-
return cf.thenApply(Common::flatList);
66-
}
67-
68-
public static <T> List<T> flatList(List<List<T>> listLists) {
69-
return listLists.stream()
70-
.flatMap(List::stream)
71-
.collect(Collectors.toList());
72-
}
7343

7444
}

src/main/java/graphql/execution/nextgen/ExecutionStrategyUtil.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import graphql.execution.MergedField;
88
import graphql.execution.nextgen.result.ExecutionResultNode;
99
import graphql.execution.nextgen.result.NamedResultNode;
10+
import graphql.util.FpKit;
1011

1112
import java.util.List;
1213
import java.util.concurrent.CompletableFuture;
@@ -21,10 +22,7 @@ public class ExecutionStrategyUtil {
2122

2223
public List<CompletableFuture<NamedResultNode>> fetchSubSelection(ExecutionContext executionContext, FieldSubSelection fieldSubSelection) {
2324
List<CompletableFuture<FetchedValueAnalysis>> fetchedValueAnalysisList = fetchAndAnalyze(executionContext, fieldSubSelection);
24-
return Async.map(fetchedValueAnalysisList, fetchedValueAnalysis -> {
25-
ExecutionResultNode resultNode = resultNodesCreator.createResultNode(fetchedValueAnalysis);
26-
return new NamedResultNode(fetchedValueAnalysis.getName(), resultNode);
27-
});
25+
return fetchedValueAnalysisToNodesAsync(fetchedValueAnalysisList);
2826
}
2927

3028
private List<CompletableFuture<FetchedValueAnalysis>> fetchAndAnalyze(ExecutionContext context, FieldSubSelection fieldSubSelection) {
@@ -35,6 +33,20 @@ private List<CompletableFuture<FetchedValueAnalysis>> fetchAndAnalyze(ExecutionC
3533
return fetchedValues;
3634
}
3735

36+
private List<CompletableFuture<NamedResultNode>> fetchedValueAnalysisToNodesAsync(List<CompletableFuture<FetchedValueAnalysis>> list) {
37+
return Async.map(list, fetchedValueAnalysis -> {
38+
ExecutionResultNode resultNode = resultNodesCreator.createResultNode(fetchedValueAnalysis);
39+
return new NamedResultNode(fetchedValueAnalysis.getName(), resultNode);
40+
});
41+
}
42+
43+
public List<NamedResultNode> fetchedValueAnalysisToNodes(List<FetchedValueAnalysis> fetchedValueAnalysisList) {
44+
return FpKit.map(fetchedValueAnalysisList, fetchedValueAnalysis -> {
45+
ExecutionResultNode resultNode = resultNodesCreator.createResultNode(fetchedValueAnalysis);
46+
return new NamedResultNode(fetchedValueAnalysis.getName(), resultNode);
47+
});
48+
}
49+
3850
private CompletableFuture<FetchedValueAnalysis> mapMergedField(ExecutionContext context, Object source, String key, MergedField mergedField,
3951
ExecutionStepInfo executionStepInfo) {
4052

src/main/java/graphql/execution/nextgen/result/ObjectExecutionResultNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public Optional<NonNullableFieldWasNullException> getChildrenNonNullableExceptio
5858
.findFirst();
5959
}
6060

61-
public ObjectExecutionResultNode withChildren(Map<String, ExecutionResultNode> children) {
61+
public ObjectExecutionResultNode withChildren(List<NamedResultNode> children) {
6262
return new ObjectExecutionResultNode(getFetchedValueAnalysis(), children);
6363
}
6464

src/main/java/graphql/util/FpKit.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.LinkedHashMap;
1111
import java.util.List;
1212
import java.util.Map;
13+
import java.util.concurrent.CompletableFuture;
1314
import java.util.function.BinaryOperator;
1415
import java.util.function.Function;
1516
import java.util.stream.Collectors;
@@ -108,4 +109,35 @@ public static <T> List<T> valuesToList(Map<?, T> map) {
108109
return new ArrayList<>(map.values());
109110
}
110111

112+
public static <T, U> List<U> map(List<T> list, Function<T, U> function) {
113+
return list.stream().map(function).collect(Collectors.toList());
114+
}
115+
116+
117+
public static <T> List<List<T>> transposeMatrix(List<? extends List<T>> matrix) {
118+
int rowCount = matrix.size();
119+
int colCount = matrix.get(0).size();
120+
List<List<T>> result = new ArrayList<>();
121+
for (int i = 0; i < rowCount; i++) {
122+
for (int j = 0; j < colCount; j++) {
123+
T val = matrix.get(i).get(j);
124+
if (result.size() <= j) {
125+
result.add(j, new ArrayList());
126+
}
127+
result.get(j).add(i, val);
128+
}
129+
}
130+
return result;
131+
}
132+
133+
public static <T> CompletableFuture<List<T>> flatList(CompletableFuture<List<List<T>>> cf) {
134+
return cf.thenApply(FpKit::flatList);
135+
}
136+
137+
public static <T> List<T> flatList(List<List<T>> listLists) {
138+
return listLists.stream()
139+
.flatMap(List::stream)
140+
.collect(Collectors.toList());
141+
}
142+
111143
}

0 commit comments

Comments
 (0)