Refactor sendPreparedQuery to messageWriter

pgx-vs-pq
Jack Christensen 2013-07-09 19:07:07 -04:00
parent 07b6385f1d
commit abfbf42cc5
1 changed files with 22 additions and 14 deletions

View File

@ -236,6 +236,9 @@ func (c *Connection) Prepare(name, sql string) (err error) {
w = newMessageWriter(buf) w = newMessageWriter(buf)
w.writeByte('S') w.writeByte('S')
w.writeStringNull(name) w.writeStringNull(name)
if w.err != nil {
return w.err
}
err = c.txMsg('D', buf) err = c.txMsg('D', buf)
if err != nil { if err != nil {
@ -318,21 +321,19 @@ func (c *Connection) sendPreparedQuery(ps *PreparedStatement, arguments ...inter
// bind // bind
buf := c.getBuf() buf := c.getBuf()
buf.WriteString("") w := newMessageWriter(buf)
buf.WriteByte(0) w.writeStringNull("")
buf.WriteString(ps.Name) w.writeStringNull(ps.Name)
buf.WriteByte(0) w.write(int16(len(ps.ParameterOids)))
binary.Write(buf, binary.BigEndian, int16(len(ps.ParameterOids)))
for _, oid := range ps.ParameterOids { for _, oid := range ps.ParameterOids {
transcoder := valueTranscoders[oid] transcoder := valueTranscoders[oid]
if transcoder == nil { if transcoder == nil {
transcoder = defaultTranscoder transcoder = defaultTranscoder
} }
binary.Write(buf, binary.BigEndian, transcoder.EncodeFormat) w.write(transcoder.EncodeFormat)
} }
binary.Write(buf, binary.BigEndian, int16(len(arguments))) w.write(int16(len(arguments)))
for i, oid := range ps.ParameterOids { for i, oid := range ps.ParameterOids {
transcoder := valueTranscoders[oid] transcoder := valueTranscoders[oid]
if transcoder == nil { if transcoder == nil {
@ -341,15 +342,18 @@ func (c *Connection) sendPreparedQuery(ps *PreparedStatement, arguments ...inter
transcoder.EncodeTo(buf, arguments[i]) transcoder.EncodeTo(buf, arguments[i])
} }
binary.Write(buf, binary.BigEndian, int16(len(ps.FieldDescriptions))) w.write(int16(len(ps.FieldDescriptions)))
for _, fd := range ps.FieldDescriptions { for _, fd := range ps.FieldDescriptions {
transcoder := valueTranscoders[fd.DataType] transcoder := valueTranscoders[fd.DataType]
if transcoder != nil && transcoder.DecodeBinary != nil { if transcoder != nil && transcoder.DecodeBinary != nil {
binary.Write(buf, binary.BigEndian, int16(1)) w.write(int16(1))
} else { } else {
binary.Write(buf, binary.BigEndian, int16(0)) w.write(int16(0))
} }
} }
if w.err != nil {
return w.err
}
err = c.txMsg('B', buf) err = c.txMsg('B', buf)
if err != nil { if err != nil {
@ -358,9 +362,13 @@ func (c *Connection) sendPreparedQuery(ps *PreparedStatement, arguments ...inter
// execute // execute
buf = c.getBuf() buf = c.getBuf()
buf.WriteString("") w = newMessageWriter(buf)
buf.WriteByte(0) w.writeStringNull("")
binary.Write(buf, binary.BigEndian, int32(0)) w.write(int32(0))
if w.err != nil {
return w.err
}
err = c.txMsg('E', buf) err = c.txMsg('E', buf)
if err != nil { if err != nil {