// Copyright 2016 The Xorm Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package builder import "fmt" type condAnd []Cond var _ Cond = condAnd{} // And generates AND conditions func And(conds ...Cond) Cond { var result = make(condAnd, 0, len(conds)) for _, cond := range conds { if cond == nil || !cond.IsValid() { continue } result = append(result, cond) } return result } func (and condAnd) WriteTo(w Writer) error { for i, cond := range and { _, isOr := cond.(condOr) _, isExpr := cond.(expr) wrap := isOr || isExpr if wrap { fmt.Fprint(w, "(") } err := cond.WriteTo(w) if err != nil { return err } if wrap { fmt.Fprint(w, ")") } if i != len(and)-1 { fmt.Fprint(w, " AND ") } } return nil } func (and condAnd) And(conds ...Cond) Cond { return And(and, And(conds...)) } func (and condAnd) Or(conds ...Cond) Cond { return Or(and, Or(conds...)) } func (and condAnd) IsValid() bool { return len(and) > 0 }