Prevent panic for fields that implement the sql.Scanner interface but are not structs.
Example: type NamedInt int64 func (i *NamedInt) Scan(src interface{}) error { v := reflect.ValueOf(src) if v.Kind() != reflect.Int64 { return errors.New("Cannot scan NamedInt from " + v.String()) } *i = NamedInt(v.Int()) return nil } The model: type Model struct { NamedInt NamedInt `sql:"type:bigint"` } Currently, the NamedInt field causes gorm to panic. This change allows it to work as expected.
This commit is contained in:
parent
dc2f27401e
commit
27a03477f4
11
main_test.go
11
main_test.go
@ -22,6 +22,16 @@ type IgnoredEmbedStruct struct {
|
|||||||
Name string
|
Name string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type NamedInt int64
|
||||||
|
func (i *NamedInt) Scan(src interface{}) error {
|
||||||
|
v := reflect.ValueOf(src)
|
||||||
|
if v.Kind() != reflect.Int64 {
|
||||||
|
return errors.New("Cannot scan NamedInt from " + v.String())
|
||||||
|
}
|
||||||
|
*i = NamedInt(v.Int())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
Id int64 // Id: Primary key
|
Id int64 // Id: Primary key
|
||||||
Age int64
|
Age int64
|
||||||
@ -42,6 +52,7 @@ type User struct {
|
|||||||
PasswordHash []byte
|
PasswordHash []byte
|
||||||
IgnoreMe int64 `sql:"-"`
|
IgnoreMe int64 `sql:"-"`
|
||||||
IgnoreStringSlice []string `sql:"-"`
|
IgnoreStringSlice []string `sql:"-"`
|
||||||
|
NamedInt NamedInt `sql:"type:bigint"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreditCard struct {
|
type CreditCard struct {
|
||||||
|
@ -309,7 +309,7 @@ func (scope *Scope) sqlTagForField(field *Field) (tag string) {
|
|||||||
value := field.Value
|
value := field.Value
|
||||||
reflectValue := reflect.ValueOf(value)
|
reflectValue := reflect.ValueOf(value)
|
||||||
|
|
||||||
if field.IsScanner() {
|
if field.IsScanner() && reflectValue.Kind() == reflect.Struct {
|
||||||
value = reflectValue.Field(0).Interface()
|
value = reflectValue.Field(0).Interface()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user