Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

demonstrate gorm AfterUpdate hook failure #747

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

neiledgar
Copy link

Explain your user case and expected results

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 update 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 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant