bug fixed for log level and improved json scanner
This commit is contained in:
parent
f01db0b5c5
commit
a2a2456fa2
35
engine.go
35
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
|
||||
|
|
16
logger.go
16
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
|
||||
|
|
46
session.go
46
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 {
|
||||
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 {
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue