Fix extra 'AND' when len(values) == 0 ON IN.NegationBuild()
This commit is contained in:
		
							parent
							
								
									2b2f6e77af
								
							
						
					
					
						commit
						f21efdc42b
					
				@ -210,11 +210,12 @@ func (in IN) Build(builder Builder) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (in IN) NegationBuild(builder Builder) {
 | 
					func (in IN) NegationBuild(builder Builder) {
 | 
				
			||||||
 | 
						builder.WriteQuoted(in.Column)
 | 
				
			||||||
	switch len(in.Values) {
 | 
						switch len(in.Values) {
 | 
				
			||||||
	case 0:
 | 
						case 0:
 | 
				
			||||||
 | 
							builder.WriteString(" IS NOT NULL")
 | 
				
			||||||
	case 1:
 | 
						case 1:
 | 
				
			||||||
		if _, ok := in.Values[0].([]interface{}); !ok {
 | 
							if _, ok := in.Values[0].([]interface{}); !ok {
 | 
				
			||||||
			builder.WriteQuoted(in.Column)
 | 
					 | 
				
			||||||
			builder.WriteString(" <> ")
 | 
								builder.WriteString(" <> ")
 | 
				
			||||||
			builder.AddVar(builder, in.Values[0])
 | 
								builder.AddVar(builder, in.Values[0])
 | 
				
			||||||
			break
 | 
								break
 | 
				
			||||||
@ -222,7 +223,6 @@ func (in IN) NegationBuild(builder Builder) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		fallthrough
 | 
							fallthrough
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		builder.WriteQuoted(in.Column)
 | 
					 | 
				
			||||||
		builder.WriteString(" NOT IN (")
 | 
							builder.WriteString(" NOT IN (")
 | 
				
			||||||
		builder.AddVar(builder, in.Values...)
 | 
							builder.AddVar(builder, in.Values...)
 | 
				
			||||||
		builder.WriteByte(')')
 | 
							builder.WriteByte(')')
 | 
				
			||||||
 | 
				
			|||||||
@ -436,6 +436,11 @@ func TestNot(t *testing.T) {
 | 
				
			|||||||
		t.Fatalf("Build NOT condition, but got %v", result.Statement.SQL.String())
 | 
							t.Fatalf("Build NOT condition, but got %v", result.Statement.SQL.String())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result = dryDB.Not(map[string]interface{}{"name": []string{}}).Find(&User{})
 | 
				
			||||||
 | 
						if !regexp.MustCompile("SELECT \\* FROM .*users.* WHERE .*name.* IS NOT NULL").MatchString(result.Statement.SQL.String()) {
 | 
				
			||||||
 | 
							t.Fatalf("Build NOT condition, but got %v", result.Statement.SQL.String())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	result = dryDB.Not(map[string]interface{}{"name": []string{"jinzhu", "jinzhu 2"}}).Find(&User{})
 | 
						result = dryDB.Not(map[string]interface{}{"name": []string{"jinzhu", "jinzhu 2"}}).Find(&User{})
 | 
				
			||||||
	if !regexp.MustCompile("SELECT \\* FROM .*users.* WHERE .*name.* NOT IN \\(.+,.+\\)").MatchString(result.Statement.SQL.String()) {
 | 
						if !regexp.MustCompile("SELECT \\* FROM .*users.* WHERE .*name.* NOT IN \\(.+,.+\\)").MatchString(result.Statement.SQL.String()) {
 | 
				
			||||||
		t.Fatalf("Build NOT condition, but got %v", result.Statement.SQL.String())
 | 
							t.Fatalf("Build NOT condition, but got %v", result.Statement.SQL.String())
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user