Fix uninitialized Valuer return time.Time, close #3214
This commit is contained in:
parent
7c2ecdfc1c
commit
47a5196734
@ -213,6 +213,8 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
|
|||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
if _, ok := fieldValue.Interface().(*time.Time); ok {
|
if _, ok := fieldValue.Interface().(*time.Time); ok {
|
||||||
field.DataType = Time
|
field.DataType = Time
|
||||||
|
} else if fieldValue.Type().ConvertibleTo(reflect.TypeOf(time.Time{})) {
|
||||||
|
field.DataType = Time
|
||||||
} else if fieldValue.Type().ConvertibleTo(reflect.TypeOf(&time.Time{})) {
|
} else if fieldValue.Type().ConvertibleTo(reflect.TypeOf(&time.Time{})) {
|
||||||
field.DataType = Time
|
field.DataType = Time
|
||||||
}
|
}
|
||||||
|
@ -124,20 +124,21 @@ func TestInvalidValuer(t *testing.T) {
|
|||||||
|
|
||||||
type ScannerValuerStruct struct {
|
type ScannerValuerStruct struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
Name sql.NullString
|
Name sql.NullString
|
||||||
Gender *sql.NullString
|
Gender *sql.NullString
|
||||||
Age sql.NullInt64
|
Age sql.NullInt64
|
||||||
Male sql.NullBool
|
Male sql.NullBool
|
||||||
Height sql.NullFloat64
|
Height sql.NullFloat64
|
||||||
Birthday sql.NullTime
|
Birthday sql.NullTime
|
||||||
Password EncryptedData
|
Password EncryptedData
|
||||||
Bytes []byte
|
Bytes []byte
|
||||||
Num Num
|
Num Num
|
||||||
Strings StringsSlice
|
Strings StringsSlice
|
||||||
Structs StructsSlice
|
Structs StructsSlice
|
||||||
Role Role
|
Role Role
|
||||||
UserID *sql.NullInt64
|
UserID *sql.NullInt64
|
||||||
User User
|
User User
|
||||||
|
EmptyTime EmptyTime
|
||||||
}
|
}
|
||||||
|
|
||||||
type EncryptedData []byte
|
type EncryptedData []byte
|
||||||
@ -244,3 +245,18 @@ func (role Role) Value() (driver.Value, error) {
|
|||||||
func (role Role) IsAdmin() bool {
|
func (role Role) IsAdmin() bool {
|
||||||
return role.Name == "admin"
|
return role.Name == "admin"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EmptyTime struct {
|
||||||
|
time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *EmptyTime) Scan(v interface{}) error {
|
||||||
|
nullTime := sql.NullTime{}
|
||||||
|
err := nullTime.Scan(v)
|
||||||
|
t.Time = nullTime.Time
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t EmptyTime) Value() (driver.Value, error) {
|
||||||
|
return t.Time, nil
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user