| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | package iiimport (	"strings"	"golib/features/mo")func (f *FieldInfo) HasLookup() bool {	return f.Lookup.ForeignField != "" && f.Lookup.From != "" && f.Lookup.AS != ""}func (f *FieldInfo) HasSet() bool {	return len(f.Set) > 0}func (f *FieldInfo) ArgLookup() *mo.Looker {	l := new(mo.Looker)	l.From(f.Lookup.From)	l.LocalField(f.Name)	l.ForeignField(f.Lookup.ForeignField)	l.As(f.Lookup.AS)	pipe := mo.Pipeline{}	if !f.Lookup.List {		pipe = append(pipe, mo.NewLimiter(1).Pipeline())	}	if len(f.Fields) > 0 {		p := mo.Projecter{}		for _, field := range f.Fields {			p.AddEnable(field.Name)		}		pipe = append(pipe, p.Pipeline())	}	l.Pipe(pipe)	return l}// ArgSet 为查询结果新增字段func (f *FieldInfo) ArgSet() *mo.Setter {	sets := new(mo.Setter)	for _, set := range f.Set {		switch set.OP {		case mo.PoSum:			if set.Value == "" {				panic("value can not be empty")			}			sets.SUM(set.Name, strings.Split(set.Value, ","))		default:			panic("unsupported OP")		}	}	return sets}
 |