mirror of https://github.com/go-gorm/gorm.git
Refactor dummy driver QuoteTo method
This commit is contained in:
parent
04f049c1da
commit
d41fb3acdc
|
@ -31,9 +31,51 @@ func (DummyDialector) BindVarTo(writer clause.Writer, stmt *gorm.Statement, v in
|
||||||
}
|
}
|
||||||
|
|
||||||
func (DummyDialector) QuoteTo(writer clause.Writer, str string) {
|
func (DummyDialector) QuoteTo(writer clause.Writer, str string) {
|
||||||
writer.WriteByte('`')
|
var (
|
||||||
writer.WriteString(str)
|
underQuoted, selfQuoted bool
|
||||||
writer.WriteByte('`')
|
continuousBacktick int8
|
||||||
|
shiftDelimiter int8
|
||||||
|
)
|
||||||
|
|
||||||
|
for _, v := range []byte(str) {
|
||||||
|
switch v {
|
||||||
|
case '`':
|
||||||
|
continuousBacktick++
|
||||||
|
if continuousBacktick == 2 {
|
||||||
|
writer.WriteString("``")
|
||||||
|
continuousBacktick = 0
|
||||||
|
}
|
||||||
|
case '.':
|
||||||
|
if continuousBacktick > 0 || !selfQuoted {
|
||||||
|
shiftDelimiter = 0
|
||||||
|
underQuoted = false
|
||||||
|
continuousBacktick = 0
|
||||||
|
writer.WriteString("`")
|
||||||
|
}
|
||||||
|
writer.WriteByte(v)
|
||||||
|
continue
|
||||||
|
default:
|
||||||
|
if shiftDelimiter-continuousBacktick <= 0 && !underQuoted {
|
||||||
|
writer.WriteByte('`')
|
||||||
|
underQuoted = true
|
||||||
|
if selfQuoted = continuousBacktick > 0; selfQuoted {
|
||||||
|
continuousBacktick -= 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ; continuousBacktick > 0; continuousBacktick -= 1 {
|
||||||
|
writer.WriteString("``")
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.WriteByte(v)
|
||||||
|
}
|
||||||
|
shiftDelimiter++
|
||||||
|
}
|
||||||
|
|
||||||
|
if continuousBacktick > 0 && !selfQuoted {
|
||||||
|
writer.WriteString("``")
|
||||||
|
}
|
||||||
|
writer.WriteString("`")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (DummyDialector) Explain(sql string, vars ...interface{}) string {
|
func (DummyDialector) Explain(sql string, vars ...interface{}) string {
|
||||||
|
|
Loading…
Reference in New Issue