Decode(Text|Binary) now accepts []byte instead of io.Reader
This commit is contained in:
+25
-27
@@ -2,6 +2,7 @@ package pgtype
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
@@ -104,29 +105,17 @@ func (src *Int2Array) AssignTo(dst interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dst *Int2Array) DecodeText(r io.Reader) error {
|
||||
size, err := pgio.ReadInt32(r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if size == -1 {
|
||||
func (dst *Int2Array) DecodeText(src []byte) error {
|
||||
if src == nil {
|
||||
*dst = Int2Array{Status: Null}
|
||||
return nil
|
||||
}
|
||||
|
||||
buf := make([]byte, int(size))
|
||||
_, err = io.ReadFull(r, buf)
|
||||
uta, err := ParseUntypedTextArray(string(src))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
uta, err := ParseUntypedTextArray(string(buf))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
textElementReader := NewTextElementReader(r)
|
||||
var elements []Int2
|
||||
|
||||
if len(uta.Elements) > 0 {
|
||||
@@ -134,8 +123,11 @@ func (dst *Int2Array) DecodeText(r io.Reader) error {
|
||||
|
||||
for i, s := range uta.Elements {
|
||||
var elem Int2
|
||||
textElementReader.Reset(s)
|
||||
err = elem.DecodeText(textElementReader)
|
||||
var elemSrc []byte
|
||||
if s != "NULL" {
|
||||
elemSrc = []byte(s)
|
||||
}
|
||||
err = elem.DecodeText(elemSrc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -149,19 +141,14 @@ func (dst *Int2Array) DecodeText(r io.Reader) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dst *Int2Array) DecodeBinary(r io.Reader) error {
|
||||
size, err := pgio.ReadInt32(r)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if size == -1 {
|
||||
func (dst *Int2Array) DecodeBinary(src []byte) error {
|
||||
if src == nil {
|
||||
*dst = Int2Array{Status: Null}
|
||||
return nil
|
||||
}
|
||||
|
||||
var arrayHeader ArrayHeader
|
||||
err = arrayHeader.DecodeBinary(r)
|
||||
rp, err := arrayHeader.DecodeBinary(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -179,7 +166,14 @@ func (dst *Int2Array) DecodeBinary(r io.Reader) error {
|
||||
elements := make([]Int2, elementCount)
|
||||
|
||||
for i := range elements {
|
||||
err = elements[i].DecodeBinary(r)
|
||||
elemLen := int(int32(binary.BigEndian.Uint32(src[rp:])))
|
||||
rp += 4
|
||||
var elemSrc []byte
|
||||
if elemLen >= 0 {
|
||||
elemSrc = src[rp : rp+elemLen]
|
||||
rp += elemLen
|
||||
}
|
||||
err = elements[i].DecodeBinary(elemSrc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -267,6 +261,10 @@ func (src *Int2Array) EncodeText(w io.Writer) error {
|
||||
}
|
||||
|
||||
func (src *Int2Array) EncodeBinary(w io.Writer) error {
|
||||
return src.encodeBinary(w, Int2OID)
|
||||
}
|
||||
|
||||
func (src *Int2Array) encodeBinary(w io.Writer, elementOID int32) error {
|
||||
if done, err := encodeNotPresent(w, src.Status); done {
|
||||
return err
|
||||
}
|
||||
@@ -287,7 +285,7 @@ func (src *Int2Array) EncodeBinary(w io.Writer) error {
|
||||
}
|
||||
}
|
||||
|
||||
arrayHeader.ElementOID = Int2OID
|
||||
arrayHeader.ElementOID = elementOID
|
||||
arrayHeader.Dimensions = src.Dimensions
|
||||
|
||||
// TODO - consider how to avoid having to buffer array before writing length -
|
||||
|
||||
Reference in New Issue
Block a user