Skip to content

Commit 74a6452

Browse files
committed
small code optimizations
1 parent d571cda commit 74a6452

File tree

6 files changed

+73
-73
lines changed

6 files changed

+73
-73
lines changed

buffer.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,14 @@ func (b *buffer) fill(need int) (err error) {
3838
b.length = 0
3939

4040
n := 0
41-
for err == nil && b.length < need {
41+
for b.length < need {
4242
n, err = b.rd.Read(b.buf[b.length:])
4343
b.length += n
44+
45+
if err == nil {
46+
continue
47+
}
48+
return // err
4449
}
4550

4651
return

connection.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {
113113
}
114114

115115
if columnCount > 0 {
116-
_, err = stmt.mc.readUntilEOF()
116+
err = stmt.mc.readUntilEOF()
117117
}
118118
}
119119

@@ -159,12 +159,12 @@ func (mc *mysqlConn) exec(query string) (err error) {
159159
var resLen int
160160
resLen, err = mc.readResultSetHeaderPacket()
161161
if err == nil && resLen > 0 {
162-
_, err = mc.readUntilEOF()
162+
err = mc.readUntilEOF()
163163
if err != nil {
164164
return
165165
}
166166

167-
_, err = mc.readUntilEOF()
167+
err = mc.readUntilEOF()
168168
}
169169

170170
return

const.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
package mysql
1111

1212
const (
13-
MIN_PROTOCOL_VERSION = 10
13+
MIN_PROTOCOL_VERSION byte = 10
1414
//MAX_PACKET_SIZE = 1<<24 - 1
1515
TIME_FORMAT = "2006-01-02 15:04:05"
1616
)

packets.go

Lines changed: 60 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func (mc *mysqlConn) readPacket() (data []byte, err error) {
2929
data = make([]byte, 4)
3030
err = mc.buf.read(data)
3131
if err != nil {
32-
errLog.Print(err)
32+
errLog.Print(err.Error())
3333
return nil, driver.ErrBadConn
3434
}
3535

@@ -40,7 +40,8 @@ func (mc *mysqlConn) readPacket() (data []byte, err error) {
4040
pktLen |= uint32(data[2]) << 16
4141

4242
if pktLen == 0 {
43-
return nil, err
43+
errLog.Print(errMalformPkt.Error())
44+
return nil, driver.ErrBadConn
4445
}
4546

4647
// Check Packet Sync
@@ -59,7 +60,7 @@ func (mc *mysqlConn) readPacket() (data []byte, err error) {
5960
if err == nil {
6061
return data, nil
6162
}
62-
errLog.Print(err)
63+
errLog.Print(err.Error())
6364
return nil, driver.ErrBadConn
6465
}
6566

@@ -74,9 +75,9 @@ func (mc *mysqlConn) writePacket(data []byte) error {
7475
}
7576

7677
if err == nil { // n != len(data)
77-
errLog.Print(errMalformPkt)
78+
errLog.Print(errMalformPkt.Error())
7879
} else {
79-
errLog.Print(err)
80+
errLog.Print(err.Error())
8081
}
8182
return driver.ErrBadConn
8283
}
@@ -103,7 +104,7 @@ func (mc *mysqlConn) readInitPacket() (err error) {
103104

104105
// server version [null terminated string]
105106
// connection id [4 bytes]
106-
pos := 1 + (bytes.IndexByte(data[1:], 0x00) + 1) + 4
107+
pos := 1 + bytes.IndexByte(data[1:], 0x00) + 1 + 4
107108

108109
// first part of scramble buffer [8 bytes]
109110
mc.scrambleBuff = data[pos : pos+8]
@@ -287,45 +288,43 @@ func (mc *mysqlConn) writeCommandPacketUint32(command commandType, arg uint32) e
287288
// Returns error if Packet is not an 'Result OK'-Packet
288289
func (mc *mysqlConn) readResultOK() error {
289290
data, err := mc.readPacket()
290-
if err != nil {
291-
return err
292-
}
293-
294-
switch data[0] {
295-
// OK
296-
case 0:
297-
mc.handleOkPacket(data)
298-
return nil
299-
// EOF, someone is using old_passwords
300-
case 254:
301-
return errOldPassword
291+
if err == nil {
292+
switch data[0] {
293+
// OK
294+
case 0:
295+
mc.handleOkPacket(data)
296+
return nil
297+
// EOF, someone is using old_passwords
298+
case 254:
299+
return errOldPassword
300+
}
301+
// ERROR
302+
return mc.handleErrorPacket(data)
302303
}
303-
// ERROR
304-
return mc.handleErrorPacket(data)
304+
return err
305305
}
306306

307307
// Result Set Header Packet
308308
// http://dev.mysql.com/doc/internals/en/text-protocol.html#packet-ProtocolText::Resultset
309309
func (mc *mysqlConn) readResultSetHeaderPacket() (int, error) {
310310
data, err := mc.readPacket()
311-
if err != nil {
312-
return 0, err
313-
}
311+
if err == nil {
312+
if data[0] == 0 {
313+
mc.handleOkPacket(data)
314+
return 0, nil
315+
} else if data[0] == 255 {
316+
return 0, mc.handleErrorPacket(data)
317+
}
314318

315-
if data[0] == 0 {
316-
mc.handleOkPacket(data)
317-
return 0, nil
318-
} else if data[0] == 255 {
319-
return 0, mc.handleErrorPacket(data)
320-
}
319+
// column count
320+
num, _, n := readLengthEncodedInteger(data)
321+
if n-len(data) == 0 {
322+
return int(num), nil
323+
}
321324

322-
// column count
323-
num, _, n := readLengthEncodedInteger(data)
324-
if n-len(data) == 0 {
325-
return int(num), nil
325+
return 0, errMalformPkt
326326
}
327-
328-
return 0, errMalformPkt
327+
return 0, err
329328
}
330329

331330
// Error Packet
@@ -487,18 +486,17 @@ func (rows *mysqlRows) readRow(dest []driver.Value) (err error) {
487486
}
488487

489488
// Reads Packets until EOF-Packet or an Error appears. Returns count of Packets read
490-
func (mc *mysqlConn) readUntilEOF() (count uint64, err error) {
489+
func (mc *mysqlConn) readUntilEOF() (err error) {
491490
var data []byte
492491

493492
for {
494493
data, err = mc.readPacket()
495494

496-
// Err or EOF Packet
497-
if err != nil || (data[0] == 254 && len(data) == 5) {
498-
return
495+
// No Err and no EOF Packet
496+
if err == nil && (data[0] != 254 || len(data) != 5) {
497+
continue
499498
}
500-
501-
count++
499+
return
502500
}
503501
return
504502
}
@@ -511,35 +509,32 @@ func (mc *mysqlConn) readUntilEOF() (count uint64, err error) {
511509
// http://dev.mysql.com/doc/internals/en/prepared-statements.html#com-stmt-prepare-response
512510
func (stmt *mysqlStmt) readPrepareResultPacket() (columnCount uint16, err error) {
513511
data, err := stmt.mc.readPacket()
514-
if err != nil {
515-
return
516-
}
517-
518-
// Position
519-
pos := 0
520-
521-
// packet marker [1 byte]
522-
if data[pos] != 0 { // not OK (0) ?
523-
err = stmt.mc.handleErrorPacket(data)
524-
return
525-
}
526-
pos++
512+
if err == nil {
513+
// Position
514+
pos := 0
527515

528-
// statement id [4 bytes]
529-
stmt.id = binary.LittleEndian.Uint32(data[pos : pos+4])
530-
pos += 4
516+
// packet marker [1 byte]
517+
if data[pos] != 0 { // not OK (0) ?
518+
err = stmt.mc.handleErrorPacket(data)
519+
return
520+
}
521+
pos++
531522

532-
// Column count [16 bit uint]
533-
columnCount = binary.LittleEndian.Uint16(data[pos : pos+2])
534-
pos += 2
523+
// statement id [4 bytes]
524+
stmt.id = binary.LittleEndian.Uint32(data[pos : pos+4])
525+
pos += 4
535526

536-
// Param count [16 bit uint]
537-
stmt.paramCount = int(binary.LittleEndian.Uint16(data[pos : pos+2]))
538-
pos += 2
527+
// Column count [16 bit uint]
528+
columnCount = binary.LittleEndian.Uint16(data[pos : pos+2])
529+
pos += 2
539530

540-
// Warning count [16 bit uint]
541-
// bytesToUint16(data[pos : pos+2])
531+
// Param count [16 bit uint]
532+
stmt.paramCount = int(binary.LittleEndian.Uint16(data[pos : pos+2]))
533+
pos += 2
542534

535+
// Warning count [16 bit uint]
536+
// bytesToUint16(data[pos : pos+2])
537+
}
543538
return
544539
}
545540

rows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func (rows *mysqlRows) Close() (err error) {
4747
return errors.New("Invalid Connection")
4848
}
4949

50-
_, err = rows.mc.readUntilEOF()
50+
err = rows.mc.readUntilEOF()
5151
}
5252

5353
return

statement.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {
4646
if err == nil {
4747
if resLen > 0 {
4848
// Columns
49-
_, err = stmt.mc.readUntilEOF()
49+
err = stmt.mc.readUntilEOF()
5050
if err != nil {
5151
return nil, err
5252
}
5353

5454
// Rows
55-
_, err = stmt.mc.readUntilEOF()
55+
err = stmt.mc.readUntilEOF()
5656
}
5757
if err == nil {
5858
return &mysqlResult{

0 commit comments

Comments
 (0)