MCPcopy Index your code
hub / github.com/dgraph-io/dgraph / parseRecurseArgs

Function parseRecurseArgs

dql/parser.go:922–1001  ·  view source on GitHub ↗
(it *lex.ItemIterator, gq *GraphQuery)

Source from the content-addressed store, hash-verified

920}
921
922func parseRecurseArgs(it *lex.ItemIterator, gq *GraphQuery) error {
923 if ok := trySkipItemTyp(it, itemLeftRound); !ok {
924 // We don't have a (, we can return.
925 return nil
926 }
927
928 var key, val string
929 var ok bool
930 for it.Next() {
931 item := it.Item()
932 if item.Typ != itemName {
933 return item.Errorf("Expected key inside @recurse()")
934 }
935 key = strings.ToLower(item.Val)
936
937 if ok := trySkipItemTyp(it, itemColon); !ok {
938 return it.Errorf("Expected colon(:) after %s", key)
939 }
940 if !it.Next() {
941 return it.Errorf("Expected argument")
942 }
943
944 // Consume the next item.
945 item = it.Item()
946 val = item.Val
947 switch key {
948 case "depth":
949 // Check whether the argument is variable or value.
950 if item.Typ == itemDollar {
951 // Consume the variable name.
952 varName, err := parseVarName(it)
953 if err != nil {
954 return err
955 }
956 if gq.RecurseArgs.varMap == nil {
957 gq.RecurseArgs.varMap = make(map[string]string)
958 }
959 gq.RecurseArgs.varMap["depth"] = varName
960 } else {
961 if item.Typ != itemName {
962 return item.Errorf("Expected value inside @recurse() for key: %s", key)
963 }
964 depth, err := strconv.ParseUint(val, 0, 64)
965 if err != nil {
966 return errors.New("Value inside depth should be type of integer")
967 }
968 gq.RecurseArgs.Depth = depth
969 }
970 case "loop":
971 if item.Typ == itemDollar {
972 // Consume the variable name.
973 varName, err := parseVarName(it)
974 if err != nil {
975 return err
976 }
977 if gq.RecurseArgs.varMap == nil {
978 gq.RecurseArgs.varMap = make(map[string]string)
979 }

Callers 1

getQueryFunction · 0.85

Calls 6

trySkipItemTypFunction · 0.85
parseVarNameFunction · 0.85
tryParseItemTypeFunction · 0.85
ItemMethod · 0.80
NextMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected