refactor function convertParams's default case

This commit is contained in:
0x2d3c 2020-07-28 17:09:18 +08:00
parent c7667e9299
commit 4a34860549

View File

@ -50,30 +50,22 @@ func ExplainSQL(sql string, numericPlaceholder *regexp.Regexp, escaper string, a
case string: case string:
vars[idx] = escaper + strings.Replace(v, escaper, "\\"+escaper, -1) + escaper vars[idx] = escaper + strings.Replace(v, escaper, "\\"+escaper, -1) + escaper
default: default:
if v == nil { rv := reflect.ValueOf(v)
if v == nil || !rv.IsValid() || rv.Kind() == reflect.Ptr && rv.IsNil() {
vars[idx] = "NULL" vars[idx] = "NULL"
} else if valuer, ok := v.(driver.Valuer); ok {
v, _ = valuer.Value()
convertParams(v, idx)
} else if rv.Kind() == reflect.Ptr && !rv.IsZero() {
convertParams(reflect.Indirect(rv).Interface(), idx)
} else { } else {
rv := reflect.ValueOf(v) for _, t := range convertableTypes {
if rv.Type().ConvertibleTo(t) {
if !rv.IsValid() { convertParams(rv.Convert(t).Interface(), idx)
vars[idx] = "NULL" return
} else if rv.Kind() == reflect.Ptr && rv.IsNil() {
vars[idx] = "NULL"
} else if valuer, ok := v.(driver.Valuer); ok {
v, _ = valuer.Value()
convertParams(v, idx)
} else if rv.Kind() == reflect.Ptr && !rv.IsZero() {
convertParams(reflect.Indirect(rv).Interface(), idx)
} else {
for _, t := range convertableTypes {
if rv.Type().ConvertibleTo(t) {
convertParams(rv.Convert(t).Interface(), idx)
return
}
} }
vars[idx] = escaper + strings.Replace(fmt.Sprint(v), escaper, "\\"+escaper, -1) + escaper
} }
vars[idx] = escaper + strings.Replace(fmt.Sprint(v), escaper, "\\"+escaper, -1) + escaper
} }
} }
} }