From 90aeac8d08eb0774246cb35e1102858e0b9cd044 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 28 Sep 2019 05:59:35 +0000 Subject: [PATCH] fix arg conversion (#61) --- filter.go | 10 ++-------- filter_test.go | 5 ++++- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/filter.go b/filter.go index 7079b822..55be9562 100644 --- a/filter.go +++ b/filter.go @@ -73,20 +73,14 @@ type SeqFilter struct { func convertQuestionMark(sql, prefix string, start int) string { var buf strings.Builder var beginSingleQuote bool - var beginTransfer bool var index = start for _, c := range sql { if !beginSingleQuote && c == '?' { buf.WriteString(fmt.Sprintf("%s%v", prefix, index)) index++ } else { - if c == '\\' { - beginTransfer = true - } else { - if !beginTransfer && c == '\'' { - beginSingleQuote = !beginSingleQuote - } - beginTransfer = false + if c == '\'' { + beginSingleQuote = !beginSingleQuote } buf.WriteRune(c) } diff --git a/filter_test.go b/filter_test.go index 54a1cf6a..a6b7b3bb 100644 --- a/filter_test.go +++ b/filter_test.go @@ -28,7 +28,10 @@ func TestSeqFilter(t *testing.T) { var kases = map[string]string{ "SELECT * FROM TABLE1 WHERE a=? AND b=?": "SELECT * FROM TABLE1 WHERE a=$1 AND b=$2", "SELECT 1, '???', '2006-01-02 15:04:05' FROM TABLE1 WHERE a=? AND b=?": "SELECT 1, '???', '2006-01-02 15:04:05' FROM TABLE1 WHERE a=$1 AND b=$2", - "select '1\\'?' from issue": "select '1\\'?' from issue", + "select '1''?' from issue": "select '1''?' from issue", + "select '1\\??' from issue": "select '1\\??' from issue", + "select '1\\\\',? from issue": "select '1\\\\',$1 from issue", + "select '1\\''?',? from issue": "select '1\\''?',$1 from issue", } for sql, result := range kases { assert.EqualValues(t, result, convertQuestionMark(sql, "$", 1))