From 507ee4df02b8df13daf3fc1c956e4b8679cd8cfa Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 23 Feb 2015 12:24:26 +0800 Subject: [PATCH] resolved #163 --- engine.go | 5 +++++ helpers.go | 15 +++++++++++++-- session.go | 8 ++++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/engine.go b/engine.go index 0a97d663..703c612c 100644 --- a/engine.go +++ b/engine.go @@ -1405,6 +1405,11 @@ func (engine *Engine) NowTime(sqlTypeName string) interface{} { return engine.FormatTime(sqlTypeName, t) } +func (engine *Engine) NowTime2(sqlTypeName string) (interface{}, time.Time) { + t := time.Now() + return engine.FormatTime(sqlTypeName, t), t +} + func (engine *Engine) FormatTime(sqlTypeName string, t time.Time) (v interface{}) { switch sqlTypeName { case core.Time: diff --git a/helpers.go b/helpers.go index 353f509c..88ba60a0 100644 --- a/helpers.go +++ b/helpers.go @@ -336,10 +336,21 @@ func genCols(table *core.Table, session *Session, bean interface{}, useCol bool, } if (col.IsCreated || col.IsUpdated) && session.Statement.UseAutoTime { - args = append(args, session.Engine.NowTime(col.SQLType.Name)) + val, t := session.Engine.NowTime2(col.SQLType.Name) + args = append(args, val) + session.afterClosures = append(session.afterClosures, func(bean interface{}) { + v, _ := col.ValueOf(bean) + switch v.Type().Kind() { + case reflect.Struct: + v.Set(reflect.ValueOf(t)) + case reflect.Int, reflect.Int64, reflect.Int32: + v.SetInt(t.Unix()) + case reflect.Uint, reflect.Uint64, reflect.Uint32: + v.SetUint(uint64(t.Unix())) + } + }) } else if col.IsVersion && session.Statement.checkVersion { args = append(args, 1) - //} else if !col.DefaultIsEmpty { } else { arg, err := session.value2Interface(col, fieldValue) if err != nil { diff --git a/session.go b/session.go index 2431607e..6fa6d219 100644 --- a/session.go +++ b/session.go @@ -1626,7 +1626,6 @@ func (session *Session) row2Bean(rows *core.Rows, fields []string, fieldsCount i } func (session *Session) _row2Bean(rows *core.Rows, fields []string, fieldsCount int, bean interface{}, dataStruct *reflect.Value, table *core.Table) error { - scanResults := make([]interface{}, fieldsCount) for i := 0; i < len(fields); i++ { var cell interface{} @@ -1766,6 +1765,12 @@ func (session *Session) _row2Bean(rows *core.Rows, fields []string, fieldsCount // t = fieldValue.Interface().(time.Time) // z, _ = t.Zone() // session.Engine.LogDebug("fieldValue key[%v]: %v | zone: %v | location: %+v\n", key, t, z, *t.Location()) + } else if rawValueType == core.IntType || rawValueType == core.Int64Type || + rawValueType == core.Int32Type { + hasAssigned = true + t := time.Unix(vv.Int(), 0).In(session.Engine.TZLocation) + vv = reflect.ValueOf(t) + fieldValue.Set(vv) } } else if session.Statement.UseCascade { table := session.Engine.autoMapType(*fieldValue) @@ -3783,7 +3788,6 @@ func (session *Session) Delete(bean interface{}) (int64, error) { copy(afterClosures, session.afterClosures) session.afterDeleteBeans[bean] = &afterClosures } - } else { if _, ok := interface{}(bean).(AfterInsertProcessor); ok { session.afterDeleteBeans[bean] = nil