make NotConditions obey De Morgan's laws
This commit is contained in:
parent
9f273777f5
commit
1cf491c2f3
@ -181,7 +181,7 @@ func (not NotConditions) Build(builder Builder) {
|
||||
|
||||
for idx, c := range not.Exprs {
|
||||
if idx > 0 {
|
||||
builder.WriteString(AndWithSpace)
|
||||
builder.WriteString(OrWithSpace)
|
||||
}
|
||||
|
||||
if negationBuilder, ok := c.(NegationExpressionBuilder); ok {
|
||||
|
@ -56,7 +56,7 @@ func TestWhere(t *testing.T) {
|
||||
}, clause.Where{
|
||||
Exprs: []clause.Expression{clause.Or(clause.Not(clause.Gt{Column: "score", Value: 100}), clause.Like{Column: "name", Value: "%linus%"})},
|
||||
}},
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? AND `age` <= ?) OR `name` <> ? AND (`score` <= ? OR `name` LIKE ?)",
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? OR `age` <= ?) OR `name` <> ? AND (`score` <= ? OR `name` LIKE ?)",
|
||||
[]interface{}{"1", 18, "jinzhu", 100, "%linus%"},
|
||||
},
|
||||
{
|
||||
@ -70,21 +70,21 @@ func TestWhere(t *testing.T) {
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||
Exprs: []clause.Expression{clause.Not(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}), clause.And(clause.Expr{SQL: "`score` <= ?", Vars: []interface{}{100}, WithoutParentheses: false})},
|
||||
}},
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? AND `age` <= ?) AND `score` <= ?",
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? OR `age` <= ?) AND `score` <= ?",
|
||||
[]interface{}{"1", 18, 100},
|
||||
},
|
||||
{
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||
Exprs: []clause.Expression{clause.Not(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}), clause.Expr{SQL: "`score` <= ?", Vars: []interface{}{100}, WithoutParentheses: false}},
|
||||
}},
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? AND `age` <= ?) AND `score` <= ?",
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? OR `age` <= ?) AND `score` <= ?",
|
||||
[]interface{}{"1", 18, 100},
|
||||
},
|
||||
{
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||
Exprs: []clause.Expression{clause.Not(clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, clause.Gt{Column: "age", Value: 18}), clause.Or(clause.Expr{SQL: "`score` <= ?", Vars: []interface{}{100}, WithoutParentheses: false})},
|
||||
}},
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? AND `age` <= ?) OR `score` <= ?",
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? OR `age` <= ?) OR `score` <= ?",
|
||||
[]interface{}{"1", 18, 100},
|
||||
},
|
||||
{
|
||||
@ -102,7 +102,7 @@ func TestWhere(t *testing.T) {
|
||||
Exprs: []clause.Expression{clause.Not(clause.Eq{Column: clause.PrimaryColumn, Value: "1"},
|
||||
clause.And(clause.Expr{SQL: "`score` <= ?", Vars: []interface{}{100}, WithoutParentheses: false}))},
|
||||
}},
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? AND NOT `score` <= ?)",
|
||||
"SELECT * FROM `users` WHERE (`users`.`id` <> ? OR NOT `score` <= ?)",
|
||||
[]interface{}{"1", 100},
|
||||
},
|
||||
{
|
||||
@ -116,16 +116,21 @@ func TestWhere(t *testing.T) {
|
||||
{
|
||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Where{
|
||||
Exprs: []clause.Expression{
|
||||
clause.Not(clause.AndConditions{
|
||||
clause.Not(
|
||||
clause.AndConditions{
|
||||
Exprs: []clause.Expression{
|
||||
clause.Eq{Column: clause.PrimaryColumn, Value: "1"},
|
||||
clause.Gt{Column: "age", Value: 18},
|
||||
}}, clause.OrConditions{
|
||||
},
|
||||
},
|
||||
clause.OrConditions{
|
||||
Exprs: []clause.Expression{
|
||||
clause.Lt{Column: "score", Value: 100},
|
||||
},
|
||||
}),
|
||||
}}},
|
||||
},
|
||||
),
|
||||
},
|
||||
}},
|
||||
"SELECT * FROM `users` WHERE NOT ((`users`.`id` = ? AND `age` > ?) OR `score` < ?)",
|
||||
[]interface{}{"1", 18, 100},
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user