mirror of
https://github.com/astaxie/beego.git
synced 2024-11-16 16:40:56 +00:00
Merge pull request #2293 from DusanKasan/develop
resolves #2291, introduces AndNotCond/OrNotCond to orm.Condition
This commit is contained in:
commit
bdb525831d
@ -75,6 +75,19 @@ func (c *Condition) AndCond(cond *Condition) *Condition {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AndNotCond combine a AND NOT condition to current condition
|
||||||
|
func (c *Condition) AndNotCond(cond *Condition) *Condition {
|
||||||
|
c = c.clone()
|
||||||
|
if c == cond {
|
||||||
|
panic(fmt.Errorf("<Condition.AndNotCond> cannot use self as sub cond"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if cond != nil {
|
||||||
|
c.params = append(c.params, condValue{cond: cond, isCond: true, isNot: true})
|
||||||
|
}
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
// Or add OR expression to condition
|
// Or add OR expression to condition
|
||||||
func (c Condition) Or(expr string, args ...interface{}) *Condition {
|
func (c Condition) Or(expr string, args ...interface{}) *Condition {
|
||||||
if expr == "" || len(args) == 0 {
|
if expr == "" || len(args) == 0 {
|
||||||
@ -105,6 +118,19 @@ func (c *Condition) OrCond(cond *Condition) *Condition {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OrNotCond combine a OR NOT condition to current condition
|
||||||
|
func (c *Condition) OrNotCond(cond *Condition) *Condition {
|
||||||
|
c = c.clone()
|
||||||
|
if c == cond {
|
||||||
|
panic(fmt.Errorf("<Condition.OrNotCond> cannot use self as sub cond"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if cond != nil {
|
||||||
|
c.params = append(c.params, condValue{cond: cond, isCond: true, isNot: true, isOr: true})
|
||||||
|
}
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
// IsEmpty check the condition arguments are empty or not.
|
// IsEmpty check the condition arguments are empty or not.
|
||||||
func (c *Condition) IsEmpty() bool {
|
func (c *Condition) IsEmpty() bool {
|
||||||
return len(c.params) == 0
|
return len(c.params) == 0
|
||||||
|
@ -909,6 +909,16 @@ func TestSetCond(t *testing.T) {
|
|||||||
num, err = qs.SetCond(cond2).Count()
|
num, err = qs.SetCond(cond2).Count()
|
||||||
throwFail(t, err)
|
throwFail(t, err)
|
||||||
throwFail(t, AssertIs(num, 2))
|
throwFail(t, AssertIs(num, 2))
|
||||||
|
|
||||||
|
cond3 := cond.AndNotCond(cond.And("status__in", 1))
|
||||||
|
num, err = qs.SetCond(cond3).Count()
|
||||||
|
throwFail(t, err)
|
||||||
|
throwFail(t, AssertIs(num, 2))
|
||||||
|
|
||||||
|
cond4 := cond.And("user_name", "slene").OrNotCond(cond.And("user_name", "slene"))
|
||||||
|
num, err = qs.SetCond(cond4).Count()
|
||||||
|
throwFail(t, err)
|
||||||
|
throwFail(t, AssertIs(num, 3))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLimit(t *testing.T) {
|
func TestLimit(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user