Fix quotes

This commit is contained in:
Lunny Xiao 2020-03-01 20:58:07 +08:00
parent 7560a6e6ef
commit 96827319ef
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
1 changed files with 24 additions and 13 deletions

View File

@ -26,18 +26,27 @@ func (s *QuoteFilter) Do(sql string) string {
return sql return sql
} }
raw := []byte(sql) var buf strings.Builder
for i, cnt := 0, 0; i < len(raw); i = i + 1 { buf.Grow(len(sql))
if raw[i] == '`' {
if cnt%2 == 0 { var inSingleQuote bool
raw[i] = s.quoter.Prefix var prefix = true
for i := 0; i < len(sql); i++ {
if sql[i] == '\'' && (i == 0 || sql[i-1] != '\\') {
inSingleQuote = !inSingleQuote
}
if !inSingleQuote && sql[i] == '`' {
if prefix {
buf.WriteByte(s.quoter.Prefix)
} else { } else {
raw[i] = s.quoter.Suffix buf.WriteByte(s.quoter.Suffix)
} }
cnt++ prefix = !prefix
} else {
buf.WriteByte(sql[i])
} }
} }
return string(raw) return buf.String()
} }
@ -48,15 +57,17 @@ type SeqFilter struct {
} }
func convertQuestionMark(sql, prefix string, start int) string { func convertQuestionMark(sql, prefix string, start int) string {
var buf strings.Builder var (
var beginSingleQuote bool buf strings.Builder
var index = start beginSingleQuote bool
for _, c := range sql { index = start
)
for i, c := range sql {
if !beginSingleQuote && c == '?' { if !beginSingleQuote && c == '?' {
buf.WriteString(fmt.Sprintf("%s%v", prefix, index)) buf.WriteString(fmt.Sprintf("%s%v", prefix, index))
index++ index++
} else { } else {
if c == '\'' { if c == '\'' && (i > 0 && sql[i-1] != '\\') {
beginSingleQuote = !beginSingleQuote beginSingleQuote = !beginSingleQuote
} }
buf.WriteRune(c) buf.WriteRune(c)