INADA Naoki 9 years ago
parent
commit
82e447e7ad
2 changed files with 22 additions and 4 deletions
  1. 5 3
      connection.go
  2. 17 1
      connection_test.go

+ 5 - 3
connection.go

@@ -135,6 +135,11 @@ func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
 }
 
 func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (string, error) {
+	// Number of ? should be same to len(args)
+	if strings.Count(query, "?") != len(args) {
+		return "", driver.ErrSkip
+	}
+
 	buf := mc.buf.takeCompleteBuffer()
 	if buf == nil {
 		// can not take the buffer. Something must be wrong with the connection
@@ -153,9 +158,6 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin
 		buf = append(buf, query[i:i+q]...)
 		i += q
 
-		if argPos >= len(args) {
-			return "", driver.ErrSkip
-		}
 		arg := args[argPos]
 		argPos++
 

+ 17 - 1
connection_test.go

@@ -1,6 +1,6 @@
 // Go MySQL Driver - A MySQL-Driver for Go's database/sql package
 //
-// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.
+// Copyright 2016 The Go-MySQL-Driver Authors. All rights reserved.
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this file,
@@ -47,3 +47,19 @@ func TestInterpolateParamsTooManyPlaceholders(t *testing.T) {
 		t.Errorf("Expected err=driver.ErrSkip, got err=%#v, q=%#v", err, q)
 	}
 }
+
+// We don't support placeholder in string literal for now.
+func TestInterpolateParamsPlaceholderInString(t *testing.T) {
+	mc := &mysqlConn{
+		buf:              newBuffer(nil),
+		maxPacketAllowed: maxPacketSize,
+		cfg: &Config{
+			InterpolateParams: true,
+		},
+	}
+
+	q, err := mc.interpolateParams("SELECT 'abc?xyz',?", []driver.Value{int64(42)})
+	if err != driver.ErrSkip {
+		t.Errorf("Expected err=driver.ErrSkip, got err=%#v, q=%#v", err, q)
+	}
+}