Fix quotes
This commit is contained in:
parent
7560a6e6ef
commit
96827319ef
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue