MCPcopy
hub / github.com/go-sql-driver/mysql / readRow

Method readRow

packets.go:809–907  ·  packets.go::textRows.readRow

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)

Source from the content-addressed store, hash-verified

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
809func (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

Callers 2

NextMethod · 0.95
getSystemVarMethod · 0.45

Calls 7

readStatusFunction · 0.85
readLengthEncodedIntegerFunction · 0.85
readLengthEncodedStringFunction · 0.85
parseDateTimeFunction · 0.85
readPacketMethod · 0.80
HasNextResultSetMethod · 0.80
handleErrorPacketMethod · 0.80

Tested by

no test coverage detected