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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Cr
						Cr