From 9cb21b6cae622e1172174051aec4037e1b71c846 Mon Sep 17 00:00:00 2001 From: noMoon Date: Tue, 1 Jun 2021 13:43:09 -0400 Subject: [PATCH] add escape map --- logger/sql.go | 12 ++++++++++++ utils/tests/dummy_dialecter.go | 3 --- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/logger/sql.go b/logger/sql.go index 84a33da6..1b74acf6 100644 --- a/logger/sql.go +++ b/logger/sql.go @@ -20,6 +20,12 @@ const ( nullStr = "NULL" ) +var ( + escapeMap = map[string]bool{ + `\`: true, + } +) + func isPrintable(s []byte) bool { for _, r := range s { 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 { var convertParams func(interface{}, int) var vars = make([]string, len(avars)) + escapeMap[escaper] = true + defer delete(escapeMap, escaper) convertParams = func(v interface{}, idx int) { switch v := v.(type) { @@ -81,6 +89,10 @@ func ExplainSQL(sql string, numericPlaceholder *regexp.Regexp, escaper string, a case float64, float32: vars[idx] = strconv.FormatFloat(v.(float64), 'f', -1, 64) case string: + middle := v + for escChar := range escapeMap { + middle = strings.ReplaceAll(middle, escChar, `\`+escChar) + } vars[idx] = escaper + strings.Replace(v, escaper, "\\"+escaper, -1) + escaper log.Println("hoho", escaper, vars[idx], v, strings.Replace(v, escaper, "\\"+escaper, -1)) default: diff --git a/utils/tests/dummy_dialecter.go b/utils/tests/dummy_dialecter.go index 3def33a3..b8452ef9 100644 --- a/utils/tests/dummy_dialecter.go +++ b/utils/tests/dummy_dialecter.go @@ -1,8 +1,6 @@ package tests import ( - "log" - "gorm.io/gorm" "gorm.io/gorm/clause" "gorm.io/gorm/logger" @@ -39,7 +37,6 @@ func (DummyDialector) QuoteTo(writer clause.Writer, str string) { } func (DummyDialector) Explain(sql string, vars ...interface{}) string { - log.Println("escaper", `"`) return logger.ExplainSQL(sql, nil, `"`, vars...) }