Support Get time.Time #1933
|
@ -904,3 +904,24 @@ func TestGetDecimal(t *testing.T) {
|
|||
//assert.True(t, m.Cmp(gf.Money) == 0, "%v != %v", m.String(), gf.Money.String())
|
||||
}
|
||||
}
|
||||
func TestGetTime(t *testing.T) {
|
||||
type GetTimeStruct struct {
|
||||
Id int64
|
||||
CreateTime time.Time
|
||||
}
|
||||
|
||||
assert.NoError(t, PrepareEngine())
|
||||
assertSync(t, new(GetTimeStruct))
|
||||
|
||||
var gts = GetTimeStruct{
|
||||
CreateTime: time.Now(),
|
||||
}
|
||||
_, err := testEngine.Insert(>s)
|
||||
assert.NoError(t, err)
|
||||
|
||||
var gn time.Time
|
||||
has, err := testEngine.Table("get_time_struct").Cols(colMapper.Obj2Table("CreateTime")).Get(&gn)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, has)
|
||||
assert.EqualValues(t, gts.CreateTime.Format(time.RFC3339), gn.Format(time.RFC3339))
|
||||
}
|
||||
|
|
8
scan.go
8
scan.go
|
@ -22,7 +22,9 @@ func genScanResultsByBeanNullable(bean interface{}) (interface{}, bool, error) {
|
|||
case *sql.NullInt64, *sql.NullBool, *sql.NullFloat64, *sql.NullString, *sql.RawBytes:
|
||||
return t, false, nil
|
||||
case *time.Time:
|
||||
return &sql.NullTime{}, true, nil
|
||||
return &sql.NullString{}, true, nil
|
||||
case *sql.NullTime:
|
||||
return &sql.NullString{}, true, nil
|
||||
case *string:
|
||||
return &sql.NullString{}, true, nil
|
||||
case *int, *int8, *int16, *int32:
|
||||
|
@ -75,8 +77,8 @@ func genScanResultsByBean(bean interface{}) (interface{}, bool, error) {
|
|||
*float32, *float64,
|
||||
*bool:
|
||||
return t, false, nil
|
||||
case *time.Time:
|
||||
return &sql.NullTime{}, true, nil
|
||||
case *time.Time, *sql.NullTime:
|
||||
return &sql.NullString{}, true, nil
|
||||
case sql.NullInt64, sql.NullBool, sql.NullFloat64, sql.NullString,
|
||||
time.Time,
|
||||
string,
|
||||
|
|
|
@ -35,6 +35,19 @@ func (session *Session) Get(bean interface{}) (bool, error) {
|
|||
return session.get(bean)
|
||||
}
|
||||
|
||||
func isPtrOfTime(v interface{}) bool {
|
||||
if _, ok := v.(*time.Time); ok {
|
||||
return true
|
||||
}
|
||||
|
||||
el := reflect.ValueOf(v).Elem()
|
||||
if el.Kind() != reflect.Struct {
|
||||
return false
|
||||
}
|
||||
|
||||
return el.Type().ConvertibleTo(schemas.TimeType)
|
||||
}
|
||||
|
||||
func (session *Session) get(bean interface{}) (bool, error) {
|
||||
defer session.resetStatement()
|
||||
|
||||
|
@ -51,7 +64,7 @@ func (session *Session) get(bean interface{}) (bool, error) {
|
|||
return false, ErrObjectIsNil
|
||||
}
|
||||
|
||||
if beanValue.Elem().Kind() == reflect.Struct {
|
||||
if beanValue.Elem().Kind() == reflect.Struct && !isPtrOfTime(bean) {
|
||||
if err := session.statement.SetRefBean(bean); err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user