2
0

Refactor pgio and types to append buffers

This commit is contained in:
Jack Christensen
2017-05-02 20:38:26 -05:00
parent ee001a7cae
commit 6e64a0c867
78 changed files with 1551 additions and 2627 deletions
+8 -11
View File
@@ -4,7 +4,6 @@ import (
"database/sql/driver"
"errors"
"fmt"
"io"
"github.com/jackc/pgx/pgtype"
uuid "github.com/satori/go.uuid"
@@ -117,28 +116,26 @@ func (dst *Uuid) DecodeBinary(ci *pgtype.ConnInfo, src []byte) error {
return nil
}
func (src *Uuid) EncodeText(ci *pgtype.ConnInfo, w io.Writer) (bool, error) {
func (src *Uuid) EncodeText(ci *pgtype.ConnInfo, buf []byte) ([]byte, error) {
switch src.Status {
case pgtype.Null:
return true, nil
return nil, nil
case pgtype.Undefined:
return false, errUndefined
return nil, errUndefined
}
_, err := io.WriteString(w, src.UUID.String())
return false, err
return append(buf, src.UUID.String()...), nil
}
func (src *Uuid) EncodeBinary(ci *pgtype.ConnInfo, w io.Writer) (bool, error) {
func (src *Uuid) EncodeBinary(ci *pgtype.ConnInfo, buf []byte) ([]byte, error) {
switch src.Status {
case pgtype.Null:
return true, nil
return nil, nil
case pgtype.Undefined:
return false, errUndefined
return nil, errUndefined
}
_, err := w.Write(src.UUID[:])
return false, err
return append(buf, src.UUID[:]...), nil
}
// Scan implements the database/sql Scanner interface.
+15 -18
View File
@@ -1,11 +1,9 @@
package numeric
import (
"bytes"
"database/sql/driver"
"errors"
"fmt"
"io"
"strconv"
"github.com/jackc/pgx/pgtype"
@@ -75,12 +73,12 @@ func (dst *Numeric) Set(src interface{}) error {
return fmt.Errorf("cannot convert %v to Numeric", value)
}
buf := &bytes.Buffer{}
if _, err := num.EncodeText(nil, buf); err != nil {
buf, err := num.EncodeText(nil, nil)
if err != nil {
return fmt.Errorf("cannot convert %v to Numeric", value)
}
dec, err := decimal.NewFromString(buf.String())
dec, err := decimal.NewFromString(string(buf))
if err != nil {
return fmt.Errorf("cannot convert %v to Numeric", value)
}
@@ -243,12 +241,12 @@ func (dst *Numeric) DecodeBinary(ci *pgtype.ConnInfo, src []byte) error {
return err
}
buf := &bytes.Buffer{}
if _, err := num.EncodeText(ci, buf); err != nil {
buf, err := num.EncodeText(ci, nil)
if err != nil {
return err
}
dec, err := decimal.NewFromString(buf.String())
dec, err := decimal.NewFromString(string(buf))
if err != nil {
return err
}
@@ -258,33 +256,32 @@ func (dst *Numeric) DecodeBinary(ci *pgtype.ConnInfo, src []byte) error {
return nil
}
func (src *Numeric) EncodeText(ci *pgtype.ConnInfo, w io.Writer) (bool, error) {
func (src *Numeric) EncodeText(ci *pgtype.ConnInfo, buf []byte) ([]byte, error) {
switch src.Status {
case pgtype.Null:
return true, nil
return nil, nil
case pgtype.Undefined:
return false, errUndefined
return nil, errUndefined
}
_, err := io.WriteString(w, src.Decimal.String())
return false, err
return append(buf, src.Decimal.String()...), nil
}
func (src *Numeric) EncodeBinary(ci *pgtype.ConnInfo, w io.Writer) (bool, error) {
func (src *Numeric) EncodeBinary(ci *pgtype.ConnInfo, buf []byte) ([]byte, error) {
switch src.Status {
case pgtype.Null:
return true, nil
return nil, nil
case pgtype.Undefined:
return false, errUndefined
return nil, errUndefined
}
// For now at least, implement this in terms of pgtype.Numeric
num := &pgtype.Numeric{}
if err := num.DecodeText(ci, []byte(src.Decimal.String())); err != nil {
return false, err
return nil, err
}
return num.EncodeBinary(ci, w)
return num.EncodeBinary(ci, buf)
}
// Scan implements the database/sql Scanner interface.