Skip to content

Commit 60ce788

Browse files
committed
remove writer from compressor
1 parent 0512769 commit 60ce788

File tree

3 files changed

+25
-12
lines changed

3 files changed

+25
-12
lines changed

compress.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,17 @@ func zCompress(src []byte, dst io.Writer) error {
8787
}
8888

8989
type compressor struct {
90-
mc *mysqlConn
91-
bytesBuf []byte // read buffer (FIFO)
92-
connWriter io.Writer
90+
mc *mysqlConn
91+
// read buffer (FIFO).
92+
// We can not reuse already-read buffer until dropping Go 1.20 support.
93+
// It is because of database/mysql's weired behavior.
94+
// See https://github.com/go-sql-driver/mysql/issues/1435
95+
bytesBuf []byte
9396
}
9497

95-
func newCompressor(mc *mysqlConn, w io.Writer) *compressor {
98+
func newCompressor(mc *mysqlConn) *compressor {
9699
return &compressor{
97-
mc: mc,
98-
connWriter: w,
100+
mc: mc,
99101
}
100102
}
101103

@@ -226,7 +228,7 @@ func (c *compressor) writeCompressedPacket(data []byte, uncompressedLen int) err
226228
data[5] = byte(0xff & (uncompressedLen >> 8))
227229
data[6] = byte(0xff & (uncompressedLen >> 16))
228230

229-
if _, err := c.connWriter.Write(data); err != nil {
231+
if _, err := c.mc.netConn.Write(data); err != nil {
230232
c.mc.cfg.Logger.Print(err)
231233
return err
232234
}

compress_test.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"crypto/rand"
1414
"fmt"
1515
"io"
16+
"net"
1617
"testing"
1718
)
1819

@@ -34,14 +35,24 @@ func newMockBuf(data []byte) buffer {
3435
}
3536
}
3637

38+
type dummyConn struct {
39+
buf bytes.Buffer
40+
net.Conn
41+
}
42+
43+
func (c *dummyConn) Write(data []byte) (int, error) {
44+
return c.buf.Write(data)
45+
}
46+
3747
// compressHelper compresses uncompressedPacket and checks state variables
3848
func compressHelper(t *testing.T, mc *mysqlConn, uncompressedPacket []byte) []byte {
3949
// get status variables
4050

4151
cs := mc.compressSequence
4252

43-
var b bytes.Buffer
44-
cw := newCompressor(mc, &b)
53+
var b dummyConn
54+
mc.netConn = &b
55+
cw := newCompressor(mc)
4556

4657
n, err := cw.Write(uncompressedPacket)
4758

@@ -64,7 +75,7 @@ func compressHelper(t *testing.T, mc *mysqlConn, uncompressedPacket []byte) []by
6475
}
6576
}
6677

67-
return b.Bytes()
78+
return b.buf.Bytes()
6879
}
6980

7081
// uncompressHelper uncompresses compressedPacket and checks state variables
@@ -74,7 +85,7 @@ func uncompressHelper(t *testing.T, mc *mysqlConn, compressedPacket []byte, expS
7485

7586
// mocking out buf variable
7687
mc.buf = newMockBuf(compressedPacket)
77-
cr := newCompressor(mc, nil)
88+
cr := newCompressor(mc)
7889

7990
uncompressedPacket, err := cr.readNext(expSize)
8091
if err != nil {

connector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
169169
}
170170

171171
if mc.compress {
172-
cmpr := newCompressor(mc, mc.packetWriter)
172+
cmpr := newCompressor(mc)
173173
mc.packetReader = cmpr
174174
mc.packetWriter = cmpr
175175
}

0 commit comments

Comments
 (0)