diff --git a/graphql/resolve/query_rewriter.go b/graphql/resolve/query_rewriter.go index a68f2678ad0..3c2e99c41ef 100644 --- a/graphql/resolve/query_rewriter.go +++ b/graphql/resolve/query_rewriter.go @@ -1014,6 +1014,9 @@ func buildFilter(typ schema.Type, filter map[string]interface{}) *gql.FilterTree // Each key in filter is either "and", "or", "not" or the field name it // applies to such as "title" in: `title: { anyofterms: "GraphQL" }`` for _, field := range keys { + if filter[field] == nil { + continue + } switch field { // In 'and', 'or' and 'not' cases, filter[field] must be a map[string]interface{} diff --git a/graphql/resolve/query_test.yaml b/graphql/resolve/query_test.yaml index 0d3727c799a..810c86466d4 100644 --- a/graphql/resolve/query_test.yaml +++ b/graphql/resolve/query_test.yaml @@ -167,6 +167,21 @@ } } +- + name: "Filter connectives with null values gets skipped " + gqlquery: | + query { + queryAuthor(filter: { name: { eq: "A. N. Author" },not:null }) { + name + } + } + dgquery: |- + query { + queryAuthor(func: type(Author)) @filter(eq(Author.name, "A. N. Author")) { + name : Author.name + dgraph.uid : uid + } + } - name: "Filters in same input object implies AND" gqlquery: |