Skip to content

Commit 9cf6ea1

Browse files
authored
Added support for variables to new operation planner. (#7780)
1 parent 133a3c0 commit 9cf6ea1

File tree

17 files changed

+688
-165
lines changed

17 files changed

+688
-165
lines changed

src/HotChocolate/Fusion-vnext/src/Fusion.Execution/Planning/Nodes/FieldPlanNode.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
using System.Collections.Immutable;
21
using System.Diagnostics;
32
using HotChocolate.Fusion.Types;
3+
using HotChocolate.Fusion.Types.Collections;
44
using HotChocolate.Language;
55

66
namespace HotChocolate.Fusion.Planning.Nodes;
@@ -11,19 +11,31 @@ public sealed class FieldPlanNode : SelectionPlanNode
1111

1212
public FieldPlanNode(
1313
FieldNode fieldNode,
14-
CompositeOutputField field)
14+
OutputFieldInfo field)
1515
: base(field.Type.NamedType(), fieldNode.SelectionSet?.Selections)
1616
{
1717
FieldNode = fieldNode;
1818
Field = field;
1919
ResponseName = FieldNode.Alias?.Value ?? field.Name;
20+
21+
foreach (var argument in fieldNode.Arguments)
22+
{
23+
AddArgument(new ArgumentAssignment(argument.Name.Value, argument.Value));
24+
}
25+
}
26+
27+
public FieldPlanNode(
28+
FieldNode fieldNode,
29+
CompositeOutputField field)
30+
: this(fieldNode, new OutputFieldInfo(field))
31+
{
2032
}
2133

2234
public string ResponseName { get; }
2335

2436
public FieldNode FieldNode { get; }
2537

26-
public CompositeOutputField Field { get; }
38+
public OutputFieldInfo Field { get; }
2739

2840
public IReadOnlyList<ArgumentAssignment> Arguments
2941
=> _arguments ?? (IReadOnlyList<ArgumentAssignment>)Array.Empty<ArgumentAssignment>();

src/HotChocolate/Fusion-vnext/src/Fusion.Execution/Planning/Nodes/OperationPlanNode.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ namespace HotChocolate.Fusion.Planning.Nodes;
88
/// </summary>
99
public sealed class OperationPlanNode : SelectionPlanNode, IOperationPlanNodeProvider
1010
{
11+
private static readonly IReadOnlyDictionary<string, VariableDefinitionNode> _emptyVariableMap =
12+
new Dictionary<string, VariableDefinitionNode>();
1113
private List<OperationPlanNode>? _operations;
14+
private Dictionary<string, VariableDefinitionNode>? _variables;
1215

1316
public OperationPlanNode(
1417
string schemaName,
@@ -37,9 +40,18 @@ public OperationPlanNode(
3740
// todo: variable representations are missing.
3841
// todo: how to we represent state?
3942

43+
public IReadOnlyDictionary<string, VariableDefinitionNode> VariableDefinitions
44+
=> _variables ?? _emptyVariableMap;
45+
4046
public IReadOnlyList<OperationPlanNode> Operations
4147
=> _operations ?? (IReadOnlyList<OperationPlanNode>)Array.Empty<OperationPlanNode>();
4248

49+
public void AddVariableDefinition(VariableDefinitionNode variable)
50+
{
51+
ArgumentNullException.ThrowIfNull(variable);
52+
(_variables ??= new Dictionary<string, VariableDefinitionNode>()).Add(variable.Variable.Name.Value, variable);
53+
}
54+
4355
public void AddOperation(OperationPlanNode operation)
4456
{
4557
ArgumentNullException.ThrowIfNull(operation);
@@ -53,7 +65,7 @@ public OperationDefinitionNode ToSyntaxNode()
5365
null,
5466
null,
5567
OperationType.Query,
56-
Array.Empty<VariableDefinitionNode>(),
68+
_variables?.Values.OrderBy(t => t.Variable.Name.Value).ToArray() ?? [],
5769
Directives.ToSyntaxNode(),
5870
Selections.ToSyntaxNode());
5971
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using System.Collections.Immutable;
2+
using HotChocolate.Fusion.Types;
3+
4+
namespace HotChocolate.Fusion.Planning.Nodes;
5+
6+
public class OutputFieldInfo(string name, ICompositeType type, ImmutableArray<string> sources)
7+
{
8+
public OutputFieldInfo(CompositeOutputField field)
9+
: this(field.Name, field.Type, field.Sources.Schemas)
10+
{
11+
12+
}
13+
14+
public string Name => name;
15+
16+
public ICompositeType Type => type;
17+
18+
public ImmutableArray<string> Sources => sources;
19+
}

0 commit comments

Comments
 (0)