Fix struct scanner
This commit is contained in:
parent
39c8d6220b
commit
2f0cadb4d2
@ -734,12 +734,15 @@ func (field *Field) setupValuerAndSetter() {
|
|||||||
if _, ok := fieldValue.Interface().(sql.Scanner); ok {
|
if _, ok := fieldValue.Interface().(sql.Scanner); ok {
|
||||||
// struct scanner
|
// struct scanner
|
||||||
field.Set = func(value reflect.Value, v interface{}) (err error) {
|
field.Set = func(value reflect.Value, v interface{}) (err error) {
|
||||||
|
reflectV := reflect.ValueOf(v)
|
||||||
|
|
||||||
if valuer, ok := v.(driver.Valuer); ok {
|
if valuer, ok := v.(driver.Valuer); ok {
|
||||||
v, _ = valuer.Value()
|
v, _ = valuer.Value()
|
||||||
}
|
}
|
||||||
|
|
||||||
reflectV := reflect.ValueOf(v)
|
if reflectV.Elem().Type().AssignableTo(field.FieldType) {
|
||||||
if !reflectV.IsValid() {
|
field.ReflectValueOf(value).Set(reflectV.Elem())
|
||||||
|
} else if !reflectV.IsValid() {
|
||||||
field.ReflectValueOf(value).Set(reflect.New(field.FieldType).Elem())
|
field.ReflectValueOf(value).Set(reflect.New(field.FieldType).Elem())
|
||||||
} else if reflectV.Kind() == reflect.Ptr {
|
} else if reflectV.Kind() == reflect.Ptr {
|
||||||
if reflectV.Elem().IsNil() || !reflectV.Elem().IsValid() {
|
if reflectV.Elem().IsNil() || !reflectV.Elem().IsValid() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user