Support Get time.Time #1933

Merged
lunny merged 3 commits from lunny/test_get_time into master 2021-07-11 01:30:34 +00:00
3 changed files with 40 additions and 4 deletions

View File

@ -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(&gts)
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))
}

View File

@ -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,

View File

@ -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
}