From 07b6385f1de836b6c84b6e5f35e06e5e9dbc0b1b Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Tue, 9 Jul 2013 17:22:30 -0500 Subject: [PATCH] Started refactor to messageWriter --- connection.go | 41 +++++++++-------------------------------- message_writer.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 32 deletions(-) create mode 100644 message_writer.go diff --git a/connection.go b/connection.go index 82477838..8efd2d54 100644 --- a/connection.go +++ b/connection.go @@ -219,27 +219,13 @@ func (c *Connection) SelectValues(sql string, arguments ...interface{}) (values func (c *Connection) Prepare(name, sql string) (err error) { // parse buf := c.getBuf() - _, err = buf.WriteString(name) - if err != nil { - return + w := newMessageWriter(buf) + w.writeStringNull(name) + w.writeStringNull(sql) + w.write(int16(0)) + if w.err != nil { + return w.err } - err = buf.WriteByte(0) - if err != nil { - return - } - _, err = buf.WriteString(sql) - if err != nil { - return - } - err = buf.WriteByte(0) - if err != nil { - return - } - err = binary.Write(buf, binary.BigEndian, int16(0)) - if err != nil { - return - } - err = c.txMsg('P', buf) if err != nil { return @@ -247,18 +233,9 @@ func (c *Connection) Prepare(name, sql string) (err error) { // describe buf = c.getBuf() - err = buf.WriteByte('S') - if err != nil { - return - } - _, err = buf.WriteString(name) - if err != nil { - return - } - err = buf.WriteByte(0) - if err != nil { - return - } + w = newMessageWriter(buf) + w.writeByte('S') + w.writeStringNull(name) err = c.txMsg('D', buf) if err != nil { diff --git a/message_writer.go b/message_writer.go new file mode 100644 index 00000000..9a766882 --- /dev/null +++ b/message_writer.go @@ -0,0 +1,41 @@ +package pgx + +import ( + "bytes" + "encoding/binary" +) + +type messageWriter struct { + buf *bytes.Buffer + err error +} + +func newMessageWriter(buf *bytes.Buffer) *messageWriter { + return &messageWriter{buf: buf} +} + +func (w *messageWriter) writeStringNull(s string) { + if w.err != nil { + return + } + if _, w.err = w.buf.WriteString(s); w.err != nil { + return + } + w.err = w.buf.WriteByte(0) +} + +func (w *messageWriter) writeByte(b byte) { + if w.err != nil { + return + } + + w.err = w.buf.WriteByte(b) +} + +func (w *messageWriter) write(data interface{}) { + if w.err != nil { + return + } + + w.err = binary.Write(w.buf, binary.BigEndian, data) +}