Skip to content

Commit

Permalink
Expand pgtype.Value interface
Browse files Browse the repository at this point in the history
- Include and rename ConvertFrom to Set
- Add Get
- Include AssignTo
  • Loading branch information
jackc committed Mar 12, 2017
1 parent 7985ca5 commit 9b93618
Show file tree
Hide file tree
Showing 72 changed files with 561 additions and 170 deletions.
15 changes: 13 additions & 2 deletions aclitem.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -37,14 +37,25 @@ 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)
}

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:
Expand Down
17 changes: 14 additions & 3 deletions aclitem_array.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}
}
Expand All @@ -40,14 +40,25 @@ 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)
}

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) {

Expand Down
4 changes: 2 additions & 2 deletions aclitem_array_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
4 changes: 2 additions & 2 deletions aclitem_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
15 changes: 13 additions & 2 deletions bool.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -26,14 +26,25 @@ 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)
}

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:
Expand Down
17 changes: 14 additions & 3 deletions bool_array.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}
}
Expand All @@ -41,14 +41,25 @@ 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)
}

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) {

Expand Down
4 changes: 2 additions & 2 deletions bool_array_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
4 changes: 2 additions & 2 deletions bool_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
15 changes: 13 additions & 2 deletions bytea.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -24,14 +24,25 @@ 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)
}

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:
Expand Down
17 changes: 14 additions & 3 deletions bytea_array.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}
}
Expand All @@ -41,14 +41,25 @@ 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)
}

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) {

Expand Down
4 changes: 2 additions & 2 deletions bytea_array_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
4 changes: 2 additions & 2 deletions bytea_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
12 changes: 8 additions & 4 deletions cid.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions cid_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
Loading

0 comments on commit 9b93618

Please sign in to comment.