Read Packets as Field Packets until EOF-Packet or an Error appears https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_com_query_response_text_resultset_row.html
(dest []driver.Value)
| 807 | // Read Packets as Field Packets until EOF-Packet or an Error appears |
| 808 | // https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_com_query_response_text_resultset_row.html |
| 809 | func (rows *textRows) readRow(dest []driver.Value) error { |
| 810 | mc := rows.mc |
| 811 | |
| 812 | if rows.rs.done { |
| 813 | return io.EOF |
| 814 | } |
| 815 | |
| 816 | data, err := mc.readPacket() |
| 817 | if err != nil { |
| 818 | return err |
| 819 | } |
| 820 | |
| 821 | // EOF Packet |
| 822 | // text row packets may starts with LengthEncodedString. |
| 823 | // In such case, 0xFE can mean string larger than 0xffffff. |
| 824 | // https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_dt_integers.html#sect_protocol_basic_dt_int_le |
| 825 | if data[0] == iEOF && len(data) <= 0xffffff { |
| 826 | if mc.capabilities&clientDeprecateEOF == 0 { |
| 827 | // Deprecated EOF packet |
| 828 | // https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_eof_packet.html |
| 829 | mc.status = readStatus(data[3:]) |
| 830 | } else { |
| 831 | // Ok Packet with an 0xFE header |
| 832 | _, _, n := readLengthEncodedInteger(data[1:]) // affected_rows |
| 833 | _, _, m := readLengthEncodedInteger(data[1+n:]) // last_insert_id |
| 834 | mc.status = readStatus(data[1+n+m:]) |
| 835 | } |
| 836 | rows.rs.done = true |
| 837 | if !rows.HasNextResultSet() { |
| 838 | rows.mc = nil |
| 839 | } |
| 840 | return io.EOF |
| 841 | } |
| 842 | if data[0] == iERR { |
| 843 | rows.mc = nil |
| 844 | return mc.handleErrorPacket(data) |
| 845 | } |
| 846 | |
| 847 | // RowSet Packet |
| 848 | var ( |
| 849 | n int |
| 850 | isNull bool |
| 851 | pos int = 0 |
| 852 | ) |
| 853 | |
| 854 | for i := range dest { |
| 855 | // Read bytes and convert to string |
| 856 | var buf []byte |
| 857 | buf, isNull, n, err = readLengthEncodedString(data[pos:]) |
| 858 | pos += n |
| 859 | |
| 860 | if err != nil { |
| 861 | return err |
| 862 | } |
| 863 | |
| 864 | if isNull { |
| 865 | dest[i] = nil |
| 866 | continue |
no test coverage detected