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{}) {
|
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
|
||||||
|
|
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) {
|
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
|
||||||
|
|
46
session.go
46
session.go
|
@ -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 {
|
||||||
|
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
|
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 {
|
||||||
|
bs = vv.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
hasAssigned = true
|
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
|
||||||
|
|
Loading…
Reference in New Issue