mirror of https://github.com/go-gorm/gorm.git
Don't build IN condition if value implemented Valuer interface, #3517
This commit is contained in:
parent
1a526e6802
commit
5228735915
16
statement.go
16
statement.go
|
@ -299,12 +299,18 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) (c
|
||||||
reflectValue := reflect.Indirect(reflect.ValueOf(v[key]))
|
reflectValue := reflect.Indirect(reflect.ValueOf(v[key]))
|
||||||
switch reflectValue.Kind() {
|
switch reflectValue.Kind() {
|
||||||
case reflect.Slice, reflect.Array:
|
case reflect.Slice, reflect.Array:
|
||||||
values := make([]interface{}, reflectValue.Len())
|
if _, ok := v[key].(driver.Valuer); ok {
|
||||||
for i := 0; i < reflectValue.Len(); i++ {
|
conds = append(conds, clause.Eq{Column: key, Value: v[key]})
|
||||||
values[i] = reflectValue.Index(i).Interface()
|
} else if _, ok := v[key].(Valuer); ok {
|
||||||
}
|
conds = append(conds, clause.Eq{Column: key, Value: v[key]})
|
||||||
|
} else {
|
||||||
|
values := make([]interface{}, reflectValue.Len())
|
||||||
|
for i := 0; i < reflectValue.Len(); i++ {
|
||||||
|
values[i] = reflectValue.Index(i).Interface()
|
||||||
|
}
|
||||||
|
|
||||||
conds = append(conds, clause.IN{Column: key, Values: values})
|
conds = append(conds, clause.IN{Column: key, Values: values})
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
conds = append(conds, clause.Eq{Column: key, Value: v[key]})
|
conds = append(conds, clause.Eq{Column: key, Value: v[key]})
|
||||||
}
|
}
|
||||||
|
|
|
@ -345,6 +345,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.Where(map[string]interface{}{"name": []string{"jinzhu", "jinzhu 2"}}).Find(&User{})
|
||||||
|
if !regexp.MustCompile("SELECT \\* FROM .*users.* WHERE .*name.* IN \\(.+,.+\\)").MatchString(result.Statement.SQL.String()) {
|
||||||
|
t.Fatalf("Build NOT condition, but got %v", result.Statement.SQL.String())
|
||||||
|
}
|
||||||
|
|
||||||
result = dryDB.Not("name = ?", "jinzhu").Find(&User{})
|
result = dryDB.Not("name = ?", "jinzhu").Find(&User{})
|
||||||
if !regexp.MustCompile("SELECT \\* FROM .*users.* WHERE NOT.*name.* = .+").MatchString(result.Statement.SQL.String()) {
|
if !regexp.MustCompile("SELECT \\* FROM .*users.* WHERE NOT.*name.* = .+").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…
Reference in New Issue