add escape map
This commit is contained in:
parent
6679cc4e68
commit
9cb21b6cae
@ -20,6 +20,12 @@ const (
|
|||||||
nullStr = "NULL"
|
nullStr = "NULL"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
escapeMap = map[string]bool{
|
||||||
|
`\`: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
func isPrintable(s []byte) bool {
|
func isPrintable(s []byte) bool {
|
||||||
for _, r := range s {
|
for _, r := range s {
|
||||||
if !unicode.IsPrint(rune(r)) {
|
if !unicode.IsPrint(rune(r)) {
|
||||||
@ -34,6 +40,8 @@ var convertibleTypes = []reflect.Type{reflect.TypeOf(time.Time{}), reflect.TypeO
|
|||||||
func ExplainSQL(sql string, numericPlaceholder *regexp.Regexp, escaper string, avars ...interface{}) string {
|
func ExplainSQL(sql string, numericPlaceholder *regexp.Regexp, escaper string, avars ...interface{}) string {
|
||||||
var convertParams func(interface{}, int)
|
var convertParams func(interface{}, int)
|
||||||
var vars = make([]string, len(avars))
|
var vars = make([]string, len(avars))
|
||||||
|
escapeMap[escaper] = true
|
||||||
|
defer delete(escapeMap, escaper)
|
||||||
|
|
||||||
convertParams = func(v interface{}, idx int) {
|
convertParams = func(v interface{}, idx int) {
|
||||||
switch v := v.(type) {
|
switch v := v.(type) {
|
||||||
@ -81,6 +89,10 @@ func ExplainSQL(sql string, numericPlaceholder *regexp.Regexp, escaper string, a
|
|||||||
case float64, float32:
|
case float64, float32:
|
||||||
vars[idx] = strconv.FormatFloat(v.(float64), 'f', -1, 64)
|
vars[idx] = strconv.FormatFloat(v.(float64), 'f', -1, 64)
|
||||||
case string:
|
case string:
|
||||||
|
middle := v
|
||||||
|
for escChar := range escapeMap {
|
||||||
|
middle = strings.ReplaceAll(middle, escChar, `\`+escChar)
|
||||||
|
}
|
||||||
vars[idx] = escaper + strings.Replace(v, escaper, "\\"+escaper, -1) + escaper
|
vars[idx] = escaper + strings.Replace(v, escaper, "\\"+escaper, -1) + escaper
|
||||||
log.Println("hoho", escaper, vars[idx], v, strings.Replace(v, escaper, "\\"+escaper, -1))
|
log.Println("hoho", escaper, vars[idx], v, strings.Replace(v, escaper, "\\"+escaper, -1))
|
||||||
default:
|
default:
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package tests
|
package tests
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/clause"
|
"gorm.io/gorm/clause"
|
||||||
"gorm.io/gorm/logger"
|
"gorm.io/gorm/logger"
|
||||||
@ -39,7 +37,6 @@ func (DummyDialector) QuoteTo(writer clause.Writer, str string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (DummyDialector) Explain(sql string, vars ...interface{}) string {
|
func (DummyDialector) Explain(sql string, vars ...interface{}) string {
|
||||||
log.Println("escaper", `"`)
|
|
||||||
return logger.ExplainSQL(sql, nil, `"`, vars...)
|
return logger.ExplainSQL(sql, nil, `"`, vars...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user