summaryrefslogtreecommitdiffstats
path: root/vendor/xorm.io/xorm/engine.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/xorm.io/xorm/engine.go')
-rw-r--r--vendor/xorm.io/xorm/engine.go47
1 files changed, 34 insertions, 13 deletions
diff --git a/vendor/xorm.io/xorm/engine.go b/vendor/xorm.io/xorm/engine.go
index 4ed0f77a92..a7e52ea484 100644
--- a/vendor/xorm.io/xorm/engine.go
+++ b/vendor/xorm.io/xorm/engine.go
@@ -207,25 +207,46 @@ func (engine *Engine) QuoteTo(buf *strings.Builder, value string) {
return
}
- quotePair := engine.dialect.Quote("")
+ quoteTo(buf, engine.dialect.Quote(""), value)
+}
- if value[0] == '`' || len(quotePair) < 2 || value[0] == quotePair[0] { // no quote
+func quoteTo(buf *strings.Builder, quotePair string, value string) {
+ if len(quotePair) < 2 { // no quote
_, _ = buf.WriteString(value)
return
- } else {
- prefix, suffix := quotePair[0], quotePair[1]
-
- _ = buf.WriteByte(prefix)
- for i := 0; i < len(value); i++ {
- if value[i] == '.' {
- _ = buf.WriteByte(suffix)
- _ = buf.WriteByte('.')
- _ = buf.WriteByte(prefix)
+ }
+
+ prefix, suffix := quotePair[0], quotePair[1]
+
+ i := 0
+ for i < len(value) {
+ // start of a token; might be already quoted
+ if value[i] == '.' {
+ _ = buf.WriteByte('.')
+ i++
+ } else if value[i] == prefix || value[i] == '`' {
+ // Has quotes; skip/normalize `name` to prefix+name+sufix
+ var ch byte
+ if value[i] == prefix {
+ ch = suffix
} else {
+ ch = '`'
+ }
+ i++
+ _ = buf.WriteByte(prefix)
+ for ; i < len(value) && value[i] != ch; i++ {
+ _ = buf.WriteByte(value[i])
+ }
+ _ = buf.WriteByte(suffix)
+ i++
+ } else {
+ // Requires quotes
+ _ = buf.WriteByte(prefix)
+ for ; i < len(value) && value[i] != '.'; i++ {
_ = buf.WriteByte(value[i])
}
+ _ = buf.WriteByte(suffix)
}
- _ = buf.WriteByte(suffix)
}
}
@@ -330,7 +351,7 @@ func (engine *Engine) Ping() error {
return session.Ping()
}
-// logging sql
+// logSQL save sql
func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) {
if engine.showSQL && !engine.showExecTime {
if len(sqlArgs) > 0 {