GraphQL Error Propagation
Before returning query and mutation results, Dgraph uses the types in the schema to apply GraphQL value completion and error handling. That is,
null values for non-nullable fields, e.g.
String!, cause error propagation to parent fields.
In short, the GraphQL value completion and error propagation mean the following.
- Fields marked as nullable (i.e. without
!) can return
nullin the json response.
- For fields marked as non-nullable (i.e. with
!) Dgraph never returns null for that field.
- If an instance of type has a non-nullable field that has evaluated to null, the whole instance results in null.
- Reducing an object to null might cause further error propagation. For example, querying for a post that has an author with a null name results in null: the null name (
name: String!) causes the author to result in null, and a null author causes the post (
author: Author!) to result in null.
- Error propagation for lists with nullable elements, e.g.
friends [Author], can result in nulls inside the result list.
- Error propagation for lists with non-nullable elements results in null for
friends [Author!]and would cause further error propagation for
Note that, a query that results in no values for a list will always return the empty list
null, regardless of the nullability. For example, given a schema for an author with
posts: [Post!]!, if an author has not posted anything and we queried for that author, the result for the posts field would be
A list can, however, result in null due to GraphQL error propagation. For example, if the definition is
posts: [Post!], and we queried for an author who has a list of posts. If one of those posts happened to have a null title (title is non-nullable
title: String!), then that post would evaluate to null, the
posts list can’t contain nulls and so the list reduces to null.