Skip to content

Commit d3fd057

Browse files
committed
Merge pull request #92 from go-sql-driver/buffer
Buffer: better grow method + appending bug fix
2 parents ab769a4 + 334103f commit d3fd057

File tree

3 files changed

+16
-14
lines changed

3 files changed

+16
-14
lines changed

buffer.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ type buffer struct {
2323
}
2424

2525
func newBuffer(rd io.Reader) *buffer {
26+
var b [defaultBufSize]byte
2627
return &buffer{
27-
buf: make([]byte, defaultBufSize),
28+
buf: b[:],
2829
rd: rd,
2930
}
3031
}
@@ -38,14 +39,9 @@ func (b *buffer) fill(need int) (err error) {
3839

3940
// grow buffer if necessary
4041
if need > len(b.buf) {
41-
for {
42-
b.buf = append(b.buf, 0)
43-
b.buf = b.buf[:cap(b.buf)]
44-
45-
if cap(b.buf) >= need {
46-
break
47-
}
48-
}
42+
newBuf := make([]byte, need)
43+
copy(newBuf, b.buf)
44+
b.buf = newBuf
4945
}
5046

5147
b.idx = 0

driver_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ func TestLongData(t *testing.T) {
612612

613613
dbt.mustExec("CREATE TABLE test (value LONGBLOB)")
614614

615-
in := strings.Repeat(`0`, maxAllowedPacketSize+1)
615+
in := strings.Repeat(`a`, maxAllowedPacketSize+1)
616616
var out string
617617
var rows *sql.Rows
618618

@@ -648,7 +648,11 @@ func TestLongData(t *testing.T) {
648648
dbt.Error("LONGBLOB: unexpexted row")
649649
}
650650
} else {
651-
dbt.Fatalf("LONGBLOB: no data")
651+
if err = rows.Err(); err != nil {
652+
dbt.Fatalf("LONGBLOB: no data (err: %s)", err.Error())
653+
} else {
654+
dbt.Fatal("LONGBLOB: no data (err: <nil>)")
655+
}
652656
}
653657
})
654658
}

packets.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,13 @@ func (mc *mysqlConn) readPacket() (data []byte, err error) {
5757
return data, nil
5858
}
5959

60+
var buf []byte
61+
buf = append(buf, data...)
62+
6063
// More data
61-
var data2 []byte
62-
data2, err = mc.readPacket()
64+
data, err = mc.readPacket()
6365
if err == nil {
64-
return append(data, data2...), nil
66+
return append(buf, data...), nil
6567
}
6668
}
6769
errLog.Print(err.Error())

0 commit comments

Comments
 (0)