@@ -614,7 +614,7 @@ func readStatus(b []byte) statusFlag {
614
614
}
615
615
616
616
// Ok Packet
617
- // http ://dev.mysql.com/doc/internals/en/generic-response-packets.html# packet-OK_Packet
617
+ // https ://dev.mysql.com/doc/internals/en/packet-OK_Packet.html
618
618
func (mc * mysqlConn ) handleOkPacket (data []byte ) error {
619
619
// 0x00 or 0xFE [1 byte]
620
620
n := 1
@@ -640,22 +640,26 @@ func (mc *mysqlConn) handleOkPacket(data []byte) error {
640
640
641
641
// isEOFPacket will return true if the data is either a EOF-Packet or OK-Packet
642
642
// acting as an EOF.
643
- func isEOFPacket (data []byte ) bool {
644
- return data [0 ] == iEOF && len (data ) < 9
643
+ func (mc * mysqlConn ) isEOFPacket (data []byte ) bool {
644
+ // Legacy EOF packet
645
+ if data [0 ] == iEOF && (len (data ) == 5 || len (data ) == 1 ) && mc .flags & clientDeprecateEOF == 0 {
646
+ return true
647
+ }
648
+ return data [0 ] == iEOF && len (data ) < 9 && mc .flags & clientDeprecateEOF != 0
645
649
}
646
650
647
651
// Read Packets as Field Packets until EOF-Packet or an Error appears
648
652
// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnDefinition41
649
653
func (mc * mysqlConn ) readColumns (count int ) ([]mysqlField , error ) {
650
654
columns := make ([]mysqlField , count )
651
655
652
- for i := 0 ; i < count ; i ++ {
656
+ for i := 0 ; ; i ++ {
653
657
data , err := mc .readPacket ()
654
658
if err != nil {
655
659
return nil , err
656
660
}
657
661
658
- if mc .flags & clientDeprecateEOF == 0 && isEOFPacket (data ) {
662
+ if mc .isEOFPacket (data ) {
659
663
if i == count {
660
664
return columns , nil
661
665
}
@@ -741,7 +745,6 @@ func (mc *mysqlConn) readColumns(count int) ([]mysqlField, error) {
741
745
// defaultVal, _, err = bytesToLengthCodedBinary(data[pos:])
742
746
//}
743
747
}
744
- return columns , nil
745
748
}
746
749
747
750
// Read Packets as Field Packets until EOF/OK-Packet or an Error appears
@@ -759,12 +762,13 @@ func (rows *textRows) readRow(dest []driver.Value) error {
759
762
}
760
763
761
764
// EOF Packet
762
- if isEOFPacket (data ) {
765
+ if mc . isEOFPacket (data ) {
763
766
if mc .flags & clientDeprecateEOF == 0 {
764
767
// server_status [2 bytes]
765
768
rows .mc .status = readStatus (data [3 :])
766
769
} else {
767
770
if err := mc .handleOkPacket (data ); err != nil {
771
+ rows .mc = nil
768
772
return err
769
773
}
770
774
}
@@ -830,39 +834,15 @@ func (mc *mysqlConn) readUntilEOF() error {
830
834
switch {
831
835
case data [0 ] == iERR :
832
836
return mc .handleErrorPacket (data )
833
- case isEOFPacket (data ):
837
+ case mc . isEOFPacket (data ):
834
838
if mc .flags & clientDeprecateEOF == 0 {
835
839
mc .status = readStatus (data [3 :])
836
- } else {
837
- return mc .handleOkPacket (data )
840
+ return nil
838
841
}
839
- return nil
840
- }
841
- }
842
- }
843
-
844
- func (mc * mysqlConn ) readPackets (num int ) error {
845
-
846
- // we need to read EOF as well
847
- if mc .flags & clientDeprecateEOF == 0 {
848
- num ++
849
- }
850
842
851
- for i := 0 ; i < num ; i ++ {
852
- data , err := mc .readPacket ()
853
- if err != nil {
854
- return err
855
- }
856
-
857
- switch {
858
- case data [0 ] == iERR :
859
- return mc .handleErrorPacket (data )
860
- case mc .flags & clientDeprecateEOF == 0 && isEOFPacket (data ):
861
- mc .status = readStatus (data [3 :])
862
- return nil
843
+ return mc .handleOkPacket (data )
863
844
}
864
845
}
865
- return nil
866
846
}
867
847
868
848
/******************************************************************************
@@ -1223,11 +1203,12 @@ func (rows *binaryRows) readRow(dest []driver.Value) error {
1223
1203
1224
1204
// packet indicator [1 byte]
1225
1205
if data [0 ] != iOK {
1226
- if isEOFPacket (data ) {
1206
+ if rows . mc . isEOFPacket (data ) {
1227
1207
if rows .mc .flags & clientDeprecateEOF == 0 {
1228
1208
rows .mc .status = readStatus (data [3 :])
1229
1209
} else {
1230
1210
if err := rows .mc .handleOkPacket (data ); err != nil {
1211
+ rows .mc = nil
1231
1212
return err
1232
1213
}
1233
1214
}
0 commit comments