forked from mirror/gorm
fix: stmt.Changed zero value filed behavior (#5281)
* fix: stmt.Changed zero value filed behavior * chore: rename var
This commit is contained in:
parent
395606ac7c
commit
9b80fe9e96
|
@ -609,10 +609,10 @@ func (stmt *Statement) Changed(fields ...string) bool {
|
|||
changed := func(field *schema.Field) bool {
|
||||
fieldValue, _ := field.ValueOf(stmt.Context, modelValue)
|
||||
if v, ok := selectColumns[field.DBName]; (ok && v) || (!ok && !restricted) {
|
||||
if v, ok := stmt.Dest.(map[string]interface{}); ok {
|
||||
if fv, ok := v[field.Name]; ok {
|
||||
if mv, mok := stmt.Dest.(map[string]interface{}); mok {
|
||||
if fv, ok := mv[field.Name]; ok {
|
||||
return !utils.AssertEqual(fv, fieldValue)
|
||||
} else if fv, ok := v[field.DBName]; ok {
|
||||
} else if fv, ok := mv[field.DBName]; ok {
|
||||
return !utils.AssertEqual(fv, fieldValue)
|
||||
}
|
||||
} else {
|
||||
|
@ -622,6 +622,9 @@ func (stmt *Statement) Changed(fields ...string) bool {
|
|||
}
|
||||
|
||||
changedValue, zero := field.ValueOf(stmt.Context, destValue)
|
||||
if v {
|
||||
return !utils.AssertEqual(changedValue, fieldValue)
|
||||
}
|
||||
return !zero && !utils.AssertEqual(changedValue, fieldValue)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -375,13 +375,19 @@ func TestSetColumn(t *testing.T) {
|
|||
t.Errorf("invalid data after update, got %+v", product)
|
||||
}
|
||||
|
||||
// Code changed, price should changed
|
||||
DB.Model(&product).Select("Name", "Code", "Price").Updates(Product3{Name: "Product New4", Code: ""})
|
||||
if product.Name != "Product New4" || product.Price != 320 || product.Code != "" {
|
||||
t.Errorf("invalid data after update, got %+v", product)
|
||||
}
|
||||
|
||||
DB.Model(&product).UpdateColumns(Product3{Code: "L1215"})
|
||||
if product.Price != 270 || product.Code != "L1215" {
|
||||
if product.Price != 320 || product.Code != "L1215" {
|
||||
t.Errorf("invalid data after update, got %+v", product)
|
||||
}
|
||||
|
||||
DB.Model(&product).Session(&gorm.Session{SkipHooks: true}).Updates(Product3{Code: "L1216"})
|
||||
if product.Price != 270 || product.Code != "L1216" {
|
||||
if product.Price != 320 || product.Code != "L1216" {
|
||||
t.Errorf("invalid data after update, got %+v", product)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue