getQuery creates a GraphQuery object tree by calling getRoot and goDeep functions by looking at '{'.
(it *lex.ItemIterator)
| 1003 | // getQuery creates a GraphQuery object tree by calling getRoot |
| 1004 | // and goDeep functions by looking at '{'. |
| 1005 | func getQuery(it *lex.ItemIterator) (gq *GraphQuery, rerr error) { |
| 1006 | // First, get the root |
| 1007 | gq, rerr = getRoot(it) |
| 1008 | if rerr != nil { |
| 1009 | return nil, rerr |
| 1010 | } |
| 1011 | |
| 1012 | var seenFilter bool |
| 1013 | L: |
| 1014 | // Recurse to deeper levels through godeep. |
| 1015 | if !it.Next() { |
| 1016 | return nil, it.Errorf("Expecting more lexer items while parsing query") |
| 1017 | } |
| 1018 | |
| 1019 | item := it.Item() |
| 1020 | switch item.Typ { |
| 1021 | case itemLeftCurl: |
| 1022 | if rerr = godeep(it, gq); rerr != nil { |
| 1023 | return nil, rerr |
| 1024 | } |
| 1025 | case itemAt: |
| 1026 | it.Next() |
| 1027 | item := it.Item() |
| 1028 | if item.Typ == itemName { |
| 1029 | switch strings.ToLower(item.Val) { |
| 1030 | case "filter": |
| 1031 | if seenFilter { |
| 1032 | return nil, item.Errorf("Repeated filter at root") |
| 1033 | } |
| 1034 | seenFilter = true |
| 1035 | filter, err := parseFilter(it) |
| 1036 | if err != nil { |
| 1037 | return nil, err |
| 1038 | } |
| 1039 | gq.Filter = filter |
| 1040 | |
| 1041 | case "normalize": |
| 1042 | gq.Normalize = true |
| 1043 | case "cascade": |
| 1044 | if err := parseCascade(it, gq); err != nil { |
| 1045 | return nil, err |
| 1046 | } |
| 1047 | case "groupby": |
| 1048 | gq.IsGroupby = true |
| 1049 | if err := parseGroupby(it, gq); err != nil { |
| 1050 | return nil, err |
| 1051 | } |
| 1052 | case "ignorereflex": |
| 1053 | gq.IgnoreReflex = true |
| 1054 | case "recurse": |
| 1055 | gq.Recurse = true |
| 1056 | if err := parseRecurseArgs(it, gq); err != nil { |
| 1057 | return nil, err |
| 1058 | } |
| 1059 | default: |
| 1060 | return nil, item.Errorf("Unknown directive [%s]", item.Val) |
| 1061 | } |
| 1062 | goto L |
no test coverage detected