@@ -809,14 +809,18 @@ func (rows *textRows) readRow(dest []driver.Value) error {
809
809
}
810
810
811
811
// EOF Packet
812
- if data [0 ] == iEOF && len (data ) < 0xffffff {
812
+ // text row packets may starts with LengthEncodedString.
813
+ // In such case, 0xFE can mean string larger than 0xffffff.
814
+ // https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_dt_integers.html#sect_protocol_basic_dt_int_le
815
+ if data [0 ] == iEOF && len (data ) <= 0xffffff {
813
816
if mc .capabilities & clientDeprecateEOF == 0 {
814
- // EOF packet
817
+ // Deprecated EOF packet
818
+ // https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_eof_packet.html
815
819
mc .status = readStatus (data [3 :])
816
820
} else {
817
821
// Ok Packet with an 0xFE header
818
- _ , _ , n := readLengthEncodedInteger (data [1 :])
819
- _ , _ , m := readLengthEncodedInteger (data [1 + n :])
822
+ _ , _ , n := readLengthEncodedInteger (data [1 :]) // affected_rows
823
+ _ , _ , m := readLengthEncodedInteger (data [1 + n :]) // last_insert_id
820
824
mc .status = readStatus (data [1 + n + m :])
821
825
}
822
826
rows .rs .done = true
@@ -892,8 +896,8 @@ func (rows *textRows) readRow(dest []driver.Value) error {
892
896
return nil
893
897
}
894
898
895
- func (mc * mysqlConn ) skipPackets (number int ) error {
896
- for i := 0 ; i < number ; i ++ {
899
+ func (mc * mysqlConn ) skipPackets (n int ) error {
900
+ for i := 0 ; i < n ; i ++ {
897
901
if _ , err := mc .readPacket (); err != nil {
898
902
return err
899
903
}
@@ -910,15 +914,15 @@ func (mc *mysqlConn) skipEof() error {
910
914
return nil
911
915
}
912
916
913
- func (mc * mysqlConn ) skipColumns (resLen int ) error {
914
- if err := mc .skipPackets (resLen ); err != nil {
917
+ func (mc * mysqlConn ) skipColumns (n int ) error {
918
+ if err := mc .skipPackets (n ); err != nil {
915
919
return err
916
920
}
917
921
return mc .skipEof ()
918
922
}
919
923
920
924
// Reads Packets until EOF-Packet or an Error appears.
921
- func (mc * mysqlConn ) skipResultSetRows () error {
925
+ func (mc * mysqlConn ) skipRows () error {
922
926
for {
923
927
data , err := mc .readPacket ()
924
928
if err != nil {
@@ -929,14 +933,16 @@ func (mc *mysqlConn) skipResultSetRows() error {
929
933
case iERR :
930
934
return mc .handleErrorPacket (data )
931
935
case iEOF :
932
- if len (data ) < 0xffffff {
936
+ // text row packets may starts with LengthEncodedString.
937
+ // In such case, 0xFE can mean string larger than 0xffffff.
938
+ if len (data ) <= 0xffffff {
933
939
if mc .capabilities & clientDeprecateEOF == 0 {
934
940
// EOF packet
935
941
mc .status = readStatus (data [3 :])
936
942
} else {
937
943
// OK packet with an 0xFE header
938
- _ , _ , n := readLengthEncodedInteger (data [1 :])
939
- _ , _ , m := readLengthEncodedInteger (data [1 + n :])
944
+ _ , _ , n := readLengthEncodedInteger (data [1 :]) // affected_rows
945
+ _ , _ , m := readLengthEncodedInteger (data [1 + n :]) // last_insert_id
940
946
mc .status = readStatus (data [1 + n + m :])
941
947
}
942
948
return nil
@@ -1238,7 +1244,7 @@ func (mc *okHandler) discardResults() error {
1238
1244
return err
1239
1245
}
1240
1246
// rows
1241
- if err := mc .conn ().skipResultSetRows (); err != nil {
1247
+ if err := mc .conn ().skipRows (); err != nil {
1242
1248
return err
1243
1249
}
1244
1250
}
0 commit comments