Skip to content
This repository was archived by the owner on Sep 7, 2021. It is now read-only.
This repository is currently being migrated. It's locked while the migration is in progress.

Commit ffebeae

Browse files
committed
remove QuoteStr() usage in engine.go
1 parent 62d884e commit ffebeae

File tree

1 file changed

+35
-15
lines changed

1 file changed

+35
-15
lines changed

engine.go

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ func (engine *Engine) SupportInsertMany() bool {
177177

178178
// QuoteStr Engine's database use which character as quote.
179179
// mysql, sqlite use ` and postgres use "
180+
// Deprecated, use Quote() instead
180181
func (engine *Engine) QuoteStr() string {
181182
return engine.dialect.QuoteStr()
182183
}
@@ -196,13 +197,23 @@ func (engine *Engine) Quote(value string) string {
196197
return value
197198
}
198199

199-
if string(value[0]) == engine.dialect.QuoteStr() || value[0] == '`' {
200+
dummy := engine.dialect.Quote("")
201+
prefix, suffix := dummy[0], dummy[1]
202+
203+
if len(dummy) != 2 || value[0] == prefix || value[0] == '`' { // no quote
200204
return value
205+
} else {
206+
raw := []byte{prefix}
207+
for i := 0; i < len(value); i++ {
208+
if value[i] == '.' {
209+
raw = append(raw, suffix, '.', prefix)
210+
} else {
211+
raw = append(raw, value[i])
212+
}
213+
}
214+
raw = append(raw, suffix)
215+
return string(raw)
201216
}
202-
203-
value = strings.Replace(value, ".", engine.dialect.QuoteStr()+"."+engine.dialect.QuoteStr(), -1)
204-
205-
return engine.dialect.QuoteStr() + value + engine.dialect.QuoteStr()
206217
}
207218

208219
// QuoteTo quotes string and writes into the buffer
@@ -216,20 +227,29 @@ func (engine *Engine) QuoteTo(buf *builder.StringBuilder, value string) {
216227
return
217228
}
218229

219-
if string(value[0]) == engine.dialect.QuoteStr() || value[0] == '`' {
220-
buf.WriteString(value)
230+
dummy := engine.dialect.Quote("")
231+
prefix, suffix := dummy[0], dummy[1]
232+
233+
if len(dummy) != 2 || value[0] == prefix || value[0] == '`' { // no quote
234+
_, _ = buf.WriteString(value)
221235
return
236+
} else {
237+
_ = buf.WriteByte(prefix)
238+
for i := 0; i < len(value); i++ {
239+
if value[i] == '.' {
240+
_ = buf.WriteByte(suffix)
241+
_ = buf.WriteByte('.')
242+
_ = buf.WriteByte(prefix)
243+
} else {
244+
_ = buf.WriteByte(value[i])
245+
}
246+
}
247+
_ = buf.WriteByte(suffix)
222248
}
223-
224-
value = strings.Replace(value, ".", engine.dialect.QuoteStr()+"."+engine.dialect.QuoteStr(), -1)
225-
226-
buf.WriteString(engine.dialect.QuoteStr())
227-
buf.WriteString(value)
228-
buf.WriteString(engine.dialect.QuoteStr())
229249
}
230250

231251
func (engine *Engine) quote(sql string) string {
232-
return engine.dialect.QuoteStr() + sql + engine.dialect.QuoteStr()
252+
return engine.dialect.Quote(sql)
233253
}
234254

235255
// SqlType will be deprecated, please use SQLType instead
@@ -1581,7 +1601,7 @@ func (engine *Engine) formatColTime(col *core.Column, t time.Time) (v interface{
15811601
func (engine *Engine) formatTime(sqlTypeName string, t time.Time) (v interface{}) {
15821602
switch sqlTypeName {
15831603
case core.Time:
1584-
s := t.Format("2006-01-02 15:04:05") //time.RFC3339
1604+
s := t.Format("2006-01-02 15:04:05") // time.RFC3339
15851605
v = s[11:19]
15861606
case core.Date:
15871607
v = t.Format("2006-01-02")

0 commit comments

Comments
 (0)