Skip to content

Fix ambiguity about optional variables in non-null args #520

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 5, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions spec/Section 5 -- Validation.md
Original file line number Diff line number Diff line change
Expand Up @@ -1938,6 +1938,10 @@ A notable exception to typical variable type compatibility is allowing a
variable definition with a nullable type to be provided to a non-null location
as long as either that variable or that location provides a default value.

In the example below, an optional variable `$booleanArg` is allowed to be used
in the non-null argument `optionalBooleanArg` because the field argument is
optional since it provides a default value in the schema.

```graphql example
query booleanArgQueryWithDefault($booleanArg: Boolean) {
arguments {
Expand All @@ -1946,7 +1950,12 @@ query booleanArgQueryWithDefault($booleanArg: Boolean) {
}
```

In the example above, an optional variable is allowed to be used in an non-null argument which provides a default value.
In the example below, an optional variable `$booleanArg` is allowed to be used
in the non-null argument (`nonNullBooleanArg`) because the variable provides
a default value in the query. This behavior is explicitly supported for
compatibility with earlier editions of this specification. GraphQL authoring
tools may wish to report this is a warning with the suggestion to replace
`Boolean` with `Boolean!` to avoid ambiguity.

```graphql example
query booleanArgQueryWithDefault($booleanArg: Boolean = true) {
Expand All @@ -1956,10 +1965,5 @@ query booleanArgQueryWithDefault($booleanArg: Boolean = true) {
}
```

In the example above, a variable provides a default value and can be used in a
non-null argument. This behavior is explicitly supported for compatibility with
earlier editions of this specification. GraphQL authoring tools may wish to
report this is a warning with the suggestion to replace `Boolean` with `Boolean!`.

Note: The value {null} could still be provided to a such a variable at runtime.
A non-null argument must produce a field error if provided a {null} value.