(dqls []*dql.GraphQuery)
| 859 | } |
| 860 | |
| 861 | func parsePredsFromQuery(dqls []*dql.GraphQuery) predsAndvars { |
| 862 | predsMap := make(map[string]struct{}) |
| 863 | varsMap := make(map[string]string) |
| 864 | for _, gq := range dqls { |
| 865 | if gq.Func != nil { |
| 866 | predsMap[gq.Func.Attr] = struct{}{} |
| 867 | } |
| 868 | if len(gq.Var) > 0 { |
| 869 | varsMap[gq.Var] = gq.Attr |
| 870 | } |
| 871 | if len(gq.Attr) > 0 && gq.Attr != "uid" && gq.Attr != "expand" && gq.Attr != "val" { |
| 872 | predsMap[gq.Attr] = struct{}{} |
| 873 | |
| 874 | } |
| 875 | for _, ord := range gq.Order { |
| 876 | predsMap[ord.Attr] = struct{}{} |
| 877 | } |
| 878 | for _, gbAttr := range gq.GroupbyAttrs { |
| 879 | predsMap[gbAttr.Attr] = struct{}{} |
| 880 | } |
| 881 | for _, pred := range parsePredsFromFilter(gq.Filter) { |
| 882 | predsMap[pred] = struct{}{} |
| 883 | } |
| 884 | childPredandVars := parsePredsFromQuery(gq.Children) |
| 885 | for _, childPred := range childPredandVars.preds { |
| 886 | predsMap[childPred] = struct{}{} |
| 887 | } |
| 888 | for childVar := range childPredandVars.vars { |
| 889 | varsMap[childVar] = childPredandVars.vars[childVar] |
| 890 | } |
| 891 | } |
| 892 | preds := make([]string, 0, len(predsMap)) |
| 893 | for pred := range predsMap { |
| 894 | if len(pred) > 0 { |
| 895 | if _, found := varsMap[pred]; !found { |
| 896 | preds = append(preds, pred) |
| 897 | } |
| 898 | } |
| 899 | } |
| 900 | |
| 901 | pv := predsAndvars{preds: preds, vars: varsMap} |
| 902 | return pv |
| 903 | } |
| 904 | |
| 905 | func parsePredsFromFilter(f *dql.FilterTree) []string { |
| 906 | var preds []string |
no test coverage detected