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  }