Skip to content

Commit 6a71f69

Browse files
committed
Merge pull request #137 from go-sql-driver/refactoring
Refactoring
2 parents cf20fc0 + 620bcdd commit 6a71f69

File tree

5 files changed

+25
-22
lines changed

5 files changed

+25
-22
lines changed

buffer.go

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func newBuffer(rd io.Reader) *buffer {
3333
}
3434

3535
// fill reads into the buffer until at least _need_ bytes are in it
36-
func (b *buffer) fill(need int) (err error) {
36+
func (b *buffer) fill(need int) error {
3737
// move existing data to the beginning
3838
if b.length > 0 && b.idx > 0 {
3939
copy(b.buf[0:b.length], b.buf[b.idx:])
@@ -51,34 +51,37 @@ func (b *buffer) fill(need int) (err error) {
5151

5252
b.idx = 0
5353

54-
var n int
5554
for {
56-
n, err = b.rd.Read(b.buf[b.length:])
55+
n, err := b.rd.Read(b.buf[b.length:])
5756
b.length += n
5857

59-
if b.length < need && err == nil {
60-
continue
58+
if err == nil {
59+
if b.length < need {
60+
continue
61+
}
62+
return nil
6163
}
62-
return // err
64+
if b.length >= need && err == io.EOF {
65+
return nil
66+
}
67+
return err
6368
}
64-
return
6569
}
6670

6771
// returns next N bytes from buffer.
6872
// The returned slice is only guaranteed to be valid until the next read
69-
func (b *buffer) readNext(need int) (p []byte, err error) {
73+
func (b *buffer) readNext(need int) ([]byte, error) {
7074
if b.length < need {
7175
// refill
72-
err = b.fill(need) // err deferred
73-
if err == io.EOF && b.length >= need {
74-
err = nil
76+
if err := b.fill(need); err != nil {
77+
return nil, err
7578
}
7679
}
7780

78-
p = b.buf[b.idx : b.idx+need]
81+
offset := b.idx
7982
b.idx += need
8083
b.length -= need
81-
return
84+
return b.buf[offset:b.idx], nil
8285
}
8386

8487
// returns a buffer with the requested size.

connection.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, erro
199199
var resLen int
200200
resLen, err = mc.readResultSetHeaderPacket()
201201
if err == nil {
202-
rows := &mysqlRows{mc, false, nil, false}
202+
rows := &mysqlRows{mc, nil, false, false}
203203

204204
if resLen > 0 {
205205
// Columns
@@ -226,12 +226,11 @@ func (mc *mysqlConn) getSystemVar(name string) ([]byte, error) {
226226
// Read Result
227227
resLen, err := mc.readResultSetHeaderPacket()
228228
if err == nil {
229-
rows := &mysqlRows{mc, false, nil, false}
229+
rows := &mysqlRows{mc, nil, false, false}
230230

231231
if resLen > 0 {
232232
// Columns
233-
rows.columns, err = mc.readColumns(resLen)
234-
if err != nil {
233+
if err := mc.readUntilEOF(); err != nil {
235234
return nil, err
236235
}
237236
}

packets.go

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

60-
var buf []byte
61-
buf = append(buf, data...)
60+
// Make a copy since data becomes invalid with the next read
61+
buf := make([]byte, len(data))
62+
copy(buf, data)
6263

6364
// More data
6465
data, err = mc.readPacket()

rows.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ import (
1414
)
1515

1616
type mysqlField struct {
17-
name string
1817
fieldType byte
1918
flags fieldFlag
19+
name string
2020
}
2121

2222
type mysqlRows struct {
2323
mc *mysqlConn
24-
binary bool
2524
columns []mysqlField
25+
binary bool
2626
eof bool
2727
}
2828

statement.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) {
8484
return nil, err
8585
}
8686

87-
rows := &mysqlRows{mc, true, nil, false}
87+
rows := &mysqlRows{mc, nil, true, false}
8888

8989
if resLen > 0 {
9090
// Columns

0 commit comments

Comments
 (0)