Add pgtype GenericText and GenericBinary

Rows.Values uses this for unknown types.
v3-numeric-wip
Jack Christensen 2017-03-11 20:28:14 -06:00
parent aac8fd66f2
commit 3391818847
3 changed files with 60 additions and 7 deletions

29
pgtype/generic_binary.go Normal file
View File

@ -0,0 +1,29 @@
package pgtype
import (
"io"
)
// GenericBinary is a placeholder for binary format values that no other type exists
// to handle.
type GenericBinary Bytea
func (dst *GenericBinary) Set(src interface{}) error {
return (*Bytea)(dst).Set(src)
}
func (dst *GenericBinary) Get() interface{} {
return (*Bytea)(dst).Get()
}
func (src *GenericBinary) AssignTo(dst interface{}) error {
return (*Bytea)(src).AssignTo(dst)
}
func (dst *GenericBinary) DecodeBinary(src []byte) error {
return (*Bytea)(dst).DecodeBinary(src)
}
func (src GenericBinary) EncodeBinary(w io.Writer) (bool, error) {
return (Bytea)(src).EncodeBinary(w)
}

29
pgtype/generic_text.go Normal file
View File

@ -0,0 +1,29 @@
package pgtype
import (
"io"
)
// GenericText is a placeholder for text format values that no other type exists
// to handle.
type GenericText Text
func (dst *GenericText) Set(src interface{}) error {
return (*Text)(dst).Set(src)
}
func (dst *GenericText) Get() interface{} {
return (*Text)(dst).Get()
}
func (src *GenericText) AssignTo(dst interface{}) error {
return (*Text)(src).AssignTo(dst)
}
func (dst *GenericText) DecodeText(src []byte) error {
return (*Text)(dst).DecodeText(src)
}
func (src GenericText) EncodeText(w io.Writer) (bool, error) {
return (Text)(src).EncodeText(w)
}

View File

@ -325,16 +325,11 @@ func (rows *Rows) Values() ([]interface{}, error) {
continue
}
pgVal := rows.conn.oidPgtypeValues[vr.Type().DataType].(pgtype.TextDecoder)
if pgVal == nil {
panic("need GenericText or GenericBinary")
}
switch vr.Type().FormatCode {
case TextFormatCode:
decoder := rows.conn.oidPgtypeValues[vr.Type().DataType].(pgtype.TextDecoder)
if decoder == nil {
panic("need GenericText")
decoder = &pgtype.GenericText{}
}
err := decoder.DecodeText(vr.bytes())
if err != nil {
@ -344,7 +339,7 @@ func (rows *Rows) Values() ([]interface{}, error) {
case BinaryFormatCode:
decoder := rows.conn.oidPgtypeValues[vr.Type().DataType].(pgtype.BinaryDecoder)
if decoder == nil {
panic("need GenericBinary")
decoder = &pgtype.GenericBinary{}
}
err := decoder.DecodeBinary(vr.bytes())
if err != nil {