You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// 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 condOr []Cond
var _ Cond = condOr{}
// Or sets OR conditions
func Or(conds ...Cond) Cond { var result = make(condOr, 0, len(conds)) for _, cond := range conds { if cond == nil || !cond.IsValid() { continue } result = append(result, cond) } return result }
// WriteTo implments Cond
func (o condOr) WriteTo(w Writer) error { for i, cond := range o { var needQuote bool switch cond.(type) { case condAnd, expr: needQuote = true case Eq: needQuote = (len(cond.(Eq)) > 1) case Neq: needQuote = (len(cond.(Neq)) > 1) }
if needQuote { fmt.Fprint(w, "(") }
err := cond.WriteTo(w) if err != nil { return err }
if needQuote { fmt.Fprint(w, ")") }
if i != len(o)-1 { fmt.Fprint(w, " OR ") } }
return nil }
func (o condOr) And(conds ...Cond) Cond { return And(o, And(conds...)) }
func (o condOr) Or(conds ...Cond) Cond { return Or(o, Or(conds...)) }
func (o condOr) IsValid() bool { return len(o) > 0 }
|