From 84dd626bcc04bb83770ce050af1b57f5e95b7a25 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Thu, 26 Jun 2014 18:12:30 -0500 Subject: [PATCH] Make MessageReader a type of bytes.Buffer --- conn.go | 4 +-- message_reader.go | 84 +++++------------------------------------------ 2 files changed, 10 insertions(+), 78 deletions(-) diff --git a/conn.go b/conn.go index cda028aa..38e9bc99 100644 --- a/conn.go +++ b/conn.go @@ -497,7 +497,7 @@ func (c *Conn) SelectValueTo(w io.Writer, sql string, arguments ...interface{}) return err } - r := newMessageReader(body) + r := (*MessageReader)(body) switch t { case readyForQuery: c.rxReadyForQuery(r) @@ -950,7 +950,7 @@ func (c *Conn) rxMsg() (t byte, r *MessageReader, err error) { return } - r = newMessageReader(body) + r = (*MessageReader)(body) return } diff --git a/message_reader.go b/message_reader.go index eabb03d2..938dbd17 100644 --- a/message_reader.go +++ b/message_reader.go @@ -3,113 +3,45 @@ package pgx import ( "bytes" "encoding/binary" - "fmt" ) // MessageReader is a helper that reads values from a PostgreSQL message. -// To avoid verbose error handling it internally records errors and no-ops -// any calls that occur after an error. At the end of a sequence of reads -// the Err field should be checked to see if any errors occurred. -type MessageReader struct { - buf *bytes.Buffer - Err error -} - -func newMessageReader(buf *bytes.Buffer) *MessageReader { - return &MessageReader{buf: buf} -} +type MessageReader bytes.Buffer func (r *MessageReader) ReadByte() (b byte) { - if r.Err != nil { - return - } - - b, r.Err = r.buf.ReadByte() + b, _ = (*bytes.Buffer)(r).ReadByte() return } func (r *MessageReader) ReadInt16() (n int16) { - if r.Err != nil { - return - } - - size := 2 - b := r.buf.Next(size) - if len(b) != size { - r.Err = fmt.Errorf("Unable to read %d bytes, only read %d", size, len(b)) - } - + b := (*bytes.Buffer)(r).Next(2) return int16(binary.BigEndian.Uint16(b)) } func (r *MessageReader) ReadInt32() (n int32) { - if r.Err != nil { - return - } - - size := 4 - b := r.buf.Next(size) - if len(b) != size { - r.Err = fmt.Errorf("Unable to read %d bytes, only read %d", size, len(b)) - } - + b := (*bytes.Buffer)(r).Next(4) return int32(binary.BigEndian.Uint32(b)) } func (r *MessageReader) ReadInt64() (n int64) { - if r.Err != nil { - return - } - - size := 8 - b := r.buf.Next(size) - if len(b) != size { - r.Err = fmt.Errorf("Unable to read %d bytes, only read %d", size, len(b)) - } - + b := (*bytes.Buffer)(r).Next(8) return int64(binary.BigEndian.Uint64(b)) } func (r *MessageReader) ReadOid() (oid Oid) { - if r.Err != nil { - return - } - - size := 4 - b := r.buf.Next(size) - if len(b) != size { - r.Err = fmt.Errorf("Unable to read %d bytes, only read %d", size, len(b)) - } - + b := (*bytes.Buffer)(r).Next(4) return Oid(binary.BigEndian.Uint32(b)) } // ReadString reads a null terminated string func (r *MessageReader) ReadCString() (s string) { - if r.Err != nil { - return - } - - var b []byte - b, r.Err = r.buf.ReadBytes(0) - if r.Err != nil { - return - } - + b, _ := (*bytes.Buffer)(r).ReadBytes(0) return string(b[:len(b)-1]) } // ReadString reads count bytes and returns as string func (r *MessageReader) ReadString(count int32) (s string) { - if r.Err != nil { - return - } - size := int(count) - b := r.buf.Next(size) - if len(b) != size { - r.Err = fmt.Errorf("Unable to read %d bytes, only read %d", size, len(b)) - } - + b := (*bytes.Buffer)(r).Next(size) return string(b) }