2
0

Added bytea support to prepared statements

fixes #9, fixes #10
This commit is contained in:
Jack Christensen
2013-07-01 17:12:07 -05:00
parent 52c26ba14c
commit a98db507b7
2 changed files with 52 additions and 3 deletions
+22
View File
@@ -3,6 +3,7 @@ package pgx
import (
"bytes"
"encoding/binary"
"encoding/hex"
"fmt"
"strconv"
)
@@ -25,6 +26,12 @@ func init() {
DecodeText: decodeBoolFromText,
EncodeTo: encodeBool}
// bytea
valueTranscoders[oid(17)] = &valueTranscoder{
DecodeText: decodeByteaFromText,
EncodeTo: encodeBytea,
EncodeFormat: 1}
// int8
valueTranscoders[oid(20)] = &valueTranscoder{
DecodeText: decodeInt8FromText,
@@ -170,3 +177,18 @@ func encodeText(buf *bytes.Buffer, value interface{}) {
binary.Write(buf, binary.BigEndian, int32(len(s)))
buf.WriteString(s)
}
func decodeByteaFromText(mr *MessageReader, size int32) interface{} {
s := mr.ReadByteString(size)
b, err := hex.DecodeString(s[2:])
if err != nil {
panic("Can't decode byte array")
}
return b
}
func encodeBytea(buf *bytes.Buffer, value interface{}) {
b := value.([]byte)
binary.Write(buf, binary.BigEndian, int32(len(b)))
buf.Write(b)
}