Skip to content

Commit 4e01979

Browse files
committed
refactor the normalized input to contain literals
1 parent 86b2e23 commit 4e01979

6 files changed

Lines changed: 325 additions & 156 deletions

File tree

src/main/java/graphql/execution/ValuesResolver.java

Lines changed: 305 additions & 145 deletions
Large diffs are not rendered by default.

src/main/java/graphql/normalized/FieldCollectorNormalizedQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ private void collectField(FieldCollectorNormalizedQueryParams parameters,
209209
Map<String, Object> argumentValues = valuesResolver.getArgumentValues(fieldDefinition.getArguments(), field.getArguments(), parameters.getCoercedVariableValues());
210210
Map<String, NormalizedInputValue> normalizedArgumentValues = null;
211211
if (parameters.getNormalizedVariableValues() != null) {
212-
normalizedArgumentValues = valuesResolver.getNormalizedArgumentValues(fieldDefinition.getArguments(), field.getArguments(), parameters.getCoercedVariableValues(), parameters.getNormalizedVariableValues());
212+
normalizedArgumentValues = valuesResolver.getNormalizedArgumentValues(fieldDefinition.getArguments(), field.getArguments(), parameters.getNormalizedVariableValues());
213213
}
214214
NormalizedField newFieldWTC = NormalizedField.newQueryExecutionField()
215215
.alias(field.getAlias())

src/main/java/graphql/normalized/NormalizedInputValue.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package graphql.normalized;
22

3+
import graphql.language.Value;
4+
35
import java.util.Objects;
46

7+
import static graphql.language.AstPrinter.printAst;
8+
59
/**
610
* A value with type information.
711
*/
@@ -62,6 +66,9 @@ public boolean equals(Object o) {
6266
return false;
6367
}
6468
NormalizedInputValue that = (NormalizedInputValue) o;
69+
if (value instanceof Value && that.value instanceof Value) {
70+
return Objects.equals(typeName, that.typeName) && Objects.equals(printAst((Value) value), printAst((Value) that.value));
71+
}
6572
return Objects.equals(typeName, that.typeName) && Objects.equals(value, that.value);
6673
}
6774

src/main/java/graphql/normalized/NormalizedQueryTreeFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ private NormalizedQueryTree createNormalizedQueryImplWithRawVariables(GraphQLSch
5858

5959
List<VariableDefinition> variableDefinitions = operationDefinition.getVariableDefinitions();
6060
Map<String, Object> coerceVariableValues = valuesResolver.coerceVariableValues(graphQLSchema, variableDefinitions, rawVariables);
61-
Map<String, NormalizedInputValue> normalizedVariableValues = valuesResolver.coerceNormalizedVariableValues(graphQLSchema, variableDefinitions, rawVariables);
61+
Map<String, NormalizedInputValue> normalizedVariableValues = valuesResolver.getNormalizedVariableValues(graphQLSchema, variableDefinitions, rawVariables);
6262
return createNormalizedQueryImpl(graphQLSchema, operationDefinition, fragments, coerceVariableValues, normalizedVariableValues);
6363
}
6464

src/main/java/graphql/schema/GraphQLEnumType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public Object parseLiteral(Object input) {
126126
@Internal
127127
public Value valueToLiteral(Object input) {
128128
GraphQLEnumValueDefinition enumValueDefinition = valueDefinitionMap.get(input.toString());
129-
assertNotNull(enumValueDefinition, () -> "Invalid input for Enum '" + name + "'. No value found for name '" + input.toString() + "'");
129+
assertNotNull(enumValueDefinition, () -> "Invalid input for Enum '" + name + "'. No value found for name '" + input + "'");
130130
return EnumValue.newEnumValue(enumValueDefinition.getName()).build();
131131

132132
}

src/test/groovy/graphql/normalized/NormalizedQueryTreeFactoryTest.groovy

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import graphql.util.TraverserContext
1414
import graphql.util.TraverserVisitorStub
1515
import spock.lang.Specification
1616

17+
import static graphql.language.AstPrinter.printAst
18+
import static graphql.parser.Parser.parseValue
1719
import static graphql.schema.FieldCoordinates.coordinates
1820

1921
class NormalizedQueryTreeFactoryTest extends Specification {
@@ -1091,7 +1093,7 @@ schema {
10911093
var2: [foo: "foo", input2: [bar: 123]]
10921094
]
10931095
// the normalized arg value should be the same regardless of how the value was provided
1094-
def expectedNormalizedArgValue = [foo: new NormalizedInputValue("String", "foo"), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", 123)])]
1096+
def expectedNormalizedArgValue = [foo: new NormalizedInputValue("String", parseValue('"foo"')), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", parseValue("123"))])]
10951097
when:
10961098
def tree = dependencyGraph.createNormalizedQueryWithRawVariables(graphQLSchema, document, null, variables)
10971099
def topLevelField = tree.getTopLevelFields().get(0)
@@ -1102,7 +1104,7 @@ schema {
11021104

11031105
then:
11041106
topLevelField.getNormalizedArgument("id").getTypeName() == "ID"
1105-
topLevelField.getNormalizedArgument("id").getValue() == "123"
1107+
printAst(topLevelField.getNormalizedArgument("id").getValue()) == '"123"'
11061108

11071109
arg1.getTypeName() == "Input1"
11081110
arg1.getValue() == expectedNormalizedArgValue
@@ -1151,16 +1153,16 @@ schema {
11511153

11521154
then:
11531155
arg1.typeName == "[ID!]"
1154-
arg1.value == ["1", "2"]
1156+
arg1.value.collect { printAst(it) } == ['"1"', '"2"']
11551157
arg2.typeName == "[[Input1]]"
11561158
arg2.value == [[
1157-
[foo: new NormalizedInputValue("String", "foo1"), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", 123)])],
1158-
[foo: new NormalizedInputValue("String", "foo2"), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", 456)])]
1159+
[foo: new NormalizedInputValue("String", parseValue('"foo1"')), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", parseValue("123"))])],
1160+
[foo: new NormalizedInputValue("String", parseValue('"foo2"')), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", parseValue("456"))])]
11591161
]]
11601162

11611163
arg3.getTypeName() == "[Input1]"
11621164
arg3.value == [
1163-
[foo: new NormalizedInputValue("String", "foo3"), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", 789)])],
1165+
[foo: new NormalizedInputValue("String", parseValue('"foo3"')), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", parseValue("789"))])],
11641166
]
11651167

11661168

@@ -1204,10 +1206,10 @@ schema {
12041206
then:
12051207
arg1.typeName == "[[Input1]]"
12061208
arg1.value == [[
1207-
[foo: new NormalizedInputValue("String", "foo1"), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", 123)])],
1209+
[foo: new NormalizedInputValue("String", parseValue('"foo1"')), input2: new NormalizedInputValue("Input2", [bar: new NormalizedInputValue("Int", parseValue("123"))])],
12081210
]]
12091211
arg2.typeName == "[[ID!]!]"
1210-
arg2.value == [["1"], ["2"]]
1212+
arg2.value.collect { outer -> outer.collect { printAst(it) } } == [['"1"'], ['"2"']]
12111213
}
12121214

12131215
}

0 commit comments

Comments
 (0)