From 2f0cadb4d281e7af525dda03214afe3b13f56a6b Mon Sep 17 00:00:00 2001 From: caelansar <819711623@qq.com> Date: Sun, 9 Aug 2020 18:04:07 +0800 Subject: [PATCH] Fix struct scanner --- schema/field.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/schema/field.go b/schema/field.go index 1ca4cb6d..fe8fd8fb 100644 --- a/schema/field.go +++ b/schema/field.go @@ -734,12 +734,15 @@ func (field *Field) setupValuerAndSetter() { if _, ok := fieldValue.Interface().(sql.Scanner); ok { // struct scanner field.Set = func(value reflect.Value, v interface{}) (err error) { + reflectV := reflect.ValueOf(v) + if valuer, ok := v.(driver.Valuer); ok { v, _ = valuer.Value() } - reflectV := reflect.ValueOf(v) - if !reflectV.IsValid() { + if reflectV.Elem().Type().AssignableTo(field.FieldType) { + field.ReflectValueOf(value).Set(reflectV.Elem()) + } else if !reflectV.IsValid() { field.ReflectValueOf(value).Set(reflect.New(field.FieldType).Elem()) } else if reflectV.Kind() == reflect.Ptr { if reflectV.Elem().IsNil() || !reflectV.Elem().IsValid() {