From d4a504706e3ce39c1ed6038487c1877e17353e1b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 28 Sep 2019 13:43:26 +0800 Subject: [PATCH] fix arg conversion --- filter.go | 10 ++-------- filter_test.go | 5 ++++- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/filter.go b/filter.go index 7079b82..55be956 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 54a1cf6..a6b7b3b 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)) -- 2.40.1