@@ -29,7 +29,7 @@ func (mc *mysqlConn) readPacket() (data []byte, err error) {
29
29
data = make ([]byte , 4 )
30
30
err = mc .buf .read (data )
31
31
if err != nil {
32
- errLog .Print (err )
32
+ errLog .Print (err . Error () )
33
33
return nil , driver .ErrBadConn
34
34
}
35
35
@@ -40,7 +40,8 @@ func (mc *mysqlConn) readPacket() (data []byte, err error) {
40
40
pktLen |= uint32 (data [2 ]) << 16
41
41
42
42
if pktLen == 0 {
43
- return nil , err
43
+ errLog .Print (errMalformPkt .Error ())
44
+ return nil , driver .ErrBadConn
44
45
}
45
46
46
47
// Check Packet Sync
@@ -59,7 +60,7 @@ func (mc *mysqlConn) readPacket() (data []byte, err error) {
59
60
if err == nil {
60
61
return data , nil
61
62
}
62
- errLog .Print (err )
63
+ errLog .Print (err . Error () )
63
64
return nil , driver .ErrBadConn
64
65
}
65
66
@@ -74,9 +75,9 @@ func (mc *mysqlConn) writePacket(data []byte) error {
74
75
}
75
76
76
77
if err == nil { // n != len(data)
77
- errLog .Print (errMalformPkt )
78
+ errLog .Print (errMalformPkt . Error () )
78
79
} else {
79
- errLog .Print (err )
80
+ errLog .Print (err . Error () )
80
81
}
81
82
return driver .ErrBadConn
82
83
}
@@ -103,7 +104,7 @@ func (mc *mysqlConn) readInitPacket() (err error) {
103
104
104
105
// server version [null terminated string]
105
106
// connection id [4 bytes]
106
- pos := 1 + ( bytes .IndexByte (data [1 :], 0x00 ) + 1 ) + 4
107
+ pos := 1 + bytes .IndexByte (data [1 :], 0x00 ) + 1 + 4
107
108
108
109
// first part of scramble buffer [8 bytes]
109
110
mc .scrambleBuff = data [pos : pos + 8 ]
@@ -287,45 +288,43 @@ func (mc *mysqlConn) writeCommandPacketUint32(command commandType, arg uint32) e
287
288
// Returns error if Packet is not an 'Result OK'-Packet
288
289
func (mc * mysqlConn ) readResultOK () error {
289
290
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 )
302
303
}
303
- // ERROR
304
- return mc .handleErrorPacket (data )
304
+ return err
305
305
}
306
306
307
307
// Result Set Header Packet
308
308
// http://dev.mysql.com/doc/internals/en/text-protocol.html#packet-ProtocolText::Resultset
309
309
func (mc * mysqlConn ) readResultSetHeaderPacket () (int , error ) {
310
310
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
+ }
314
318
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
+ }
321
324
322
- // column count
323
- num , _ , n := readLengthEncodedInteger (data )
324
- if n - len (data ) == 0 {
325
- return int (num ), nil
325
+ return 0 , errMalformPkt
326
326
}
327
-
328
- return 0 , errMalformPkt
327
+ return 0 , err
329
328
}
330
329
331
330
// Error Packet
@@ -487,18 +486,17 @@ func (rows *mysqlRows) readRow(dest []driver.Value) (err error) {
487
486
}
488
487
489
488
// 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 ) {
491
490
var data []byte
492
491
493
492
for {
494
493
data , err = mc .readPacket ()
495
494
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
499
498
}
500
-
501
- count ++
499
+ return
502
500
}
503
501
return
504
502
}
@@ -511,35 +509,32 @@ func (mc *mysqlConn) readUntilEOF() (count uint64, err error) {
511
509
// http://dev.mysql.com/doc/internals/en/prepared-statements.html#com-stmt-prepare-response
512
510
func (stmt * mysqlStmt ) readPrepareResultPacket () (columnCount uint16 , err error ) {
513
511
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
527
515
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 ++
531
522
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
535
526
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
539
530
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
542
534
535
+ // Warning count [16 bit uint]
536
+ // bytesToUint16(data[pos : pos+2])
537
+ }
543
538
return
544
539
}
545
540
0 commit comments