bug fixed for log level and improved json scanner

This commit is contained in:
Lunny Xiao 2016-03-24 22:46:24 +08:00
parent f01db0b5c5
commit a2a2456fa2
5 changed files with 53 additions and 52 deletions

View File

@ -1 +1 @@
xorm v0.5.2.0323 xorm v0.5.2.0324

View File

@ -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{}) { func (engine *Engine) LogError(contents ...interface{}) {
//if engine.ShowErr {
// engine.overrideLogLevel(core.LOG_ERR)
engine.logger.Err(contents...) engine.logger.Err(contents...)
//}
} }
func (engine *Engine) LogErrorf(format string, contents ...interface{}) { func (engine *Engine) LogErrorf(format string, contents ...interface{}) {
//if engine.ShowErr {
// engine.overrideLogLevel(core.LOG_ERR)
engine.logger.Errf(format, contents...) engine.logger.Errf(format, contents...)
//}
} }
// logging info // logging info
func (engine *Engine) LogInfo(contents ...interface{}) { func (engine *Engine) LogInfo(contents ...interface{}) {
//if engine.ShowInfo {
// engine.overrideLogLevel(core.LOG_INFO)
engine.logger.Info(contents...) engine.logger.Info(contents...)
//}
} }
func (engine *Engine) LogInfof(format string, contents ...interface{}) { func (engine *Engine) LogInfof(format string, contents ...interface{}) {
//if engine.ShowErr {
// engine.overrideLogLevel(core.LOG_INFO)
engine.logger.Infof(format, contents...) engine.logger.Infof(format, contents...)
//}
} }
// logging debug // logging debug
func (engine *Engine) LogDebug(contents ...interface{}) { func (engine *Engine) LogDebug(contents ...interface{}) {
//if engine.ShowDebug {
// engine.overrideLogLevel(core.LOG_DEBUG)
engine.logger.Debug(contents...) engine.logger.Debug(contents...)
//}
} }
func (engine *Engine) LogDebugf(format string, contents ...interface{}) { func (engine *Engine) LogDebugf(format string, contents ...interface{}) {
//if engine.ShowDebug {
// engine.overrideLogLevel(core.LOG_DEBUG)
engine.logger.Debugf(format, contents...) engine.logger.Debugf(format, contents...)
//}
} }
// logging warn // logging warn
func (engine *Engine) LogWarn(contents ...interface{}) { func (engine *Engine) LogWarn(contents ...interface{}) {
//if engine.ShowWarn {
// engine.overrideLogLevel(core.LOG_WARNING)
engine.logger.Warning(contents...) engine.logger.Warning(contents...)
//}
} }
func (engine *Engine) LogWarnf(format string, contents ...interface{}) { func (engine *Engine) LogWarnf(format string, contents ...interface{}) {
//if engine.ShowWarn {
// engine.overrideLogLevel(core.LOG_WARNING)
engine.logger.Warningf(format, contents...) engine.logger.Warningf(format, contents...)
//}
} }
// Sql method let's you manualy write raw sql and operate // Sql method let's you manualy write raw sql and operate

View File

@ -48,56 +48,56 @@ func NewSimpleLogger3(out io.Writer, prefix string, flag int, l core.LogLevel) *
} }
func (s *SimpleLogger) Err(v ...interface{}) (err error) { 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...) s.ERR.Println(v...)
} }
return return
} }
func (s *SimpleLogger) Errf(format string, v ...interface{}) (err error) { 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...) s.ERR.Printf(format, v...)
} }
return return
} }
func (s *SimpleLogger) Debug(v ...interface{}) (err error) { 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...) s.DEBUG.Println(v...)
} }
return return
} }
func (s *SimpleLogger) Debugf(format string, v ...interface{}) (err error) { 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...) s.DEBUG.Printf(format, v...)
} }
return return
} }
func (s *SimpleLogger) Info(v ...interface{}) (err error) { 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...) s.INFO.Println(v...)
} }
return return
} }
func (s *SimpleLogger) Infof(format string, v ...interface{}) (err error) { 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...) s.INFO.Printf(format, v...)
} }
return return
} }
func (s *SimpleLogger) Warning(v ...interface{}) (err error) { 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...) s.WARN.Println(v...)
} }
return return
} }
func (s *SimpleLogger) Warningf(format string, v ...interface{}) (err error) { 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...) s.WARN.Printf(format, v...)
} }
return return

View File

@ -1687,22 +1687,59 @@ func (session *Session) _row2Bean(rows *core.Rows, fields []string, fieldsCount
fieldType := fieldValue.Type() fieldType := fieldValue.Type()
hasAssigned := false hasAssigned := false
col := table.GetColumn(key)
switch fieldType.Kind() { if col.SQLType.IsJson() {
case reflect.Complex64, reflect.Complex128: var bs []byte
if rawValueType.Kind() == reflect.String { 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) x := reflect.New(fieldType)
err := json.Unmarshal([]byte(vv.String()), x.Interface()) err := json.Unmarshal(bs, x.Interface())
if err != nil { if err != nil {
session.Engine.LogError(err) session.Engine.LogError(err)
return err return err
} }
fieldValue.Set(x.Elem()) 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 { } 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) x := reflect.New(fieldType)
err := json.Unmarshal(vv.Bytes(), x.Interface()) err := json.Unmarshal(bs, x.Interface())
if err != nil { if err != nil {
session.Engine.LogError(err) session.Engine.LogError(err)
return err return err
@ -1752,7 +1789,6 @@ func (session *Session) _row2Bean(rows *core.Rows, fields []string, fieldsCount
fieldValue.SetUint(uint64(vv.Int())) fieldValue.SetUint(uint64(vv.Int()))
} }
case reflect.Struct: case reflect.Struct:
col := table.GetColumn(key)
if fieldType.ConvertibleTo(core.TimeType) { if fieldType.ConvertibleTo(core.TimeType) {
if rawValueType == core.TimeType { if rawValueType == core.TimeType {
hasAssigned = true hasAssigned = true

View File

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