mirror of https://github.com/jackc/pgx.git
Expand pgtype.Value interface
- Include and rename ConvertFrom to Set - Add Get - Include AssignTov3-numeric-wip
parent
542eac08c6
commit
57494a6a0f
|
@ -23,7 +23,7 @@ type Aclitem struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Aclitem) ConvertFrom(src interface{}) error {
|
||||
func (dst *Aclitem) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Aclitem:
|
||||
*dst = value
|
||||
|
@ -37,7 +37,7 @@ func (dst *Aclitem) ConvertFrom(src interface{}) error {
|
|||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingStringType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Aclitem", value)
|
||||
}
|
||||
|
@ -45,6 +45,17 @@ func (dst *Aclitem) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Aclitem) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.String
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Aclitem) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *string:
|
||||
|
|
|
@ -14,7 +14,7 @@ type AclitemArray struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *AclitemArray) ConvertFrom(src interface{}) error {
|
||||
func (dst *AclitemArray) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case AclitemArray:
|
||||
*dst = value
|
||||
|
@ -27,7 +27,7 @@ func (dst *AclitemArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Aclitem, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ func (dst *AclitemArray) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Aclitem", value)
|
||||
}
|
||||
|
@ -48,6 +48,17 @@ func (dst *AclitemArray) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *AclitemArray) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *AclitemArray) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestAclitemArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestAclitemArrayConvertFrom(t *testing.T) {
|
||||
func TestAclitemArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.AclitemArray
|
||||
|
@ -71,7 +71,7 @@ func TestAclitemArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.AclitemArray
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ func TestAclitemTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestAclitemConvertFrom(t *testing.T) {
|
||||
func TestAclitemSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Aclitem
|
||||
|
@ -27,7 +27,7 @@ func TestAclitemConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var d pgtype.Aclitem
|
||||
err := d.ConvertFrom(tt.source)
|
||||
err := d.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ type Bool struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Bool) ConvertFrom(src interface{}) error {
|
||||
func (dst *Bool) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Bool:
|
||||
*dst = value
|
||||
|
@ -26,7 +26,7 @@ func (dst *Bool) ConvertFrom(src interface{}) error {
|
|||
*dst = Bool{Bool: bb, Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingBoolType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Bool", value)
|
||||
}
|
||||
|
@ -34,6 +34,17 @@ func (dst *Bool) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Bool) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Bool
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Bool) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *bool:
|
||||
|
|
|
@ -15,7 +15,7 @@ type BoolArray struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *BoolArray) ConvertFrom(src interface{}) error {
|
||||
func (dst *BoolArray) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case BoolArray:
|
||||
*dst = value
|
||||
|
@ -28,7 +28,7 @@ func (dst *BoolArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Bool, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ func (dst *BoolArray) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Bool", value)
|
||||
}
|
||||
|
@ -49,6 +49,17 @@ func (dst *BoolArray) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *BoolArray) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *BoolArray) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestBoolArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestBoolArrayConvertFrom(t *testing.T) {
|
||||
func TestBoolArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.BoolArray
|
||||
|
@ -71,7 +71,7 @@ func TestBoolArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.BoolArray
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ func TestBoolTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestBoolConvertFrom(t *testing.T) {
|
||||
func TestBoolSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Bool
|
||||
|
@ -33,7 +33,7 @@ func TestBoolConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Bool
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ type Bytea struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Bytea) ConvertFrom(src interface{}) error {
|
||||
func (dst *Bytea) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Bytea:
|
||||
*dst = value
|
||||
|
@ -24,7 +24,7 @@ func (dst *Bytea) ConvertFrom(src interface{}) error {
|
|||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingBytesType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Bytea", value)
|
||||
}
|
||||
|
@ -32,6 +32,17 @@ func (dst *Bytea) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Bytea) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Bytes
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Bytea) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *[]byte:
|
||||
|
|
|
@ -15,7 +15,7 @@ type ByteaArray struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *ByteaArray) ConvertFrom(src interface{}) error {
|
||||
func (dst *ByteaArray) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case ByteaArray:
|
||||
*dst = value
|
||||
|
@ -28,7 +28,7 @@ func (dst *ByteaArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Bytea, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ func (dst *ByteaArray) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Bytea", value)
|
||||
}
|
||||
|
@ -49,6 +49,17 @@ func (dst *ByteaArray) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *ByteaArray) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *ByteaArray) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestByteaArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestByteaArrayConvertFrom(t *testing.T) {
|
||||
func TestByteaArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.ByteaArray
|
||||
|
@ -71,7 +71,7 @@ func TestByteaArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.ByteaArray
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ func TestByteaTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestByteaConvertFrom(t *testing.T) {
|
||||
func TestByteaSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Bytea
|
||||
|
@ -30,7 +30,7 @@ func TestByteaConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Bytea
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -17,11 +17,15 @@ import (
|
|||
// in the PostgreSQL sources.
|
||||
type Cid pguint32
|
||||
|
||||
// ConvertFrom converts from src to dst. Note that as Cid is not a general
|
||||
// number type ConvertFrom does not do automatic type conversion as other number
|
||||
// Set converts from src to dst. Note that as Cid is not a general
|
||||
// number type Set does not do automatic type conversion as other number
|
||||
// types do.
|
||||
func (dst *Cid) ConvertFrom(src interface{}) error {
|
||||
return (*pguint32)(dst).ConvertFrom(src)
|
||||
func (dst *Cid) Set(src interface{}) error {
|
||||
return (*pguint32)(dst).Set(src)
|
||||
}
|
||||
|
||||
func (dst *Cid) Get() interface{} {
|
||||
return (*pguint32)(dst).Get()
|
||||
}
|
||||
|
||||
// AssignTo assigns from src to dst. Note that as Cid is not a general number
|
||||
|
|
|
@ -14,7 +14,7 @@ func TestCidTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestCidConvertFrom(t *testing.T) {
|
||||
func TestCidSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Cid
|
||||
|
@ -24,7 +24,7 @@ func TestCidConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Cid
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -6,8 +6,12 @@ import (
|
|||
|
||||
type CidrArray InetArray
|
||||
|
||||
func (dst *CidrArray) ConvertFrom(src interface{}) error {
|
||||
return (*InetArray)(dst).ConvertFrom(src)
|
||||
func (dst *CidrArray) Set(src interface{}) error {
|
||||
return (*InetArray)(dst).Set(src)
|
||||
}
|
||||
|
||||
func (dst *CidrArray) Get() interface{} {
|
||||
return (*InetArray)(dst).Get()
|
||||
}
|
||||
|
||||
func (src *CidrArray) AssignTo(dst interface{}) error {
|
||||
|
|
|
@ -21,7 +21,7 @@ const (
|
|||
infinityDayOffset = 2147483647
|
||||
)
|
||||
|
||||
func (dst *Date) ConvertFrom(src interface{}) error {
|
||||
func (dst *Date) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Date:
|
||||
*dst = value
|
||||
|
@ -29,7 +29,7 @@ func (dst *Date) ConvertFrom(src interface{}) error {
|
|||
*dst = Date{Time: value, Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingTimeType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Date", value)
|
||||
}
|
||||
|
@ -37,6 +37,17 @@ func (dst *Date) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Date) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Time
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Date) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *time.Time:
|
||||
|
|
|
@ -16,7 +16,7 @@ type DateArray struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *DateArray) ConvertFrom(src interface{}) error {
|
||||
func (dst *DateArray) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case DateArray:
|
||||
*dst = value
|
||||
|
@ -29,7 +29,7 @@ func (dst *DateArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Date, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ func (dst *DateArray) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Date", value)
|
||||
}
|
||||
|
@ -50,6 +50,17 @@ func (dst *DateArray) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *DateArray) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *DateArray) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ func TestDateArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestDateArrayConvertFrom(t *testing.T) {
|
||||
func TestDateArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.DateArray
|
||||
|
@ -72,7 +72,7 @@ func TestDateArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.DateArray
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ func TestDateTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestDateConvertFrom(t *testing.T) {
|
||||
func TestDateSet(t *testing.T) {
|
||||
type _time time.Time
|
||||
|
||||
successfulTests := []struct {
|
||||
|
@ -41,7 +41,7 @@ func TestDateConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var d pgtype.Date
|
||||
err := d.ConvertFrom(tt.source)
|
||||
err := d.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Float4 struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Float4) ConvertFrom(src interface{}) error {
|
||||
func (dst *Float4) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Float4:
|
||||
*dst = value
|
||||
|
@ -81,7 +81,7 @@ func (dst *Float4) ConvertFrom(src interface{}) error {
|
|||
*dst = Float4{Float: float32(num), Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingNumberType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Float8", value)
|
||||
}
|
||||
|
@ -89,6 +89,17 @@ func (dst *Float4) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Float4) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Float
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Float4) AssignTo(dst interface{}) error {
|
||||
return float64AssignTo(float64(src.Float), src.Status, dst)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Float4Array struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Float4Array) ConvertFrom(src interface{}) error {
|
||||
func (dst *Float4Array) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Float4Array:
|
||||
*dst = value
|
||||
|
@ -28,7 +28,7 @@ func (dst *Float4Array) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Float4, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ func (dst *Float4Array) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Float4", value)
|
||||
}
|
||||
|
@ -49,6 +49,17 @@ func (dst *Float4Array) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Float4Array) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Float4Array) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestFloat4ArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestFloat4ArrayConvertFrom(t *testing.T) {
|
||||
func TestFloat4ArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Float4Array
|
||||
|
@ -71,7 +71,7 @@ func TestFloat4ArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Float4Array
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ func TestFloat4Transcode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestFloat4ConvertFrom(t *testing.T) {
|
||||
func TestFloat4Set(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Float4
|
||||
|
@ -43,7 +43,7 @@ func TestFloat4ConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Float4
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Float8 struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Float8) ConvertFrom(src interface{}) error {
|
||||
func (dst *Float8) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Float8:
|
||||
*dst = value
|
||||
|
@ -71,7 +71,7 @@ func (dst *Float8) ConvertFrom(src interface{}) error {
|
|||
*dst = Float8{Float: float64(num), Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingNumberType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Float8", value)
|
||||
}
|
||||
|
@ -79,6 +79,17 @@ func (dst *Float8) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Float8) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Float
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Float8) AssignTo(dst interface{}) error {
|
||||
return float64AssignTo(src.Float, src.Status, dst)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Float8Array struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Float8Array) ConvertFrom(src interface{}) error {
|
||||
func (dst *Float8Array) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Float8Array:
|
||||
*dst = value
|
||||
|
@ -28,7 +28,7 @@ func (dst *Float8Array) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Float8, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ func (dst *Float8Array) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Float8", value)
|
||||
}
|
||||
|
@ -49,6 +49,17 @@ func (dst *Float8Array) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Float8Array) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Float8Array) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestFloat8ArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestFloat8ArrayConvertFrom(t *testing.T) {
|
||||
func TestFloat8ArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Float8Array
|
||||
|
@ -71,7 +71,7 @@ func TestFloat8ArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Float8Array
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ func TestFloat8Transcode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestFloat8ConvertFrom(t *testing.T) {
|
||||
func TestFloat8Set(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Float8
|
||||
|
@ -43,7 +43,7 @@ func TestFloat8ConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Float8
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ type Inet struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Inet) ConvertFrom(src interface{}) error {
|
||||
func (dst *Inet) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Inet:
|
||||
*dst = value
|
||||
|
@ -43,7 +43,7 @@ func (dst *Inet) ConvertFrom(src interface{}) error {
|
|||
*dst = Inet{IPNet: ipnet, Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingPtrType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Inet", value)
|
||||
}
|
||||
|
@ -51,6 +51,17 @@ func (dst *Inet) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Inet) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.IPNet
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Inet) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *net.IPNet:
|
||||
|
|
|
@ -16,7 +16,7 @@ type InetArray struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *InetArray) ConvertFrom(src interface{}) error {
|
||||
func (dst *InetArray) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case InetArray:
|
||||
*dst = value
|
||||
|
@ -29,7 +29,7 @@ func (dst *InetArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Inet, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ func (dst *InetArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Inet, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ func (dst *InetArray) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Inet", value)
|
||||
}
|
||||
|
@ -69,6 +69,17 @@ func (dst *InetArray) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *InetArray) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *InetArray) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ func TestInetArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestInetArrayConvertFrom(t *testing.T) {
|
||||
func TestInetArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.InetArray
|
||||
|
@ -83,7 +83,7 @@ func TestInetArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.InetArray
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ func TestInetTranscode(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestInetConvertFrom(t *testing.T) {
|
||||
func TestInetSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Inet
|
||||
|
@ -39,7 +39,7 @@ func TestInetConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Inet
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Int2 struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Int2) ConvertFrom(src interface{}) error {
|
||||
func (dst *Int2) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Int2:
|
||||
*dst = value
|
||||
|
@ -77,7 +77,7 @@ func (dst *Int2) ConvertFrom(src interface{}) error {
|
|||
*dst = Int2{Int: int16(num), Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingNumberType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Int2", value)
|
||||
}
|
||||
|
@ -85,6 +85,17 @@ func (dst *Int2) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Int2) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Int
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Int2) AssignTo(dst interface{}) error {
|
||||
return int64AssignTo(int64(src.Int), src.Status, dst)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Int2Array struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Int2Array) ConvertFrom(src interface{}) error {
|
||||
func (dst *Int2Array) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Int2Array:
|
||||
*dst = value
|
||||
|
@ -28,7 +28,7 @@ func (dst *Int2Array) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Int2, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ func (dst *Int2Array) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Int2, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ func (dst *Int2Array) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Int2", value)
|
||||
}
|
||||
|
@ -68,6 +68,17 @@ func (dst *Int2Array) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Int2Array) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Int2Array) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestInt2ArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestInt2ArrayConvertFrom(t *testing.T) {
|
||||
func TestInt2ArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Int2Array
|
||||
|
@ -78,7 +78,7 @@ func TestInt2ArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Int2Array
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ func TestInt2Transcode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestInt2ConvertFrom(t *testing.T) {
|
||||
func TestInt2Set(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Int2
|
||||
|
@ -42,7 +42,7 @@ func TestInt2ConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Int2
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Int4 struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Int4) ConvertFrom(src interface{}) error {
|
||||
func (dst *Int4) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Int4:
|
||||
*dst = value
|
||||
|
@ -68,7 +68,7 @@ func (dst *Int4) ConvertFrom(src interface{}) error {
|
|||
*dst = Int4{Int: int32(num), Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingNumberType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Int8", value)
|
||||
}
|
||||
|
@ -76,6 +76,17 @@ func (dst *Int4) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Int4) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Int
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Int4) AssignTo(dst interface{}) error {
|
||||
return int64AssignTo(int64(src.Int), src.Status, dst)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Int4Array struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Int4Array) ConvertFrom(src interface{}) error {
|
||||
func (dst *Int4Array) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Int4Array:
|
||||
*dst = value
|
||||
|
@ -28,7 +28,7 @@ func (dst *Int4Array) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Int4, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ func (dst *Int4Array) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Int4, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ func (dst *Int4Array) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Int4", value)
|
||||
}
|
||||
|
@ -68,6 +68,17 @@ func (dst *Int4Array) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Int4Array) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Int4Array) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestInt4ArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestInt4ArrayConvertFrom(t *testing.T) {
|
||||
func TestInt4ArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Int4Array
|
||||
|
@ -78,7 +78,7 @@ func TestInt4ArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Int4Array
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ func TestInt4Transcode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestInt4ConvertFrom(t *testing.T) {
|
||||
func TestInt4Set(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Int4
|
||||
|
@ -42,7 +42,7 @@ func TestInt4ConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Int4
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Int8 struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Int8) ConvertFrom(src interface{}) error {
|
||||
func (dst *Int8) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Int8:
|
||||
*dst = value
|
||||
|
@ -59,7 +59,7 @@ func (dst *Int8) ConvertFrom(src interface{}) error {
|
|||
*dst = Int8{Int: num, Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingNumberType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Int8", value)
|
||||
}
|
||||
|
@ -67,6 +67,17 @@ func (dst *Int8) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Int8) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Int
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Int8) AssignTo(dst interface{}) error {
|
||||
return int64AssignTo(int64(src.Int), src.Status, dst)
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ type Int8Array struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Int8Array) ConvertFrom(src interface{}) error {
|
||||
func (dst *Int8Array) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Int8Array:
|
||||
*dst = value
|
||||
|
@ -28,7 +28,7 @@ func (dst *Int8Array) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Int8, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ func (dst *Int8Array) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Int8, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ func (dst *Int8Array) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Int8", value)
|
||||
}
|
||||
|
@ -68,6 +68,17 @@ func (dst *Int8Array) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Int8Array) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Int8Array) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestInt8ArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestInt8ArrayConvertFrom(t *testing.T) {
|
||||
func TestInt8ArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Int8Array
|
||||
|
@ -78,7 +78,7 @@ func TestInt8ArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Int8Array
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ func TestInt8Transcode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestInt8ConvertFrom(t *testing.T) {
|
||||
func TestInt8Set(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Int8
|
||||
|
@ -42,7 +42,7 @@ func TestInt8ConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Int8
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ type Json struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Json) ConvertFrom(src interface{}) error {
|
||||
func (dst *Json) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case string:
|
||||
*dst = Json{Bytes: []byte(value), Status: Present}
|
||||
|
@ -37,6 +37,22 @@ func (dst *Json) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Json) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
var i interface{}
|
||||
err := json.Unmarshal(dst.Bytes, &i)
|
||||
if err != nil {
|
||||
return dst
|
||||
}
|
||||
return i
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Json) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *string:
|
||||
|
|
|
@ -18,7 +18,7 @@ func TestJsonTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestJsonConvertFrom(t *testing.T) {
|
||||
func TestJsonSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Json
|
||||
|
@ -33,7 +33,7 @@ func TestJsonConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var d pgtype.Json
|
||||
err := d.ConvertFrom(tt.source)
|
||||
err := d.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -7,8 +7,12 @@ import (
|
|||
|
||||
type Jsonb Json
|
||||
|
||||
func (dst *Jsonb) ConvertFrom(src interface{}) error {
|
||||
return (*Json)(dst).ConvertFrom(src)
|
||||
func (dst *Jsonb) Set(src interface{}) error {
|
||||
return (*Json)(dst).Set(src)
|
||||
}
|
||||
|
||||
func (dst *Jsonb) Get() interface{} {
|
||||
return (*Json)(dst).Get()
|
||||
}
|
||||
|
||||
func (src *Jsonb) AssignTo(dst interface{}) error {
|
||||
|
|
|
@ -18,7 +18,7 @@ func TestJsonbTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestJsonbConvertFrom(t *testing.T) {
|
||||
func TestJsonbSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Jsonb
|
||||
|
@ -33,7 +33,7 @@ func TestJsonbConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var d pgtype.Jsonb
|
||||
err := d.ConvertFrom(tt.source)
|
||||
err := d.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -19,8 +19,12 @@ import (
|
|||
// bytes applies, rather than the default 63.
|
||||
type Name Text
|
||||
|
||||
func (dst *Name) ConvertFrom(src interface{}) error {
|
||||
return (*Text)(dst).ConvertFrom(src)
|
||||
func (dst *Name) Set(src interface{}) error {
|
||||
return (*Text)(dst).Set(src)
|
||||
}
|
||||
|
||||
func (dst *Name) Get() interface{} {
|
||||
return (*Text)(dst).Get()
|
||||
}
|
||||
|
||||
func (src *Name) AssignTo(dst interface{}) error {
|
||||
|
|
|
@ -15,7 +15,7 @@ func TestNameTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestNameConvertFrom(t *testing.T) {
|
||||
func TestNameSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Name
|
||||
|
@ -27,7 +27,7 @@ func TestNameConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var d pgtype.Name
|
||||
err := d.ConvertFrom(tt.source)
|
||||
err := d.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -11,11 +11,15 @@ import (
|
|||
// found in src/include/postgres_ext.h in the PostgreSQL sources.
|
||||
type Oid pguint32
|
||||
|
||||
// ConvertFrom converts from src to dst. Note that as Oid is not a general
|
||||
// number type ConvertFrom does not do automatic type conversion as other number
|
||||
// Set converts from src to dst. Note that as Oid is not a general
|
||||
// number type Set does not do automatic type conversion as other number
|
||||
// types do.
|
||||
func (dst *Oid) ConvertFrom(src interface{}) error {
|
||||
return (*pguint32)(dst).ConvertFrom(src)
|
||||
func (dst *Oid) Set(src interface{}) error {
|
||||
return (*pguint32)(dst).Set(src)
|
||||
}
|
||||
|
||||
func (dst *Oid) Get() interface{} {
|
||||
return (*pguint32)(dst).Get()
|
||||
}
|
||||
|
||||
// AssignTo assigns from src to dst. Note that as Oid is not a general number
|
||||
|
|
|
@ -14,7 +14,7 @@ func TestOidTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestOidConvertFrom(t *testing.T) {
|
||||
func TestOidSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Oid
|
||||
|
@ -24,7 +24,7 @@ func TestOidConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Oid
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -66,13 +66,16 @@ const (
|
|||
NegativeInfinity InfinityModifier = -Infinity
|
||||
)
|
||||
|
||||
type Value interface{}
|
||||
type Value interface {
|
||||
// Set converts and assigns src to itself.
|
||||
Set(src interface{}) error
|
||||
|
||||
type ConverterFrom interface {
|
||||
ConvertFrom(src interface{}) error
|
||||
}
|
||||
// Get returns the simplest representation of Value. If the Value is Null or
|
||||
// Undefined that is the return value. If no simpler representation is
|
||||
// possible, then Get() returns Value.
|
||||
Get() interface{}
|
||||
|
||||
type AssignerTo interface {
|
||||
// AssignTo converts and assigns the Value to dst.
|
||||
AssignTo(dst interface{}) error
|
||||
}
|
||||
|
||||
|
|
|
@ -16,10 +16,10 @@ type pguint32 struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
// ConvertFrom converts from src to dst. Note that as pguint32 is not a general
|
||||
// number type ConvertFrom does not do automatic type conversion as other number
|
||||
// Set converts from src to dst. Note that as pguint32 is not a general
|
||||
// number type Set does not do automatic type conversion as other number
|
||||
// types do.
|
||||
func (dst *pguint32) ConvertFrom(src interface{}) error {
|
||||
func (dst *pguint32) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case uint32:
|
||||
*dst = pguint32{Uint: value, Status: Present}
|
||||
|
@ -30,6 +30,17 @@ func (dst *pguint32) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *pguint32) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Uint
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
// AssignTo assigns from src to dst. Note that as pguint32 is not a general number
|
||||
// type AssignTo does not do automatic type conversion as other number types do.
|
||||
func (src *pguint32) AssignTo(dst interface{}) error {
|
||||
|
|
|
@ -23,7 +23,7 @@ type QChar struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *QChar) ConvertFrom(src interface{}) error {
|
||||
func (dst *QChar) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case QChar:
|
||||
*dst = value
|
||||
|
@ -94,7 +94,7 @@ func (dst *QChar) ConvertFrom(src interface{}) error {
|
|||
*dst = QChar{Int: int8(num), Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingNumberType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to QChar", value)
|
||||
}
|
||||
|
@ -102,6 +102,17 @@ func (dst *QChar) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *QChar) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.Int
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *QChar) AssignTo(dst interface{}) error {
|
||||
return int64AssignTo(int64(src.Int), src.Status, dst)
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ func TestQCharTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestQCharConvertFrom(t *testing.T) {
|
||||
func TestQCharSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.QChar
|
||||
|
@ -42,7 +42,7 @@ func TestQCharConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.QChar
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ type Text struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Text) ConvertFrom(src interface{}) error {
|
||||
func (dst *Text) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Text:
|
||||
*dst = value
|
||||
|
@ -25,7 +25,7 @@ func (dst *Text) ConvertFrom(src interface{}) error {
|
|||
}
|
||||
default:
|
||||
if originalSrc, ok := underlyingStringType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Text", value)
|
||||
}
|
||||
|
@ -33,6 +33,17 @@ func (dst *Text) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Text) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst.String
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Text) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *string:
|
||||
|
|
|
@ -15,7 +15,7 @@ type TextArray struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *TextArray) ConvertFrom(src interface{}) error {
|
||||
func (dst *TextArray) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case TextArray:
|
||||
*dst = value
|
||||
|
@ -28,7 +28,7 @@ func (dst *TextArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Text, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ func (dst *TextArray) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Text", value)
|
||||
}
|
||||
|
@ -49,6 +49,17 @@ func (dst *TextArray) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *TextArray) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *TextArray) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func TestTextArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestTextArrayConvertFrom(t *testing.T) {
|
||||
func TestTextArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.TextArray
|
||||
|
@ -71,7 +71,7 @@ func TestTextArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.TextArray
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ func TestTextTranscode(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestTextConvertFrom(t *testing.T) {
|
||||
func TestTextSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Text
|
||||
|
@ -30,7 +30,7 @@ func TestTextConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var d pgtype.Text
|
||||
err := d.ConvertFrom(tt.source)
|
||||
err := d.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -27,6 +27,25 @@ type Tid struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *Tid) Set(src interface{}) error {
|
||||
return fmt.Errorf("cannot convert %v to Tid", src)
|
||||
}
|
||||
|
||||
func (dst *Tid) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Tid) AssignTo(dst interface{}) error {
|
||||
return fmt.Errorf("cannot assign %v to %T", src, dst)
|
||||
}
|
||||
|
||||
func (dst *Tid) DecodeText(src []byte) error {
|
||||
if src == nil {
|
||||
*dst = Tid{Status: Null}
|
||||
|
|
|
@ -23,9 +23,9 @@ type Timestamp struct {
|
|||
InfinityModifier
|
||||
}
|
||||
|
||||
// ConvertFrom converts src into a Timestamp and stores in dst. If src is a
|
||||
// Set converts src into a Timestamp and stores in dst. If src is a
|
||||
// time.Time in a non-UTC time zone, the time zone is discarded.
|
||||
func (dst *Timestamp) ConvertFrom(src interface{}) error {
|
||||
func (dst *Timestamp) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Timestamp:
|
||||
*dst = value
|
||||
|
@ -33,7 +33,7 @@ func (dst *Timestamp) ConvertFrom(src interface{}) error {
|
|||
*dst = Timestamp{Time: time.Date(value.Year(), value.Month(), value.Day(), value.Hour(), value.Minute(), value.Second(), value.Nanosecond(), time.UTC), Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingTimeType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Timestamp", value)
|
||||
}
|
||||
|
@ -41,6 +41,20 @@ func (dst *Timestamp) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Timestamp) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
if dst.InfinityModifier != None {
|
||||
return dst.InfinityModifier
|
||||
}
|
||||
return dst.Time
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Timestamp) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *time.Time:
|
||||
|
|
|
@ -16,7 +16,7 @@ type TimestampArray struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *TimestampArray) ConvertFrom(src interface{}) error {
|
||||
func (dst *TimestampArray) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case TimestampArray:
|
||||
*dst = value
|
||||
|
@ -29,7 +29,7 @@ func (dst *TimestampArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Timestamp, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ func (dst *TimestampArray) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Timestamp", value)
|
||||
}
|
||||
|
@ -50,6 +50,17 @@ func (dst *TimestampArray) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *TimestampArray) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *TimestampArray) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ func TestTimestampArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestTimestampArrayConvertFrom(t *testing.T) {
|
||||
func TestTimestampArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.TimestampArray
|
||||
|
@ -88,7 +88,7 @@ func TestTimestampArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.TimestampArray
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ func TestTimestampTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestTimestampConvertFrom(t *testing.T) {
|
||||
func TestTimestampSet(t *testing.T) {
|
||||
type _time time.Time
|
||||
|
||||
successfulTests := []struct {
|
||||
|
@ -51,7 +51,7 @@ func TestTimestampConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Timestamp
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ type Timestamptz struct {
|
|||
InfinityModifier
|
||||
}
|
||||
|
||||
func (dst *Timestamptz) ConvertFrom(src interface{}) error {
|
||||
func (dst *Timestamptz) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case Timestamptz:
|
||||
*dst = value
|
||||
|
@ -34,7 +34,7 @@ func (dst *Timestamptz) ConvertFrom(src interface{}) error {
|
|||
*dst = Timestamptz{Time: value, Status: Present}
|
||||
default:
|
||||
if originalSrc, ok := underlyingTimeType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Timestamptz", value)
|
||||
}
|
||||
|
@ -42,6 +42,20 @@ func (dst *Timestamptz) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *Timestamptz) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
if dst.InfinityModifier != None {
|
||||
return dst.InfinityModifier
|
||||
}
|
||||
return dst.Time
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *Timestamptz) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
case *time.Time:
|
||||
|
|
|
@ -16,7 +16,7 @@ type TimestamptzArray struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *TimestamptzArray) ConvertFrom(src interface{}) error {
|
||||
func (dst *TimestamptzArray) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case TimestamptzArray:
|
||||
*dst = value
|
||||
|
@ -29,7 +29,7 @@ func (dst *TimestamptzArray) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]Timestamptz, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ func (dst *TimestamptzArray) ConvertFrom(src interface{}) error {
|
|||
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to Timestamptz", value)
|
||||
}
|
||||
|
@ -50,6 +50,17 @@ func (dst *TimestamptzArray) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *TimestamptzArray) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *TimestamptzArray) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ func TestTimestamptzArrayTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestTimestamptzArrayConvertFrom(t *testing.T) {
|
||||
func TestTimestamptzArraySet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.TimestamptzArray
|
||||
|
@ -88,7 +88,7 @@ func TestTimestamptzArrayConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.TimestamptzArray
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ func TestTimestamptzTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestTimestamptzConvertFrom(t *testing.T) {
|
||||
func TestTimestamptzSet(t *testing.T) {
|
||||
type _time time.Time
|
||||
|
||||
successfulTests := []struct {
|
||||
|
@ -50,7 +50,7 @@ func TestTimestamptzConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Timestamptz
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ type <%= pgtype_array_type %> struct {
|
|||
Status Status
|
||||
}
|
||||
|
||||
func (dst *<%= pgtype_array_type %>) ConvertFrom(src interface{}) error {
|
||||
func (dst *<%= pgtype_array_type %>) Set(src interface{}) error {
|
||||
switch value := src.(type) {
|
||||
case <%= pgtype_array_type %>:
|
||||
*dst = value
|
||||
|
@ -27,7 +27,7 @@ func (dst *<%= pgtype_array_type %>) ConvertFrom(src interface{}) error {
|
|||
} else {
|
||||
elements := make([]<%= pgtype_element_type %>, len(value))
|
||||
for i := range value {
|
||||
if err := elements[i].ConvertFrom(value[i]); err != nil {
|
||||
if err := elements[i].Set(value[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ func (dst *<%= pgtype_array_type %>) ConvertFrom(src interface{}) error {
|
|||
<% end %>
|
||||
default:
|
||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||
return dst.ConvertFrom(originalSrc)
|
||||
return dst.Set(originalSrc)
|
||||
}
|
||||
return fmt.Errorf("cannot convert %v to <%= pgtype_element_type %>", value)
|
||||
}
|
||||
|
@ -48,6 +48,17 @@ func (dst *<%= pgtype_array_type %>) ConvertFrom(src interface{}) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dst *<%= pgtype_array_type %>) Get() interface{} {
|
||||
switch dst.Status {
|
||||
case Present:
|
||||
return dst
|
||||
case Null:
|
||||
return nil
|
||||
default:
|
||||
return dst.Status
|
||||
}
|
||||
}
|
||||
|
||||
func (src *<%= pgtype_array_type %>) AssignTo(dst interface{}) error {
|
||||
switch v := dst.(type) {
|
||||
<% go_array_types.split(",").each do |t| %>
|
||||
|
|
|
@ -6,8 +6,12 @@ import (
|
|||
|
||||
type VarcharArray TextArray
|
||||
|
||||
func (dst *VarcharArray) ConvertFrom(src interface{}) error {
|
||||
return (*TextArray)(dst).ConvertFrom(src)
|
||||
func (dst *VarcharArray) Set(src interface{}) error {
|
||||
return (*TextArray)(dst).Set(src)
|
||||
}
|
||||
|
||||
func (dst *VarcharArray) Get() interface{} {
|
||||
return (*TextArray)(dst).Get()
|
||||
}
|
||||
|
||||
func (src *VarcharArray) AssignTo(dst interface{}) error {
|
||||
|
|
|
@ -20,11 +20,15 @@ import (
|
|||
// in the PostgreSQL sources.
|
||||
type Xid pguint32
|
||||
|
||||
// ConvertFrom converts from src to dst. Note that as Xid is not a general
|
||||
// number type ConvertFrom does not do automatic type conversion as other number
|
||||
// Set converts from src to dst. Note that as Xid is not a general
|
||||
// number type Set does not do automatic type conversion as other number
|
||||
// types do.
|
||||
func (dst *Xid) ConvertFrom(src interface{}) error {
|
||||
return (*pguint32)(dst).ConvertFrom(src)
|
||||
func (dst *Xid) Set(src interface{}) error {
|
||||
return (*pguint32)(dst).Set(src)
|
||||
}
|
||||
|
||||
func (dst *Xid) Get() interface{} {
|
||||
return (*pguint32)(dst).Get()
|
||||
}
|
||||
|
||||
// AssignTo assigns from src to dst. Note that as Xid is not a general number
|
||||
|
|
|
@ -14,7 +14,7 @@ func TestXidTranscode(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestXidConvertFrom(t *testing.T) {
|
||||
func TestXidSet(t *testing.T) {
|
||||
successfulTests := []struct {
|
||||
source interface{}
|
||||
result pgtype.Xid
|
||||
|
@ -24,7 +24,7 @@ func TestXidConvertFrom(t *testing.T) {
|
|||
|
||||
for i, tt := range successfulTests {
|
||||
var r pgtype.Xid
|
||||
err := r.ConvertFrom(tt.source)
|
||||
err := r.Set(tt.source)
|
||||
if err != nil {
|
||||
t.Errorf("%d: %v", i, err)
|
||||
}
|
||||
|
|
8
query.go
8
query.go
|
@ -288,12 +288,8 @@ func (rows *Rows) Scan(dest ...interface{}) (err error) {
|
|||
vr.Fatal(fmt.Errorf("unknown format code: %v", vr.Type().FormatCode))
|
||||
}
|
||||
|
||||
if assignerTo, ok := pgVal.(pgtype.AssignerTo); ok {
|
||||
if err := assignerTo.AssignTo(d); err != nil {
|
||||
vr.Fatal(err)
|
||||
}
|
||||
} else {
|
||||
vr.Fatal(fmt.Errorf("cannot assign %T", pgVal))
|
||||
if err := pgVal.AssignTo(d); err != nil {
|
||||
vr.Fatal(err)
|
||||
}
|
||||
} else {
|
||||
if err := Decode(vr, d); err != nil {
|
||||
|
|
14
values.go
14
values.go
|
@ -773,13 +773,9 @@ func Encode(wbuf *WriteBuf, oid Oid, arg interface{}) error {
|
|||
}
|
||||
|
||||
if value, ok := wbuf.conn.oidPgtypeValues[oid]; ok {
|
||||
if converterFrom, ok := value.(pgtype.ConverterFrom); ok {
|
||||
err := converterFrom.ConvertFrom(arg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return SerializationError(fmt.Sprintf("Cannot encode %T into oid %v - %T must implement Encoder or be converted to a string", arg, oid, arg))
|
||||
err := value.Set(arg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
|
@ -1275,7 +1271,7 @@ func encodeTime(w *WriteBuf, oid Oid, value time.Time) error {
|
|||
switch oid {
|
||||
case DateOid:
|
||||
var d pgtype.Date
|
||||
err := d.ConvertFrom(value)
|
||||
err := d.Set(value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -1295,7 +1291,7 @@ func encodeTime(w *WriteBuf, oid Oid, value time.Time) error {
|
|||
|
||||
case TimestampTzOid, TimestampOid:
|
||||
var t pgtype.Timestamptz
|
||||
err := t.ConvertFrom(value)
|
||||
err := t.Set(value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue