2
0

Expand pgtype.Value interface

- Include and rename ConvertFrom to Set
- Add Get
- Include AssignTo
This commit is contained in:
Jack Christensen
2017-03-11 19:53:02 -06:00
parent 7985ca5f87
commit 9b9361848d
72 changed files with 561 additions and 170 deletions
+13 -2
View File
@@ -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 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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:
+14 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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:
+14 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+8 -4
View File
@@ -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
+2 -2
View File
@@ -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 -2
View File
@@ -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 {
+13 -2
View File
@@ -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:
+14 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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)
}
+14 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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)
}
+14 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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:
+15 -4
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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 -4
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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 -4
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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 -4
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+17 -1
View File
@@ -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:
+2 -2
View File
@@ -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)
}
+6 -2
View File
@@ -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 {
+2 -2
View File
@@ -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)
}
+6 -2
View File
@@ -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 {
+2 -2
View File
@@ -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)
}
+8 -4
View File
@@ -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
+2 -2
View File
@@ -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)
}
+8 -5
View File
@@ -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
}
+14 -3
View File
@@ -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 {
+13 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+13 -2
View File
@@ -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:
+14 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+19
View File
@@ -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}
+17 -3
View File
@@ -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:
+14 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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)
}
+16 -2
View File
@@ -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:
+14 -3
View File
@@ -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) {
+2 -2
View File
@@ -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)
}
+2 -2
View File
@@ -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 -3
View File
@@ -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 -2
View File
@@ -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 {
+8 -4
View File
@@ -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
+2 -2
View File
@@ -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)
}