mirror of https://github.com/jackc/pgx.git
Refactor transcoder to use messageWriter
parent
abfbf42cc5
commit
41df8763c6
|
@ -339,7 +339,7 @@ func (c *Connection) sendPreparedQuery(ps *PreparedStatement, arguments ...inter
|
||||||
if transcoder == nil {
|
if transcoder == nil {
|
||||||
transcoder = defaultTranscoder
|
transcoder = defaultTranscoder
|
||||||
}
|
}
|
||||||
transcoder.EncodeTo(buf, arguments[i])
|
transcoder.EncodeTo(w, arguments[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
w.write(int16(len(ps.FieldDescriptions)))
|
w.write(int16(len(ps.FieldDescriptions)))
|
||||||
|
|
|
@ -24,6 +24,15 @@ func (w *messageWriter) writeStringNull(s string) {
|
||||||
w.err = w.buf.WriteByte(0)
|
w.err = w.buf.WriteByte(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *messageWriter) writeString(s string) {
|
||||||
|
if w.err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if _, w.err = w.buf.WriteString(s); w.err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (w *messageWriter) writeByte(b byte) {
|
func (w *messageWriter) writeByte(b byte) {
|
||||||
if w.err != nil {
|
if w.err != nil {
|
||||||
return
|
return
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package pgx
|
package pgx
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"encoding/binary"
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -11,7 +9,7 @@ import (
|
||||||
type valueTranscoder struct {
|
type valueTranscoder struct {
|
||||||
DecodeText func(*MessageReader, int32) interface{}
|
DecodeText func(*MessageReader, int32) interface{}
|
||||||
DecodeBinary func(*MessageReader, int32) interface{}
|
DecodeBinary func(*MessageReader, int32) interface{}
|
||||||
EncodeTo func(*bytes.Buffer, interface{})
|
EncodeTo func(*messageWriter, interface{})
|
||||||
EncodeFormat int16
|
EncodeFormat int16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,11 +85,11 @@ func decodeBoolFromText(mr *MessageReader, size int32) interface{} {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeBool(buf *bytes.Buffer, value interface{}) {
|
func encodeBool(w *messageWriter, value interface{}) {
|
||||||
v := value.(bool)
|
v := value.(bool)
|
||||||
s := strconv.FormatBool(v)
|
s := strconv.FormatBool(v)
|
||||||
binary.Write(buf, binary.BigEndian, int32(len(s)))
|
w.write(int32(len(s)))
|
||||||
buf.WriteString(s)
|
w.writeString(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeInt8FromText(mr *MessageReader, size int32) interface{} {
|
func decodeInt8FromText(mr *MessageReader, size int32) interface{} {
|
||||||
|
@ -110,10 +108,10 @@ func decodeInt8FromBinary(mr *MessageReader, size int32) interface{} {
|
||||||
return mr.ReadInt64()
|
return mr.ReadInt64()
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeInt8(buf *bytes.Buffer, value interface{}) {
|
func encodeInt8(w *messageWriter, value interface{}) {
|
||||||
v := value.(int64)
|
v := value.(int64)
|
||||||
binary.Write(buf, binary.BigEndian, int32(8))
|
w.write(int32(8))
|
||||||
binary.Write(buf, binary.BigEndian, v)
|
w.write(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeInt2FromText(mr *MessageReader, size int32) interface{} {
|
func decodeInt2FromText(mr *MessageReader, size int32) interface{} {
|
||||||
|
@ -132,10 +130,10 @@ func decodeInt2FromBinary(mr *MessageReader, size int32) interface{} {
|
||||||
return mr.ReadInt16()
|
return mr.ReadInt16()
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeInt2(buf *bytes.Buffer, value interface{}) {
|
func encodeInt2(w *messageWriter, value interface{}) {
|
||||||
v := value.(int16)
|
v := value.(int16)
|
||||||
binary.Write(buf, binary.BigEndian, int32(2))
|
w.write(int32(2))
|
||||||
binary.Write(buf, binary.BigEndian, v)
|
w.write(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeInt4FromText(mr *MessageReader, size int32) interface{} {
|
func decodeInt4FromText(mr *MessageReader, size int32) interface{} {
|
||||||
|
@ -154,10 +152,10 @@ func decodeInt4FromBinary(mr *MessageReader, size int32) interface{} {
|
||||||
return mr.ReadInt32()
|
return mr.ReadInt32()
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeInt4(buf *bytes.Buffer, value interface{}) {
|
func encodeInt4(w *messageWriter, value interface{}) {
|
||||||
v := value.(int32)
|
v := value.(int32)
|
||||||
binary.Write(buf, binary.BigEndian, int32(4))
|
w.write(int32(4))
|
||||||
binary.Write(buf, binary.BigEndian, v)
|
w.write(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeFloat4FromText(mr *MessageReader, size int32) interface{} {
|
func decodeFloat4FromText(mr *MessageReader, size int32) interface{} {
|
||||||
|
@ -169,11 +167,11 @@ func decodeFloat4FromText(mr *MessageReader, size int32) interface{} {
|
||||||
return float32(n)
|
return float32(n)
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeFloat4(buf *bytes.Buffer, value interface{}) {
|
func encodeFloat4(w *messageWriter, value interface{}) {
|
||||||
v := value.(float32)
|
v := value.(float32)
|
||||||
s := strconv.FormatFloat(float64(v), 'e', -1, 32)
|
s := strconv.FormatFloat(float64(v), 'e', -1, 32)
|
||||||
binary.Write(buf, binary.BigEndian, int32(len(s)))
|
w.write(int32(len(s)))
|
||||||
buf.WriteString(s)
|
w.writeString(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeFloat8FromText(mr *MessageReader, size int32) interface{} {
|
func decodeFloat8FromText(mr *MessageReader, size int32) interface{} {
|
||||||
|
@ -185,21 +183,21 @@ func decodeFloat8FromText(mr *MessageReader, size int32) interface{} {
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeFloat8(buf *bytes.Buffer, value interface{}) {
|
func encodeFloat8(w *messageWriter, value interface{}) {
|
||||||
v := value.(float64)
|
v := value.(float64)
|
||||||
s := strconv.FormatFloat(float64(v), 'e', -1, 64)
|
s := strconv.FormatFloat(float64(v), 'e', -1, 64)
|
||||||
binary.Write(buf, binary.BigEndian, int32(len(s)))
|
w.write(int32(len(s)))
|
||||||
buf.WriteString(s)
|
w.writeString(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeTextFromText(mr *MessageReader, size int32) interface{} {
|
func decodeTextFromText(mr *MessageReader, size int32) interface{} {
|
||||||
return mr.ReadByteString(size)
|
return mr.ReadByteString(size)
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeText(buf *bytes.Buffer, value interface{}) {
|
func encodeText(w *messageWriter, value interface{}) {
|
||||||
s := value.(string)
|
s := value.(string)
|
||||||
binary.Write(buf, binary.BigEndian, int32(len(s)))
|
w.write(int32(len(s)))
|
||||||
buf.WriteString(s)
|
w.writeString(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeByteaFromText(mr *MessageReader, size int32) interface{} {
|
func decodeByteaFromText(mr *MessageReader, size int32) interface{} {
|
||||||
|
@ -211,8 +209,8 @@ func decodeByteaFromText(mr *MessageReader, size int32) interface{} {
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeBytea(buf *bytes.Buffer, value interface{}) {
|
func encodeBytea(w *messageWriter, value interface{}) {
|
||||||
b := value.([]byte)
|
b := value.([]byte)
|
||||||
binary.Write(buf, binary.BigEndian, int32(len(b)))
|
w.write(int32(len(b)))
|
||||||
buf.Write(b)
|
w.write(b)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue