github.com/yongjacky/phoenix-go-orm-builder@v0.3.5/cond_and.go (about) 1 // Copyright 2016 The Xorm Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package builder 6 7 import "fmt" 8 9 type condAnd []Cond 10 11 var _ Cond = condAnd{} 12 13 // And generates AND conditions 14 func And(conds ...Cond) Cond { 15 var result = make(condAnd, 0, len(conds)) 16 for _, cond := range conds { 17 if cond == nil || !cond.IsValid() { 18 continue 19 } 20 result = append(result, cond) 21 } 22 return result 23 } 24 25 func (and condAnd) WriteTo(w Writer) error { 26 for i, cond := range and { 27 _, isOr := cond.(condOr) 28 _, isExpr := cond.(expr) 29 wrap := isOr || isExpr 30 if wrap { 31 fmt.Fprint(w, "(") 32 } 33 34 err := cond.WriteTo(w) 35 if err != nil { 36 return err 37 } 38 39 if wrap { 40 fmt.Fprint(w, ")") 41 } 42 43 if i != len(and)-1 { 44 fmt.Fprint(w, " AND ") 45 } 46 } 47 48 return nil 49 } 50 51 func (and condAnd) And(conds ...Cond) Cond { 52 return And(and, And(conds...)) 53 } 54 55 func (and condAnd) Or(conds ...Cond) Cond { 56 return Or(and, Or(conds...)) 57 } 58 59 func (and condAnd) IsValid() bool { 60 return len(and) > 0 61 }