I am referring to this piece of code in implementation if eq() function -
// eq(score,val(myscore)), we disallow vars in facets filter so we don't need to worry about
// that as of now.
func (sg *SubGraph) replaceVarInFunc() error {
if sg.SrcFunc == nil {
return nil
}
var args []gql.Arg
// Iterate over the args and replace value args with their values
for _, arg := range sg.SrcFunc.Args {
if !arg.IsValueVar {
args = append(args, arg)
continue
}
if len(sg.Params.uidToVal) == 0 {
return x.Errorf("No value found for value variable %q", arg.Value)
}
// We don't care about uids, just take all the values and put as args.
// There would be only one value var per subgraph as per current assumptions.
seenArgs := make(map[string]struct{})
for _, v := range sg.Params.uidToVal {
data := types.ValueForType(types.StringID)
if err := types.Marshal(v, &data); err != nil {
return err
}
if _, ok := seenArgs[data.Value.(string)]; ok {
continue
}
args = append(args, gql.Arg{Value: data.Value.(string)})
}
}
sg.SrcFunc.Args = args
return nil
}
if len(sg.Params.uidToVal) == 0 {
return x.Errorf("No value found for value variable %q", arg.Value)
}