diff --git a/VERSION b/VERSION index 2b520b7d..d3bc91a8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -xorm v0.5.2.0323 +xorm v0.5.2.0324 diff --git a/engine.go b/engine.go index 0f6190f5..abf8a7b2 100644 --- a/engine.go +++ b/engine.go @@ -287,74 +287,39 @@ func (engine *Engine) logSQLExecutionTime(sqlStr string, args []interface{}, exe } } -// logging error -/* -func (engine *Engine) overrideLogLevel(overrideLevel core.LogLevel) { - logLevel := engine.logger.Level() - if logLevel == core.LOG_UNKNOWN { - // intend to left empty - } else if logLevel < overrideLevel { // TODO can remove if deprecated engine.ShowErr - engine.logger.SetLevel(core.LOG_ERR) // try override logger's log level - } -}*/ - func (engine *Engine) LogError(contents ...interface{}) { - //if engine.ShowErr { - // engine.overrideLogLevel(core.LOG_ERR) engine.logger.Err(contents...) - //} } func (engine *Engine) LogErrorf(format string, contents ...interface{}) { - //if engine.ShowErr { - // engine.overrideLogLevel(core.LOG_ERR) engine.logger.Errf(format, contents...) - //} } // logging info func (engine *Engine) LogInfo(contents ...interface{}) { - //if engine.ShowInfo { - // engine.overrideLogLevel(core.LOG_INFO) engine.logger.Info(contents...) - //} } func (engine *Engine) LogInfof(format string, contents ...interface{}) { - //if engine.ShowErr { - // engine.overrideLogLevel(core.LOG_INFO) engine.logger.Infof(format, contents...) - //} } // logging debug func (engine *Engine) LogDebug(contents ...interface{}) { - //if engine.ShowDebug { - // engine.overrideLogLevel(core.LOG_DEBUG) engine.logger.Debug(contents...) - //} } func (engine *Engine) LogDebugf(format string, contents ...interface{}) { - //if engine.ShowDebug { - // engine.overrideLogLevel(core.LOG_DEBUG) engine.logger.Debugf(format, contents...) - //} } // logging warn func (engine *Engine) LogWarn(contents ...interface{}) { - //if engine.ShowWarn { - // engine.overrideLogLevel(core.LOG_WARNING) engine.logger.Warning(contents...) - //} } func (engine *Engine) LogWarnf(format string, contents ...interface{}) { - //if engine.ShowWarn { - // engine.overrideLogLevel(core.LOG_WARNING) engine.logger.Warningf(format, contents...) - //} } // Sql method let's you manualy write raw sql and operate diff --git a/logger.go b/logger.go index 5b8ac5b2..5302ca36 100644 --- a/logger.go +++ b/logger.go @@ -48,56 +48,56 @@ func NewSimpleLogger3(out io.Writer, prefix string, flag int, l core.LogLevel) * } func (s *SimpleLogger) Err(v ...interface{}) (err error) { - if s.level > core.LOG_OFF && s.level <= core.LOG_ERR { + if s.level <= core.LOG_ERR { s.ERR.Println(v...) } return } func (s *SimpleLogger) Errf(format string, v ...interface{}) (err error) { - if s.level > core.LOG_OFF && s.level <= core.LOG_ERR { + if s.level <= core.LOG_ERR { s.ERR.Printf(format, v...) } return } func (s *SimpleLogger) Debug(v ...interface{}) (err error) { - if s.level > core.LOG_OFF && s.level <= core.LOG_DEBUG { + if s.level <= core.LOG_DEBUG { s.DEBUG.Println(v...) } return } func (s *SimpleLogger) Debugf(format string, v ...interface{}) (err error) { - if s.level > core.LOG_OFF && s.level >= core.LOG_DEBUG { + if s.level <= core.LOG_DEBUG { s.DEBUG.Printf(format, v...) } return } func (s *SimpleLogger) Info(v ...interface{}) (err error) { - if s.level > core.LOG_OFF && s.level >= core.LOG_INFO { + if s.level <= core.LOG_INFO { s.INFO.Println(v...) } return } func (s *SimpleLogger) Infof(format string, v ...interface{}) (err error) { - if s.level > core.LOG_OFF && s.level >= core.LOG_INFO { + if s.level <= core.LOG_INFO { s.INFO.Printf(format, v...) } return } func (s *SimpleLogger) Warning(v ...interface{}) (err error) { - if s.level > core.LOG_OFF && s.level >= core.LOG_WARNING { + if s.level <= core.LOG_WARNING { s.WARN.Println(v...) } return } func (s *SimpleLogger) Warningf(format string, v ...interface{}) (err error) { - if s.level > core.LOG_OFF && s.level >= core.LOG_WARNING { + if s.level <= core.LOG_WARNING { s.WARN.Printf(format, v...) } return diff --git a/session.go b/session.go index b4caa360..f2650f9e 100644 --- a/session.go +++ b/session.go @@ -1687,22 +1687,59 @@ func (session *Session) _row2Bean(rows *core.Rows, fields []string, fieldsCount fieldType := fieldValue.Type() hasAssigned := false + col := table.GetColumn(key) - switch fieldType.Kind() { - case reflect.Complex64, reflect.Complex128: + if col.SQLType.IsJson() { + var bs []byte if rawValueType.Kind() == reflect.String { - hasAssigned = true + bs = []byte(vv.String()) + } else if rawValueType.ConvertibleTo(reflect.SliceOf(reflect.TypeOf(uint8(1)))) { + bs = vv.Bytes() + } else { + return errors.New("unsupported database data type") + } + + hasAssigned = true + + if fieldValue.CanAddr() { + err := json.Unmarshal(bs, fieldValue.Addr().Interface()) + if err != nil { + session.Engine.LogError(err) + return err + } + } else { x := reflect.New(fieldType) - err := json.Unmarshal([]byte(vv.String()), x.Interface()) + err := json.Unmarshal(bs, x.Interface()) if err != nil { session.Engine.LogError(err) return err } fieldValue.Set(x.Elem()) + } + + continue + } + + switch fieldType.Kind() { + case reflect.Complex64, reflect.Complex128: + // TODO: reimplement this + var bs []byte + if rawValueType.Kind() == reflect.String { + bs = []byte(vv.String()) } else if rawValueType.Kind() == reflect.Slice { - hasAssigned = true + bs = vv.Bytes() + } + + hasAssigned = true + if fieldValue.CanAddr() { + err := json.Unmarshal(bs, fieldValue.Addr().Interface()) + if err != nil { + session.Engine.LogError(err) + return err + } + } else { x := reflect.New(fieldType) - err := json.Unmarshal(vv.Bytes(), x.Interface()) + err := json.Unmarshal(bs, x.Interface()) if err != nil { session.Engine.LogError(err) return err @@ -1752,7 +1789,6 @@ func (session *Session) _row2Bean(rows *core.Rows, fields []string, fieldsCount fieldValue.SetUint(uint64(vv.Int())) } case reflect.Struct: - col := table.GetColumn(key) if fieldType.ConvertibleTo(core.TimeType) { if rawValueType == core.TimeType { hasAssigned = true diff --git a/xorm.go b/xorm.go index 7685ab41..82ee2e70 100644 --- a/xorm.go +++ b/xorm.go @@ -17,7 +17,7 @@ import ( ) const ( - Version string = "0.5.2.0323" + Version string = "0.5.2.0324" ) func regDrvsNDialects() bool {