github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/builder/cond_and.go (about) 1 package builder 2 3 import "fmt" 4 5 type condAnd []Cond 6 7 var _ Cond = condAnd{} 8 9 func And(conds ...Cond) Cond { 10 var result = make(condAnd, 0, len(conds)) 11 for _, cond := range conds { 12 if cond == nil || !cond.IsValid() { 13 continue 14 } 15 result = append(result, cond) 16 } 17 return result 18 } 19 20 func (and condAnd) WriteTo(w Writer) error { 21 for i, cond := range and { 22 _, isOr := cond.(condOr) 23 if isOr { 24 fmt.Fprint(w, "(") 25 } 26 27 err := cond.WriteTo(w) 28 if err != nil { 29 return err 30 } 31 32 if isOr { 33 fmt.Fprint(w, ")") 34 } 35 36 if i != len(and)-1 { 37 fmt.Fprint(w, " AND ") 38 } 39 } 40 41 return nil 42 } 43 44 func (and condAnd) And(conds ...Cond) Cond { 45 return And(and, And(conds...)) 46 } 47 48 func (and condAnd) Or(conds ...Cond) Cond { 49 return Or(and, Or(conds...)) 50 } 51 52 func (and condAnd) IsValid() bool { 53 return len(and) > 0 54 }