diff --git a/gql/parser.go b/gql/parser.go index 2f7cc1111685d2fe21b6308e7c12d0e75fbe458e..bc63388140dd6b88861fce94a37fb1e04867635b 100644 --- a/gql/parser.go +++ b/gql/parser.go @@ -238,24 +238,19 @@ func godeep(l *lex.Lexer, gq *GraphQuery) error { return nil } else if item.Typ == itemLeftRound { - // absorb all these, we don't use them right now. - /* - for { - var key, val string - item = <-l.Items - if item.Typ == itemArgName { - key = item.Val - } else if item.Typ == itemRightRound { - break - } else { - return nil, fmt.Errorf("Expecting argument name. Got: %v", item) + + args, err := parseArguments(l) + if err != nil { + return err + } + // We only use argument 'first' for now. + for _, p := range args { + if p.Key == "first" { + count, err := strconv.ParseInt(p.Val, 0, 32) + if err != nil { + return err } - } - */ - for ti := range l.Items { - fmt.Println(ti.String()) - if ti.Typ == itemRightRound || ti.Typ == lex.ItemEOF { - return nil + curp.First = int(count) } } } diff --git a/gql/parser_test.go b/gql/parser_test.go index fb5d1c81a0ac63cbbed58ccb1adb452a793fee2e..e9bea44397c15ac99e0efa3095a882188bd9d2aa 100644 --- a/gql/parser_test.go +++ b/gql/parser_test.go @@ -101,9 +101,7 @@ func TestParseXid(t *testing.T) { } } -/* func TestParseFirst(t *testing.T) { - // logrus.SetLevel(logrus.DebugLevel) query := ` query { user(_xid_: m.abcd) { @@ -121,14 +119,39 @@ func TestParseFirst(t *testing.T) { t.Error("subgraph is nil") return } - if len(gq.Children) != 1 { - t.Errorf("Expected 1 children. Got: %v", len(gq.Children)) + if len(gq.Children) != 2 { + t.Errorf("Expected 2 children. Got: %v", len(gq.Children)) } if err := checkAttr(gq.Children[0], "type.object.name"); err != nil { t.Error(err) } + if gq.Children[0].First != 0 { + t.Errorf("Expected count 0. Got: %v", gq.Children[0].First) + } + if err := checkAttr(gq.Children[1], "friends"); err != nil { + t.Error(err) + } + if gq.Children[1].First != 10 { + t.Errorf("Expected count 10. Got: %v", gq.Children[1].First) + } +} + +func TestParseFirst_error(t *testing.T) { + query := ` + query { + user(_xid_: m.abcd) { + type.object.name + friends (first: ) { + } + } + }` + var err error + _, _, err = Parse(query) + t.Log(err) + if err == nil { + t.Error("Expected error") + } } -*/ func TestParse_error2(t *testing.T) { query := `