Open
Description
GORM Playground Link
Description
We use gorm hooks but we are seeing a problem when a field with type *uuid.UUID is updated with a nil. We expect the value passed to the AfterUpdate() hook to be nil but it is still populated with the original value. Note the database is updated with NULL as expected. It is the go struct in the AfterUpdate() hook that is incorrect.
This was working with gorm version v1.25.1 but is broken in gorm version 1.25.2. Specifically the breakage occurs with the commit 63534145fda9a2ac9ba703650b1a44da6a03e45e
The problem happens using Updates() with a pointer to uuid.UUID
var uuidPtr *uuid.UUID = nil
DB.Model(&p).Updates(map[string]interface{}{"unique_id": uuidPtr}).Error
The problem does not happen in the following scenarios
- when a string pointer is used
var stringPtr *string = nil
DB.Model(&p).Updates(map[string]interface{}{"name": stringPtr}).Error
- when the uuid.UUID pointer is a structure field
type Product6 struct {
ID uint `gorm:"primarykey"`
Name *string
UniqueId *uuid.UUID
}
p = Product6{ID: p.ID, UniqueId: nil}
DB.Model(&p).Updates(map[string]interface{}{"unique_id": p.UniqueId}).Error
- when nil interface is used
DB.Model(&p).Updates(map[string]interface{}{"unique_id": nil}).Error