diff --git a/conn.go b/conn.go index 38e9bc99..1ca60cdc 100644 --- a/conn.go +++ b/conn.go @@ -64,6 +64,7 @@ type Conn struct { alive bool causeOfDeath error logger log.Logger + drr DataRowReader } type PreparedStatement struct { @@ -328,10 +329,16 @@ func (c *Conn) selectFunc(sql string, onDataRow func(*DataRowReader) error, argu fields = c.rxRowDescription(r) case dataRow: if softErr == nil { - var drr *DataRowReader - drr, softErr = newDataRowReader(r, fields) + c.drr.mr = r + c.drr.FieldDescriptions = fields + c.drr.currentFieldIdx = 0 + + fieldCount := int(r.ReadInt16()) + if fieldCount != len(fields) { + softErr = ProtocolError(fmt.Sprintf("Row description field count (%v) and data row field count (%v) do not match", len(fields), fieldCount)) + } if softErr == nil { - softErr = onDataRow(drr) + softErr = onDataRow(&c.drr) } } case commandComplete: diff --git a/data_row_reader.go b/data_row_reader.go index c5f8d19d..a7c25504 100644 --- a/data_row_reader.go +++ b/data_row_reader.go @@ -11,19 +11,6 @@ type DataRowReader struct { currentFieldIdx int } -func newDataRowReader(mr *MessageReader, fields []FieldDescription) (r *DataRowReader, err error) { - r = new(DataRowReader) - r.mr = mr - r.FieldDescriptions = fields - - fieldCount := int(mr.ReadInt16()) - if fieldCount != len(fields) { - return nil, ProtocolError(fmt.Sprintf("Row description field count (%v) and data row field count (%v) do not match", len(fields), fieldCount)) - } - - return -} - // ReadValue returns the next value from the current row. func (r *DataRowReader) ReadValue() interface{} { fieldDescription := r.FieldDescriptions[r.currentFieldIdx]