Skip to content

Commit

Permalink
*datatypes.JSON in model causes panic on tx.Statement.Changed (#6611)
Browse files Browse the repository at this point in the history
* do not panic on nil

* more explanation in comments

* get things compact
  • Loading branch information
Mathias Zeller committed Oct 10, 2023
1 parent 9d8a5bb commit 12ba285
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 10 deletions.
29 changes: 19 additions & 10 deletions utils/utils.go
Expand Up @@ -89,19 +89,28 @@ func Contains(elems []string, elem string) bool {
return false
}

func AssertEqual(src, dst interface{}) bool {
if !reflect.DeepEqual(src, dst) {
if valuer, ok := src.(driver.Valuer); ok {
src, _ = valuer.Value()
}
func AssertEqual(x, y interface{}) bool {
if reflect.DeepEqual(x, y) {
return true
}
if x == nil || y == nil {
return false
}

if valuer, ok := dst.(driver.Valuer); ok {
dst, _ = valuer.Value()
}
xval := reflect.ValueOf(x)
yval := reflect.ValueOf(y)
if xval.Kind() == reflect.Ptr && xval.IsNil() ||
yval.Kind() == reflect.Ptr && yval.IsNil() {
return false
}

return reflect.DeepEqual(src, dst)
if valuer, ok := x.(driver.Valuer); ok {
x, _ = valuer.Value()
}
if valuer, ok := y.(driver.Valuer); ok {
y, _ = valuer.Value()
}
return true
return reflect.DeepEqual(x, y)
}

func ToString(value interface{}) string {
Expand Down
1 change: 1 addition & 0 deletions utils/utils_test.go
Expand Up @@ -98,6 +98,7 @@ func TestAssertEqual(t *testing.T) {
{"error not equal", errors.New("1"), errors.New("2"), false},
{"driver.Valuer equal", ModifyAt{Time: now, Valid: true}, ModifyAt{Time: now, Valid: true}, true},
{"driver.Valuer not equal", ModifyAt{Time: now, Valid: true}, ModifyAt{Time: now.Add(time.Second), Valid: true}, false},
{"driver.Valuer equal (ptr to nil ptr)", (*ModifyAt)(nil), &ModifyAt{}, false},
}
for _, test := range assertEqualTests {
t.Run(test.name, func(t *testing.T) {
Expand Down

0 comments on commit 12ba285

Please sign in to comment.