From a2dda39b1f71900f480555db67db00ff46105998 Mon Sep 17 00:00:00 2001 From: a631807682 <631807682@qq.com> Date: Fri, 7 Apr 2023 13:54:30 +0800 Subject: [PATCH] fix: embedded should be nil if not exists --- schema/field.go | 10 ---------- tests/embedded_struct_test.go | 11 +++++++++++ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/schema/field.go b/schema/field.go index 00beb0676..15edab93d 100644 --- a/schema/field.go +++ b/schema/field.go @@ -580,8 +580,6 @@ func (field *Field) setupValuerAndSetter() { case **bool: if data != nil && *data != nil { field.ReflectValueOf(ctx, value).SetBool(**data) - } else { - field.ReflectValueOf(ctx, value).SetBool(false) } case bool: field.ReflectValueOf(ctx, value).SetBool(data) @@ -601,8 +599,6 @@ func (field *Field) setupValuerAndSetter() { case **int64: if data != nil && *data != nil { field.ReflectValueOf(ctx, value).SetInt(**data) - } else { - field.ReflectValueOf(ctx, value).SetInt(0) } case int64: field.ReflectValueOf(ctx, value).SetInt(data) @@ -667,8 +663,6 @@ func (field *Field) setupValuerAndSetter() { case **uint64: if data != nil && *data != nil { field.ReflectValueOf(ctx, value).SetUint(**data) - } else { - field.ReflectValueOf(ctx, value).SetUint(0) } case uint64: field.ReflectValueOf(ctx, value).SetUint(data) @@ -721,8 +715,6 @@ func (field *Field) setupValuerAndSetter() { case **float64: if data != nil && *data != nil { field.ReflectValueOf(ctx, value).SetFloat(**data) - } else { - field.ReflectValueOf(ctx, value).SetFloat(0) } case float64: field.ReflectValueOf(ctx, value).SetFloat(data) @@ -767,8 +759,6 @@ func (field *Field) setupValuerAndSetter() { case **string: if data != nil && *data != nil { field.ReflectValueOf(ctx, value).SetString(**data) - } else { - field.ReflectValueOf(ctx, value).SetString("") } case string: field.ReflectValueOf(ctx, value).SetString(data) diff --git a/tests/embedded_struct_test.go b/tests/embedded_struct_test.go index 63ec53ee2..0d240fd84 100644 --- a/tests/embedded_struct_test.go +++ b/tests/embedded_struct_test.go @@ -103,9 +103,16 @@ func TestEmbeddedPointerTypeStruct(t *testing.T) { URL string } + type Author struct { + ID string + Name string + Email string + } + type HNPost struct { *BasePost Upvotes int32 + *Author `gorm:"EmbeddedPrefix:user_"` // Embedded struct } DB.Migrator().DropTable(&HNPost{}) @@ -123,6 +130,10 @@ func TestEmbeddedPointerTypeStruct(t *testing.T) { if hnPost.Title != "embedded_pointer_type" { t.Errorf("Should find correct value for embedded pointer type") } + + if hnPost.Author != nil { + t.Errorf("Expected to get back a nil Author but got: %v", hnPost.Author) + } } type Content struct {