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{ | ||||
| 						Exprs: []clause.Expression{ | ||||
| 							clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, | ||||
| 							clause.Gt{Column: "age", Value: 18}, | ||||
| 						}}, clause.OrConditions{ | ||||
| 						Exprs: []clause.Expression{ | ||||
| 							clause.Lt{Column: "score", Value: 100}, | ||||
| 					clause.Not( | ||||
| 						clause.AndConditions{ | ||||
| 							Exprs: []clause.Expression{ | ||||
| 								clause.Eq{Column: clause.PrimaryColumn, Value: "1"}, | ||||
| 								clause.Gt{Column: "age", Value: 18}, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}), | ||||
| 				}}}, | ||||
| 						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
	 molon
						molon