Skip to content

Commit b568757

Browse files
authored
Merge branch 'master' into fix-race-on-cancel
2 parents a832658 + 1a64773 commit b568757

11 files changed

+96
-91
lines changed

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ It's possible to access the last inserted ID and number of affected rows for mul
326326

327327
```go
328328
conn, _ := db.Conn(ctx)
329-
conn.Raw(func(conn interface{}) error {
329+
conn.Raw(func(conn any) error {
330330
ex := conn.(driver.Execer)
331331
res, err := ex.Exec(`
332332
UPDATE point SET x = 1 WHERE y = 2;

Diff for: auth.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ func (mc *mysqlConn) auth(authData []byte, plugin string) ([]byte, error) {
338338
return authEd25519(authData, mc.cfg.Passwd)
339339

340340
default:
341-
mc.cfg.Logger.Print("unknown auth plugin:", plugin)
341+
mc.log("unknown auth plugin:", plugin)
342342
return nil, ErrUnknownPlugin
343343
}
344344
}

Diff for: connection.go

+14-9
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ type mysqlConn struct {
4545
closed atomic.Bool // set when conn is closed, before closech is closed
4646
}
4747

48+
// Helper function to call per-connection logger.
49+
func (mc *mysqlConn) log(v ...any) {
50+
mc.cfg.Logger.Print(v...)
51+
}
52+
4853
// Handles parameters set in DSN after the connection is established
4954
func (mc *mysqlConn) handleParams() (err error) {
5055
var cmdSet strings.Builder
@@ -110,7 +115,7 @@ func (mc *mysqlConn) Begin() (driver.Tx, error) {
110115

111116
func (mc *mysqlConn) begin(readOnly bool) (driver.Tx, error) {
112117
if mc.closed.Load() {
113-
mc.cfg.Logger.Print(ErrInvalidConn)
118+
mc.log(ErrInvalidConn)
114119
return nil, driver.ErrBadConn
115120
}
116121
var q string
@@ -153,7 +158,7 @@ func (mc *mysqlConn) cleanup() {
153158
return
154159
}
155160
if err := nc.Close(); err != nil {
156-
mc.cfg.Logger.Print(err)
161+
mc.log(err)
157162
}
158163
// This function can be called from multiple goroutines.
159164
// So we can not mc.clearResult() here.
@@ -172,14 +177,14 @@ func (mc *mysqlConn) error() error {
172177

173178
func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
174179
if mc.closed.Load() {
175-
mc.cfg.Logger.Print(ErrInvalidConn)
180+
mc.log(ErrInvalidConn)
176181
return nil, driver.ErrBadConn
177182
}
178183
// Send command
179184
err := mc.writeCommandPacketStr(comStmtPrepare, query)
180185
if err != nil {
181186
// STMT_PREPARE is safe to retry. So we can return ErrBadConn here.
182-
mc.cfg.Logger.Print(err)
187+
mc.log(err)
183188
return nil, driver.ErrBadConn
184189
}
185190

@@ -213,7 +218,7 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin
213218
buf, err := mc.buf.takeCompleteBuffer()
214219
if err != nil {
215220
// can not take the buffer. Something must be wrong with the connection
216-
mc.cfg.Logger.Print(err)
221+
mc.log(err)
217222
return "", ErrInvalidConn
218223
}
219224
buf = buf[:0]
@@ -305,7 +310,7 @@ func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (strin
305310

306311
func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) {
307312
if mc.closed.Load() {
308-
mc.cfg.Logger.Print(ErrInvalidConn)
313+
mc.log(ErrInvalidConn)
309314
return nil, driver.ErrBadConn
310315
}
311316
if len(args) != 0 {
@@ -365,7 +370,7 @@ func (mc *mysqlConn) query(query string, args []driver.Value) (*textRows, error)
365370
handleOk := mc.clearResult()
366371

367372
if mc.closed.Load() {
368-
mc.cfg.Logger.Print(ErrInvalidConn)
373+
mc.log(ErrInvalidConn)
369374
return nil, driver.ErrBadConn
370375
}
371376
if len(args) != 0 {
@@ -460,7 +465,7 @@ func (mc *mysqlConn) finish() {
460465
// Ping implements driver.Pinger interface
461466
func (mc *mysqlConn) Ping(ctx context.Context) (err error) {
462467
if mc.closed.Load() {
463-
mc.cfg.Logger.Print(ErrInvalidConn)
468+
mc.log(ErrInvalidConn)
464469
return driver.ErrBadConn
465470
}
466471

@@ -669,7 +674,7 @@ func (mc *mysqlConn) ResetSession(ctx context.Context) error {
669674
err = connCheck(conn)
670675
}
671676
if err != nil {
672-
mc.cfg.Logger.Print("closing bad idle connection: ", err)
677+
mc.log("closing bad idle connection: ", err)
673678
return driver.ErrBadConn
674679
}
675680
}

Diff for: driver_test.go

+58-58
Large diffs are not rendered by default.

Diff for: errors.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@ var defaultLogger = Logger(log.New(os.Stderr, "[mysql] ", log.Ldate|log.Ltime|lo
4141

4242
// Logger is used to log critical error messages.
4343
type Logger interface {
44-
Print(v ...interface{})
44+
Print(v ...any)
4545
}
4646

4747
// NopLogger is a nop implementation of the Logger interface.
4848
type NopLogger struct{}
4949

5050
// Print implements Logger interface.
51-
func (nl *NopLogger) Print(_ ...interface{}) {}
51+
func (nl *NopLogger) Print(_ ...any) {}
5252

5353
// SetLogger is used to set the default logger for critical errors.
5454
// The initial logger is os.Stderr.

Diff for: fields.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ var (
134134
scanTypeString = reflect.TypeOf("")
135135
scanTypeNullString = reflect.TypeOf(sql.NullString{})
136136
scanTypeBytes = reflect.TypeOf([]byte{})
137-
scanTypeUnknown = reflect.TypeOf(new(interface{}))
137+
scanTypeUnknown = reflect.TypeOf(new(any))
138138
)
139139

140140
type mysqlField struct {

Diff for: nulltime.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type NullTime sql.NullTime
3838
// Scan implements the Scanner interface.
3939
// The value type must be time.Time or string / []byte (formatted time-string),
4040
// otherwise Scan fails.
41-
func (nt *NullTime) Scan(value interface{}) (err error) {
41+
func (nt *NullTime) Scan(value any) (err error) {
4242
if value == nil {
4343
nt.Time, nt.Valid = time.Time{}, false
4444
return

Diff for: nulltime_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var (
2323

2424
func TestScanNullTime(t *testing.T) {
2525
var scanTests = []struct {
26-
in interface{}
26+
in any
2727
error bool
2828
valid bool
2929
time time.Time

Diff for: packets.go

+12-12
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
3434
if cerr := mc.canceled.Value(); cerr != nil {
3535
return nil, cerr
3636
}
37-
mc.cfg.Logger.Print(err)
37+
mc.log(err)
3838
mc.Close()
3939
return nil, ErrInvalidConn
4040
}
@@ -57,7 +57,7 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
5757
if pktLen == 0 {
5858
// there was no previous packet
5959
if prevData == nil {
60-
mc.cfg.Logger.Print(ErrMalformPkt)
60+
mc.log(ErrMalformPkt)
6161
mc.Close()
6262
return nil, ErrInvalidConn
6363
}
@@ -71,7 +71,7 @@ func (mc *mysqlConn) readPacket() ([]byte, error) {
7171
if cerr := mc.canceled.Value(); cerr != nil {
7272
return nil, cerr
7373
}
74-
mc.cfg.Logger.Print(err)
74+
mc.log(err)
7575
mc.Close()
7676
return nil, ErrInvalidConn
7777
}
@@ -134,7 +134,7 @@ func (mc *mysqlConn) writePacket(data []byte) error {
134134
// Handle error
135135
if err == nil { // n != len(data)
136136
mc.cleanup()
137-
mc.cfg.Logger.Print(ErrMalformPkt)
137+
mc.log(ErrMalformPkt)
138138
} else {
139139
if cerr := mc.canceled.Value(); cerr != nil {
140140
return cerr
@@ -144,7 +144,7 @@ func (mc *mysqlConn) writePacket(data []byte) error {
144144
return errBadConnNoWrite
145145
}
146146
mc.cleanup()
147-
mc.cfg.Logger.Print(err)
147+
mc.log(err)
148148
}
149149
return ErrInvalidConn
150150
}
@@ -302,7 +302,7 @@ func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string
302302
data, err := mc.buf.takeBuffer(pktLen + 4)
303303
if err != nil {
304304
// cannot take the buffer. Something must be wrong with the connection
305-
mc.cfg.Logger.Print(err)
305+
mc.log(err)
306306
return errBadConnNoWrite
307307
}
308308

@@ -392,7 +392,7 @@ func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error {
392392
data, err := mc.buf.takeSmallBuffer(pktLen)
393393
if err != nil {
394394
// cannot take the buffer. Something must be wrong with the connection
395-
mc.cfg.Logger.Print(err)
395+
mc.log(err)
396396
return errBadConnNoWrite
397397
}
398398

@@ -412,7 +412,7 @@ func (mc *mysqlConn) writeCommandPacket(command byte) error {
412412
data, err := mc.buf.takeSmallBuffer(4 + 1)
413413
if err != nil {
414414
// cannot take the buffer. Something must be wrong with the connection
415-
mc.cfg.Logger.Print(err)
415+
mc.log(err)
416416
return errBadConnNoWrite
417417
}
418418

@@ -431,7 +431,7 @@ func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error {
431431
data, err := mc.buf.takeBuffer(pktLen + 4)
432432
if err != nil {
433433
// cannot take the buffer. Something must be wrong with the connection
434-
mc.cfg.Logger.Print(err)
434+
mc.log(err)
435435
return errBadConnNoWrite
436436
}
437437

@@ -452,7 +452,7 @@ func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error {
452452
data, err := mc.buf.takeSmallBuffer(4 + 1 + 4)
453453
if err != nil {
454454
// cannot take the buffer. Something must be wrong with the connection
455-
mc.cfg.Logger.Print(err)
455+
mc.log(err)
456456
return errBadConnNoWrite
457457
}
458458

@@ -994,7 +994,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
994994
}
995995
if err != nil {
996996
// cannot take the buffer. Something must be wrong with the connection
997-
mc.cfg.Logger.Print(err)
997+
mc.log(err)
998998
return errBadConnNoWrite
999999
}
10001000

@@ -1193,7 +1193,7 @@ func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {
11931193
if valuesCap != cap(paramValues) {
11941194
data = append(data[:pos], paramValues...)
11951195
if err = mc.buf.store(data); err != nil {
1196-
mc.cfg.Logger.Print(err)
1196+
mc.log(err)
11971197
return errBadConnNoWrite
11981198
}
11991199
}

Diff for: statement.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func (stmt *mysqlStmt) CheckNamedValue(nv *driver.NamedValue) (err error) {
5151

5252
func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
5353
if stmt.mc.closed.Load() {
54-
stmt.mc.cfg.Logger.Print(ErrInvalidConn)
54+
stmt.mc.log(ErrInvalidConn)
5555
return nil, driver.ErrBadConn
5656
}
5757
// Send command
@@ -95,7 +95,7 @@ func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) {
9595

9696
func (stmt *mysqlStmt) query(args []driver.Value) (*binaryRows, error) {
9797
if stmt.mc.closed.Load() {
98-
stmt.mc.cfg.Logger.Print(ErrInvalidConn)
98+
stmt.mc.log(ErrInvalidConn)
9999
return nil, driver.ErrBadConn
100100
}
101101
// Send command
@@ -141,7 +141,7 @@ type converter struct{}
141141
// implementation does not. This function should be kept in sync with
142142
// database/sql/driver defaultConverter.ConvertValue() except for that
143143
// deliberate difference.
144-
func (c converter) ConvertValue(v interface{}) (driver.Value, error) {
144+
func (c converter) ConvertValue(v any) (driver.Value, error) {
145145
if driver.IsValue(v) {
146146
return v, nil
147147
}

Diff for: statement_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func TestConvertPointer(t *testing.T) {
7777
}
7878

7979
func TestConvertSignedIntegers(t *testing.T) {
80-
values := []interface{}{
80+
values := []any{
8181
int8(-42),
8282
int16(-42),
8383
int32(-42),
@@ -106,7 +106,7 @@ func (u myUint64) Value() (driver.Value, error) {
106106
}
107107

108108
func TestConvertUnsignedIntegers(t *testing.T) {
109-
values := []interface{}{
109+
values := []any{
110110
uint8(42),
111111
uint16(42),
112112
uint32(42),

0 commit comments

Comments
 (0)