@@ -809,14 +809,18 @@ func (rows *textRows) readRow(dest []driver.Value) error {
809809 }
810810
811811 // 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 {
813816 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
815819 mc .status = readStatus (data [3 :])
816820 } else {
817821 // 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
820824 mc .status = readStatus (data [1 + n + m :])
821825 }
822826 rows .rs .done = true
@@ -892,8 +896,8 @@ func (rows *textRows) readRow(dest []driver.Value) error {
892896 return nil
893897}
894898
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 ++ {
897901 if _ , err := mc .readPacket (); err != nil {
898902 return err
899903 }
@@ -910,15 +914,15 @@ func (mc *mysqlConn) skipEof() error {
910914 return nil
911915}
912916
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 {
915919 return err
916920 }
917921 return mc .skipEof ()
918922}
919923
920924// Reads Packets until EOF-Packet or an Error appears.
921- func (mc * mysqlConn ) skipResultSetRows () error {
925+ func (mc * mysqlConn ) skipRows () error {
922926 for {
923927 data , err := mc .readPacket ()
924928 if err != nil {
@@ -929,14 +933,16 @@ func (mc *mysqlConn) skipResultSetRows() error {
929933 case iERR :
930934 return mc .handleErrorPacket (data )
931935 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 {
933939 if mc .capabilities & clientDeprecateEOF == 0 {
934940 // EOF packet
935941 mc .status = readStatus (data [3 :])
936942 } else {
937943 // 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
940946 mc .status = readStatus (data [1 + n + m :])
941947 }
942948 return nil
@@ -1238,7 +1244,7 @@ func (mc *okHandler) discardResults() error {
12381244 return err
12391245 }
12401246 // rows
1241- if err := mc .conn ().skipResultSetRows (); err != nil {
1247+ if err := mc .conn ().skipRows (); err != nil {
12421248 return err
12431249 }
12441250 }
0 commit comments