From 78ddfebcfbc1c66e44d523ec3bb7ad1e8398aa12 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 9 May 2014 21:53:00 +0800 Subject: [PATCH] resolved #115 --- engine.go | 12 +++++++++++- session.go | 7 +++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/engine.go b/engine.go index 868450f9..107a9d69 100644 --- a/engine.go +++ b/engine.go @@ -748,7 +748,17 @@ func (engine *Engine) mapType(v reflect.Value) *core.Table { } } } else { - sqlType := core.Type2SQLType(fieldType) + var sqlType core.SQLType + if fieldValue.CanAddr() { + if _, ok := fieldValue.Addr().Interface().(core.Conversion); ok { + sqlType = core.SQLType{core.Text, 0, 0} + } + } + if _, ok := fieldValue.Interface().(core.Conversion); ok { + sqlType = core.SQLType{core.Text, 0, 0} + } else { + sqlType = core.Type2SQLType(fieldType) + } col = core.NewColumn(engine.ColumnMapper.Obj2Table(t.Field(i).Name), t.Field(i).Name, sqlType, sqlType.DefaultLength, sqlType.DefaultLength2, true) diff --git a/session.go b/session.go index 5b3a151d..ccebc79d 100644 --- a/session.go +++ b/session.go @@ -1469,9 +1469,12 @@ func (session *Session) row2Bean(rows *core.Rows, fields []string, fieldsCount i } } - if structConvert, ok := fieldValue.Interface().(core.Conversion); ok { + if _, ok := fieldValue.Interface().(core.Conversion); ok { if data, err := value2Bytes(&rawValue); err == nil { - structConvert.FromDB(data) + if fieldValue.Kind() == reflect.Ptr && fieldValue.IsNil() { + fieldValue.Set(reflect.New(fieldValue.Type().Elem())) + } + fieldValue.Interface().(core.Conversion).FromDB(data) } else { session.Engine.LogError(err) }