diff --git a/gql/parser.go b/gql/parser.go index 2ca9d9b63d0..69540932ed5 100644 --- a/gql/parser.go +++ b/gql/parser.go @@ -368,9 +368,6 @@ func substituteVariables(gq *GraphQuery, vmap varMap) error { idVal, ok := gq.Args["id"] if ok && len(gq.UID) == 0 { - if idVal == "" { - return errors.Errorf("Id can't be empty") - } uids, err := parseID(idVal) if err != nil { return err @@ -483,9 +480,6 @@ func substituteVariablesFilter(f *FilterTree, vmap varMap) error { if !ok { return errors.Errorf("Couldn't find value for GraphQL variable: [%s]", v.Value) } - if idVal.Value == "" { - return errors.Errorf("Id can't be empty") - } uids, err := parseID(idVal.Value) if err != nil { return err @@ -2261,8 +2255,11 @@ loop: // Parses ID list. Only used for GraphQL variables. // TODO - Maybe get rid of this by lexing individual IDs. func parseID(val string) ([]uint64, error) { - var uids []uint64 val = x.WhiteSpace.Replace(val) + if val == "" { + return nil, errors.Errorf("ID can't be empty") + } + var uids []uint64 if val[0] != '[' { uid, err := strconv.ParseUint(val, 0, 64) if err != nil { diff --git a/gql/parser_test.go b/gql/parser_test.go index d6df3e16aef..c43f497634a 100644 --- a/gql/parser_test.go +++ b/gql/parser_test.go @@ -5238,3 +5238,13 @@ func TestFilterWithEmpty(t *testing.T) { require.NoError(t, err) require.Equal(t, gq.Query[0].Filter.Func.Args[0].Value, "") } + +func TestEmptyId(t *testing.T) { + q := "query me($a: string) { q(func: uid($a)) { name }}" + r := Request{ + Str: q, + Variables: map[string]string{"$a": " "}, + } + _, err := Parse(r) + require.Error(t, err, "ID cannot be empty") +}