bug fixed

This commit is contained in:
Lunny Xiao 2015-05-18 17:04:25 +08:00
parent cb75b2cd9c
commit a7e7288163
4 changed files with 12 additions and 19 deletions

View File

@ -646,20 +646,18 @@ func (engine *Engine) Having(conditions string) *Session {
func (engine *Engine) autoMapType(v reflect.Value) *core.Table { func (engine *Engine) autoMapType(v reflect.Value) *core.Table {
t := v.Type() t := v.Type()
engine.mutex.RLock() engine.mutex.Lock()
table, ok := engine.Tables[t] table, ok := engine.Tables[t]
engine.mutex.RUnlock()
if !ok { if !ok {
table = engine.mapType(v) table = engine.mapType(v)
engine.mutex.Lock()
engine.Tables[t] = table engine.Tables[t] = table
if v.CanAddr() { if v.CanAddr() {
engine.GobRegister(v.Addr().Interface()) engine.GobRegister(v.Addr().Interface())
} else { } else {
engine.GobRegister(v.Interface()) engine.GobRegister(v.Interface())
} }
engine.mutex.Unlock()
} }
engine.mutex.Unlock()
return table return table
} }

View File

@ -2896,10 +2896,8 @@ func (session *Session) value2Interface(col *core.Column, fieldValue reflect.Val
case reflect.String: case reflect.String:
return fieldValue.String(), nil return fieldValue.String(), nil
case reflect.Struct: case reflect.Struct:
if fieldType == core.TimeType { if fieldType.ConvertibleTo(core.TimeType) {
switch fieldValue.Interface().(type) { t := fieldValue.Convert(core.TimeType).Interface().(time.Time)
case time.Time:
t := fieldValue.Interface().(time.Time)
if session.Engine.dialect.DBType() == core.MSSQL { if session.Engine.dialect.DBType() == core.MSSQL {
if t.IsZero() { if t.IsZero() {
return nil, nil return nil, nil
@ -2907,9 +2905,6 @@ func (session *Session) value2Interface(col *core.Column, fieldValue reflect.Val
} }
tf := session.Engine.FormatTime(col.SQLType.Name, t) tf := session.Engine.FormatTime(col.SQLType.Name, t)
return tf, nil return tf, nil
default:
return fieldValue.Interface(), nil
}
} }
if fieldTable, ok := session.Engine.Tables[fieldValue.Type()]; ok { if fieldTable, ok := session.Engine.Tables[fieldValue.Type()]; ok {
if len(fieldTable.PrimaryKeys) == 1 { if len(fieldTable.PrimaryKeys) == 1 {
@ -2919,7 +2914,7 @@ func (session *Session) value2Interface(col *core.Column, fieldValue reflect.Val
return 0, fmt.Errorf("no primary key for col %v", col.Name) return 0, fmt.Errorf("no primary key for col %v", col.Name)
} }
} else { } else {
return 0, fmt.Errorf("Unsupported type %v\n", fieldValue.Type()) return 0, fmt.Errorf("Unsupported type %v", fieldValue.Type())
} }
case reflect.Complex64, reflect.Complex128: case reflect.Complex64, reflect.Complex128:
bytes, err := json.Marshal(fieldValue.Interface()) bytes, err := json.Marshal(fieldValue.Interface())

View File

@ -615,7 +615,7 @@ func buildConditions(engine *Engine, table *core.Table, bean interface{},
} }
} else { } else {
//TODO: how to handler? //TODO: how to handler?
panic("not supported") panic(fmt.Sprintln("not supported", fieldValue.Interface(), "as", table.PrimaryKeys))
} }
} else { } else {
val = fieldValue.Interface() val = fieldValue.Interface()

View File

@ -17,7 +17,7 @@ import (
) )
const ( const (
Version string = "0.4.3.0507" Version string = "0.4.3.0518"
) )
func regDrvsNDialects() bool { func regDrvsNDialects() bool {