Skip to content

AfterUpdate hooks fails for nil uuid pointer #7090

Open
@neiledgar

Description

@neiledgar

GORM Playground Link

go-gorm/playground#747

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

  1. when a string pointer is used
var stringPtr *string = nil
DB.Model(&p).Updates(map[string]interface{}{"name": stringPtr}).Error
  1. 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
  1. when nil interface is used
DB.Model(&p).Updates(map[string]interface{}{"unique_id": nil}).Error

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions