Skip to content

Commit 4d3764b

Browse files
committed
Return ErrBadConn for invalid connections
This helps with go-sql-driver#142 The database/sql package only retries if it encounters an ErrBadConn. With errInvalidConn it returns immediately
1 parent d10c04b commit 4d3764b

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

connection.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ func (mc *mysqlConn) handleParams() (err error) {
100100

101101
func (mc *mysqlConn) Begin() (driver.Tx, error) {
102102
if mc.netConn == nil {
103-
return nil, errInvalidConn
103+
errLog.Print(errInvalidConn)
104+
return nil, driver.ErrBadConn
104105
}
105106
err := mc.exec("START TRANSACTION")
106107
if err == nil {
@@ -126,7 +127,8 @@ func (mc *mysqlConn) Close() (err error) {
126127

127128
func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
128129
if mc.netConn == nil {
129-
return nil, errInvalidConn
130+
errLog.Print(errInvalidConn)
131+
return nil, driver.ErrBadConn
130132
}
131133
// Send command
132134
err := mc.writeCommandPacketStr(comStmtPrepare, query)
@@ -157,7 +159,8 @@ func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
157159

158160
func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) {
159161
if mc.netConn == nil {
160-
return nil, errInvalidConn
162+
errLog.Print(errInvalidConn)
163+
return nil, driver.ErrBadConn
161164
}
162165
if len(args) == 0 { // no args, fastpath
163166
mc.affectedRows = 0
@@ -201,7 +204,8 @@ func (mc *mysqlConn) exec(query string) error {
201204

202205
func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, error) {
203206
if mc.netConn == nil {
204-
return nil, errInvalidConn
207+
errLog.Print(errInvalidConn)
208+
return nil, driver.ErrBadConn
205209
}
206210
if len(args) == 0 { // no args, fastpath
207211
// Send command

driver_test.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package mysql
1111
import (
1212
"crypto/tls"
1313
"database/sql"
14+
"database/sql/driver"
1415
"fmt"
1516
"io"
1617
"io/ioutil"
@@ -860,8 +861,8 @@ func TestReuseClosedConnection(t *testing.T) {
860861
t.Skipf("MySQL-Server not running on %s", netAddr)
861862
}
862863

863-
driver := &MySQLDriver{}
864-
conn, err := driver.Open(dsn)
864+
md := &MySQLDriver{}
865+
conn, err := md.Open(dsn)
865866
if err != nil {
866867
t.Fatalf("Error connecting: %s", err.Error())
867868
}
@@ -884,9 +885,9 @@ func TestReuseClosedConnection(t *testing.T) {
884885
}
885886
}()
886887
_, err = stmt.Exec(nil)
887-
if err != nil && err != errInvalidConn {
888+
if err != nil && err != driver.ErrBadConn {
888889
t.Errorf("Unexpected error '%s', expected '%s'",
889-
err.Error(), errInvalidConn.Error())
890+
err.Error(), driver.ErrBadConn.Error())
890891
}
891892
}
892893

statement.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ type mysqlStmt struct {
2121

2222
func (stmt *mysqlStmt) Close() error {
2323
if stmt.mc == nil || stmt.mc.netConn == nil {
24-
return errInvalidConn
24+
errLog.Print(errInvalidConn)
25+
return driver.ErrBadConn
2526
}
2627

2728
err := stmt.mc.writeCommandPacketUint32(comStmtClose, stmt.id)
@@ -35,7 +36,8 @@ func (stmt *mysqlStmt) NumInput() int {
3536

3637
func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
3738
if stmt.mc.netConn == nil {
38-
return nil, errInvalidConn
39+
errLog.Print(errInvalidConn)
40+
return nil, driver.ErrBadConn
3941
}
4042
// Send command
4143
err := stmt.writeExecutePacket(args)
@@ -74,7 +76,8 @@ func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
7476

7577
func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) {
7678
if stmt.mc.netConn == nil {
77-
return nil, errInvalidConn
79+
errLog.Print(errInvalidConn)
80+
return nil, driver.ErrBadConn
7881
}
7982
// Send command
8083
err := stmt.writeExecutePacket(args)

0 commit comments

Comments
 (0)