2
0

Name PG types as words

Though this doesn't follow Go naming conventions exactly it makes names more
consistent with PostgreSQL and it is easier to read. For example, TIDOID becomes
TidOid. In addition this is one less breaking change in the move to V3.
This commit is contained in:
Jack Christensen
2017-03-11 17:03:23 -06:00
parent 44e206ab5b
commit 666af9ead5
35 changed files with 311 additions and 311 deletions
+13 -13
View File
@@ -6,7 +6,7 @@ import (
"reflect" "reflect"
) )
// ACLItem is used for PostgreSQL's aclitem data type. A sample aclitem // Aclitem is used for PostgreSQL's aclitem data type. A sample aclitem
// might look like this: // might look like this:
// //
// postgres=arwdDxt/postgres // postgres=arwdDxt/postgres
@@ -18,34 +18,34 @@ import (
// //
// postgres=arwdDxt/"role with spaces" // postgres=arwdDxt/"role with spaces"
// //
type ACLItem struct { type Aclitem struct {
String string String string
Status Status Status Status
} }
func (dst *ACLItem) ConvertFrom(src interface{}) error { func (dst *Aclitem) ConvertFrom(src interface{}) error {
switch value := src.(type) { switch value := src.(type) {
case ACLItem: case Aclitem:
*dst = value *dst = value
case string: case string:
*dst = ACLItem{String: value, Status: Present} *dst = Aclitem{String: value, Status: Present}
case *string: case *string:
if value == nil { if value == nil {
*dst = ACLItem{Status: Null} *dst = Aclitem{Status: Null}
} else { } else {
*dst = ACLItem{String: *value, Status: Present} *dst = Aclitem{String: *value, Status: Present}
} }
default: default:
if originalSrc, ok := underlyingStringType(src); ok { if originalSrc, ok := underlyingStringType(src); ok {
return dst.ConvertFrom(originalSrc) return dst.ConvertFrom(originalSrc)
} }
return fmt.Errorf("cannot convert %v to ACLItem", value) return fmt.Errorf("cannot convert %v to Aclitem", value)
} }
return nil return nil
} }
func (src *ACLItem) AssignTo(dst interface{}) error { func (src *Aclitem) AssignTo(dst interface{}) error {
switch v := dst.(type) { switch v := dst.(type) {
case *string: case *string:
if src.Status != Present { if src.Status != Present {
@@ -81,17 +81,17 @@ func (src *ACLItem) AssignTo(dst interface{}) error {
return nil return nil
} }
func (dst *ACLItem) DecodeText(src []byte) error { func (dst *Aclitem) DecodeText(src []byte) error {
if src == nil { if src == nil {
*dst = ACLItem{Status: Null} *dst = Aclitem{Status: Null}
return nil return nil
} }
*dst = ACLItem{String: string(src), Status: Present} *dst = Aclitem{String: string(src), Status: Present}
return nil return nil
} }
func (src ACLItem) EncodeText(w io.Writer) (bool, error) { func (src Aclitem) EncodeText(w io.Writer) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
+17 -17
View File
@@ -8,30 +8,30 @@ import (
"github.com/jackc/pgx/pgio" "github.com/jackc/pgx/pgio"
) )
type ACLItemArray struct { type AclitemArray struct {
Elements []ACLItem Elements []Aclitem
Dimensions []ArrayDimension Dimensions []ArrayDimension
Status Status Status Status
} }
func (dst *ACLItemArray) ConvertFrom(src interface{}) error { func (dst *AclitemArray) ConvertFrom(src interface{}) error {
switch value := src.(type) { switch value := src.(type) {
case ACLItemArray: case AclitemArray:
*dst = value *dst = value
case []string: case []string:
if value == nil { if value == nil {
*dst = ACLItemArray{Status: Null} *dst = AclitemArray{Status: Null}
} else if len(value) == 0 { } else if len(value) == 0 {
*dst = ACLItemArray{Status: Present} *dst = AclitemArray{Status: Present}
} else { } else {
elements := make([]ACLItem, len(value)) elements := make([]Aclitem, len(value))
for i := range value { for i := range value {
if err := elements[i].ConvertFrom(value[i]); err != nil { if err := elements[i].ConvertFrom(value[i]); err != nil {
return err return err
} }
} }
*dst = ACLItemArray{ *dst = AclitemArray{
Elements: elements, Elements: elements,
Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}}, Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}},
Status: Present, Status: Present,
@@ -42,13 +42,13 @@ func (dst *ACLItemArray) ConvertFrom(src interface{}) error {
if originalSrc, ok := underlyingSliceType(src); ok { if originalSrc, ok := underlyingSliceType(src); ok {
return dst.ConvertFrom(originalSrc) return dst.ConvertFrom(originalSrc)
} }
return fmt.Errorf("cannot convert %v to ACLItem", value) return fmt.Errorf("cannot convert %v to Aclitem", value)
} }
return nil return nil
} }
func (src *ACLItemArray) AssignTo(dst interface{}) error { func (src *AclitemArray) AssignTo(dst interface{}) error {
switch v := dst.(type) { switch v := dst.(type) {
case *[]string: case *[]string:
@@ -73,9 +73,9 @@ func (src *ACLItemArray) AssignTo(dst interface{}) error {
return nil return nil
} }
func (dst *ACLItemArray) DecodeText(src []byte) error { func (dst *AclitemArray) DecodeText(src []byte) error {
if src == nil { if src == nil {
*dst = ACLItemArray{Status: Null} *dst = AclitemArray{Status: Null}
return nil return nil
} }
@@ -84,13 +84,13 @@ func (dst *ACLItemArray) DecodeText(src []byte) error {
return err return err
} }
var elements []ACLItem var elements []Aclitem
if len(uta.Elements) > 0 { if len(uta.Elements) > 0 {
elements = make([]ACLItem, len(uta.Elements)) elements = make([]Aclitem, len(uta.Elements))
for i, s := range uta.Elements { for i, s := range uta.Elements {
var elem ACLItem var elem Aclitem
var elemSrc []byte var elemSrc []byte
if s != "NULL" { if s != "NULL" {
elemSrc = []byte(s) elemSrc = []byte(s)
@@ -104,12 +104,12 @@ func (dst *ACLItemArray) DecodeText(src []byte) error {
} }
} }
*dst = ACLItemArray{Elements: elements, Dimensions: uta.Dimensions, Status: Present} *dst = AclitemArray{Elements: elements, Dimensions: uta.Dimensions, Status: Present}
return nil return nil
} }
func (src *ACLItemArray) EncodeText(w io.Writer) (bool, error) { func (src *AclitemArray) EncodeText(w io.Writer) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
+37 -37
View File
@@ -7,40 +7,40 @@ import (
"github.com/jackc/pgx/pgtype" "github.com/jackc/pgx/pgtype"
) )
func TestACLItemArrayTranscode(t *testing.T) { func TestAclitemArrayTranscode(t *testing.T) {
testSuccessfulTranscode(t, "aclitem[]", []interface{}{ testSuccessfulTranscode(t, "aclitem[]", []interface{}{
&pgtype.ACLItemArray{ &pgtype.AclitemArray{
Elements: nil, Elements: nil,
Dimensions: nil, Dimensions: nil,
Status: pgtype.Present, Status: pgtype.Present,
}, },
&pgtype.ACLItemArray{ &pgtype.AclitemArray{
Elements: []pgtype.ACLItem{ Elements: []pgtype.Aclitem{
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{Status: pgtype.Null}, pgtype.Aclitem{Status: pgtype.Null},
}, },
Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}}, Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}},
Status: pgtype.Present, Status: pgtype.Present,
}, },
&pgtype.ACLItemArray{Status: pgtype.Null}, &pgtype.AclitemArray{Status: pgtype.Null},
&pgtype.ACLItemArray{ &pgtype.AclitemArray{
Elements: []pgtype.ACLItem{ Elements: []pgtype.Aclitem{
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: `postgres=arwdDxt/" tricky, ' } "" \ test user "`, Status: pgtype.Present}, pgtype.Aclitem{String: `postgres=arwdDxt/" tricky, ' } "" \ test user "`, Status: pgtype.Present},
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{Status: pgtype.Null}, pgtype.Aclitem{Status: pgtype.Null},
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
}, },
Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}}, Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}},
Status: pgtype.Present, Status: pgtype.Present,
}, },
&pgtype.ACLItemArray{ &pgtype.AclitemArray{
Elements: []pgtype.ACLItem{ Elements: []pgtype.Aclitem{
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
}, },
Dimensions: []pgtype.ArrayDimension{ Dimensions: []pgtype.ArrayDimension{
{Length: 2, LowerBound: 4}, {Length: 2, LowerBound: 4},
@@ -51,26 +51,26 @@ func TestACLItemArrayTranscode(t *testing.T) {
}) })
} }
func TestACLItemArrayConvertFrom(t *testing.T) { func TestAclitemArrayConvertFrom(t *testing.T) {
successfulTests := []struct { successfulTests := []struct {
source interface{} source interface{}
result pgtype.ACLItemArray result pgtype.AclitemArray
}{ }{
{ {
source: []string{"=r/postgres"}, source: []string{"=r/postgres"},
result: pgtype.ACLItemArray{ result: pgtype.AclitemArray{
Elements: []pgtype.ACLItem{{String: "=r/postgres", Status: pgtype.Present}}, Elements: []pgtype.Aclitem{{String: "=r/postgres", Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}}, Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present}, Status: pgtype.Present},
}, },
{ {
source: (([]string)(nil)), source: (([]string)(nil)),
result: pgtype.ACLItemArray{Status: pgtype.Null}, result: pgtype.AclitemArray{Status: pgtype.Null},
}, },
} }
for i, tt := range successfulTests { for i, tt := range successfulTests {
var r pgtype.ACLItemArray var r pgtype.AclitemArray
err := r.ConvertFrom(tt.source) err := r.ConvertFrom(tt.source)
if err != nil { if err != nil {
t.Errorf("%d: %v", i, err) t.Errorf("%d: %v", i, err)
@@ -82,19 +82,19 @@ func TestACLItemArrayConvertFrom(t *testing.T) {
} }
} }
func TestACLItemArrayAssignTo(t *testing.T) { func TestAclitemArrayAssignTo(t *testing.T) {
var stringSlice []string var stringSlice []string
type _stringSlice []string type _stringSlice []string
var namedStringSlice _stringSlice var namedStringSlice _stringSlice
simpleTests := []struct { simpleTests := []struct {
src pgtype.ACLItemArray src pgtype.AclitemArray
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{ {
src: pgtype.ACLItemArray{ src: pgtype.AclitemArray{
Elements: []pgtype.ACLItem{{String: "=r/postgres", Status: pgtype.Present}}, Elements: []pgtype.Aclitem{{String: "=r/postgres", Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}}, Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present, Status: pgtype.Present,
}, },
@@ -102,8 +102,8 @@ func TestACLItemArrayAssignTo(t *testing.T) {
expected: []string{"=r/postgres"}, expected: []string{"=r/postgres"},
}, },
{ {
src: pgtype.ACLItemArray{ src: pgtype.AclitemArray{
Elements: []pgtype.ACLItem{{String: "=r/postgres", Status: pgtype.Present}}, Elements: []pgtype.Aclitem{{String: "=r/postgres", Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}}, Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present, Status: pgtype.Present,
}, },
@@ -111,7 +111,7 @@ func TestACLItemArrayAssignTo(t *testing.T) {
expected: _stringSlice{"=r/postgres"}, expected: _stringSlice{"=r/postgres"},
}, },
{ {
src: pgtype.ACLItemArray{Status: pgtype.Null}, src: pgtype.AclitemArray{Status: pgtype.Null},
dst: &stringSlice, dst: &stringSlice,
expected: (([]string)(nil)), expected: (([]string)(nil)),
}, },
@@ -129,12 +129,12 @@ func TestACLItemArrayAssignTo(t *testing.T) {
} }
errorTests := []struct { errorTests := []struct {
src pgtype.ACLItemArray src pgtype.AclitemArray
dst interface{} dst interface{}
}{ }{
{ {
src: pgtype.ACLItemArray{ src: pgtype.AclitemArray{
Elements: []pgtype.ACLItem{{Status: pgtype.Null}}, Elements: []pgtype.Aclitem{{Status: pgtype.Null}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}}, Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present, Status: pgtype.Present,
}, },
+18 -18
View File
@@ -7,26 +7,26 @@ import (
"github.com/jackc/pgx/pgtype" "github.com/jackc/pgx/pgtype"
) )
func TestACLItemTranscode(t *testing.T) { func TestAclitemTranscode(t *testing.T) {
testSuccessfulTranscode(t, "aclitem", []interface{}{ testSuccessfulTranscode(t, "aclitem", []interface{}{
pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: `postgres=arwdDxt/" tricky, ' } "" \ test user "`, Status: pgtype.Present}, pgtype.Aclitem{String: `postgres=arwdDxt/" tricky, ' } "" \ test user "`, Status: pgtype.Present},
pgtype.ACLItem{Status: pgtype.Null}, pgtype.Aclitem{Status: pgtype.Null},
}) })
} }
func TestACLItemConvertFrom(t *testing.T) { func TestAclitemConvertFrom(t *testing.T) {
successfulTests := []struct { successfulTests := []struct {
source interface{} source interface{}
result pgtype.ACLItem result pgtype.Aclitem
}{ }{
{source: pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, result: pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}}, {source: pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, result: pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}},
{source: "postgres=arwdDxt/postgres", result: pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}}, {source: "postgres=arwdDxt/postgres", result: pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}},
{source: (*string)(nil), result: pgtype.ACLItem{Status: pgtype.Null}}, {source: (*string)(nil), result: pgtype.Aclitem{Status: pgtype.Null}},
} }
for i, tt := range successfulTests { for i, tt := range successfulTests {
var d pgtype.ACLItem var d pgtype.Aclitem
err := d.ConvertFrom(tt.source) err := d.ConvertFrom(tt.source)
if err != nil { if err != nil {
t.Errorf("%d: %v", i, err) t.Errorf("%d: %v", i, err)
@@ -38,17 +38,17 @@ func TestACLItemConvertFrom(t *testing.T) {
} }
} }
func TestACLItemAssignTo(t *testing.T) { func TestAclitemAssignTo(t *testing.T) {
var s string var s string
var ps *string var ps *string
simpleTests := []struct { simpleTests := []struct {
src pgtype.ACLItem src pgtype.Aclitem
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, dst: &s, expected: "postgres=arwdDxt/postgres"}, {src: pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, dst: &s, expected: "postgres=arwdDxt/postgres"},
{src: pgtype.ACLItem{Status: pgtype.Null}, dst: &ps, expected: ((*string)(nil))}, {src: pgtype.Aclitem{Status: pgtype.Null}, dst: &ps, expected: ((*string)(nil))},
} }
for i, tt := range simpleTests { for i, tt := range simpleTests {
@@ -63,11 +63,11 @@ func TestACLItemAssignTo(t *testing.T) {
} }
pointerAllocTests := []struct { pointerAllocTests := []struct {
src pgtype.ACLItem src pgtype.Aclitem
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, dst: &ps, expected: "postgres=arwdDxt/postgres"}, {src: pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, dst: &ps, expected: "postgres=arwdDxt/postgres"},
} }
for i, tt := range pointerAllocTests { for i, tt := range pointerAllocTests {
@@ -82,10 +82,10 @@ func TestACLItemAssignTo(t *testing.T) {
} }
errorTests := []struct { errorTests := []struct {
src pgtype.ACLItem src pgtype.Aclitem
dst interface{} dst interface{}
}{ }{
{src: pgtype.ACLItem{Status: pgtype.Null}, dst: &s}, {src: pgtype.Aclitem{Status: pgtype.Null}, dst: &s},
} }
for i, tt := range errorTests { for i, tt := range errorTests {
+3 -3
View File
@@ -18,7 +18,7 @@ import (
type ArrayHeader struct { type ArrayHeader struct {
ContainsNull bool ContainsNull bool
ElementOID int32 ElementOid int32
Dimensions []ArrayDimension Dimensions []ArrayDimension
} }
@@ -40,7 +40,7 @@ func (dst *ArrayHeader) DecodeBinary(src []byte) (int, error) {
dst.ContainsNull = binary.BigEndian.Uint32(src[rp:]) == 1 dst.ContainsNull = binary.BigEndian.Uint32(src[rp:]) == 1
rp += 4 rp += 4
dst.ElementOID = int32(binary.BigEndian.Uint32(src[rp:])) dst.ElementOid = int32(binary.BigEndian.Uint32(src[rp:]))
rp += 4 rp += 4
if numDims > 0 { if numDims > 0 {
@@ -75,7 +75,7 @@ func (src *ArrayHeader) EncodeBinary(w io.Writer) error {
return err return err
} }
_, err = pgio.WriteInt32(w, src.ElementOID) _, err = pgio.WriteInt32(w, src.ElementOid)
if err != nil { if err != nil {
return err return err
} }
+3 -3
View File
@@ -229,10 +229,10 @@ func (src *BoolArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *BoolArray) EncodeBinary(w io.Writer) (bool, error) { func (src *BoolArray) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, BoolOID) return src.encodeBinary(w, BoolOid)
} }
func (src *BoolArray) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *BoolArray) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -241,7 +241,7 @@ func (src *BoolArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+3 -3
View File
@@ -229,10 +229,10 @@ func (src *ByteaArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *ByteaArray) EncodeBinary(w io.Writer) (bool, error) { func (src *ByteaArray) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, ByteaOID) return src.encodeBinary(w, ByteaOid)
} }
func (src *ByteaArray) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *ByteaArray) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -241,7 +241,7 @@ func (src *ByteaArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+10 -10
View File
@@ -4,7 +4,7 @@ import (
"io" "io"
) )
// CID is PostgreSQL's Command Identifier type. // Cid is PostgreSQL's Command Identifier type.
// //
// When one does // When one does
// //
@@ -15,33 +15,33 @@ import (
// It is currently implemented as an unsigned four byte integer. // It is currently implemented as an unsigned four byte integer.
// Its definition can be found in src/include/c.h as CommandId // Its definition can be found in src/include/c.h as CommandId
// in the PostgreSQL sources. // in the PostgreSQL sources.
type CID pguint32 type Cid pguint32
// ConvertFrom converts from src to dst. Note that as CID is not a general // 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 // number type ConvertFrom does not do automatic type conversion as other number
// types do. // types do.
func (dst *CID) ConvertFrom(src interface{}) error { func (dst *Cid) ConvertFrom(src interface{}) error {
return (*pguint32)(dst).ConvertFrom(src) return (*pguint32)(dst).ConvertFrom(src)
} }
// AssignTo assigns from src to dst. Note that as CID is not a general number // AssignTo assigns from src to dst. Note that as Cid is not a general number
// type AssignTo does not do automatic type conversion as other number types do. // type AssignTo does not do automatic type conversion as other number types do.
func (src *CID) AssignTo(dst interface{}) error { func (src *Cid) AssignTo(dst interface{}) error {
return (*pguint32)(src).AssignTo(dst) return (*pguint32)(src).AssignTo(dst)
} }
func (dst *CID) DecodeText(src []byte) error { func (dst *Cid) DecodeText(src []byte) error {
return (*pguint32)(dst).DecodeText(src) return (*pguint32)(dst).DecodeText(src)
} }
func (dst *CID) DecodeBinary(src []byte) error { func (dst *Cid) DecodeBinary(src []byte) error {
return (*pguint32)(dst).DecodeBinary(src) return (*pguint32)(dst).DecodeBinary(src)
} }
func (src CID) EncodeText(w io.Writer) (bool, error) { func (src Cid) EncodeText(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeText(w) return (pguint32)(src).EncodeText(w)
} }
func (src CID) EncodeBinary(w io.Writer) (bool, error) { func (src Cid) EncodeBinary(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeBinary(w) return (pguint32)(src).EncodeBinary(w)
} }
+15 -15
View File
@@ -7,23 +7,23 @@ import (
"github.com/jackc/pgx/pgtype" "github.com/jackc/pgx/pgtype"
) )
func TestCIDTranscode(t *testing.T) { func TestCidTranscode(t *testing.T) {
testSuccessfulTranscode(t, "cid", []interface{}{ testSuccessfulTranscode(t, "cid", []interface{}{
pgtype.CID{Uint: 42, Status: pgtype.Present}, pgtype.Cid{Uint: 42, Status: pgtype.Present},
pgtype.CID{Status: pgtype.Null}, pgtype.Cid{Status: pgtype.Null},
}) })
} }
func TestCIDConvertFrom(t *testing.T) { func TestCidConvertFrom(t *testing.T) {
successfulTests := []struct { successfulTests := []struct {
source interface{} source interface{}
result pgtype.CID result pgtype.Cid
}{ }{
{source: uint32(1), result: pgtype.CID{Uint: 1, Status: pgtype.Present}}, {source: uint32(1), result: pgtype.Cid{Uint: 1, Status: pgtype.Present}},
} }
for i, tt := range successfulTests { for i, tt := range successfulTests {
var r pgtype.CID var r pgtype.Cid
err := r.ConvertFrom(tt.source) err := r.ConvertFrom(tt.source)
if err != nil { if err != nil {
t.Errorf("%d: %v", i, err) t.Errorf("%d: %v", i, err)
@@ -35,17 +35,17 @@ func TestCIDConvertFrom(t *testing.T) {
} }
} }
func TestCIDAssignTo(t *testing.T) { func TestCidAssignTo(t *testing.T) {
var ui32 uint32 var ui32 uint32
var pui32 *uint32 var pui32 *uint32
simpleTests := []struct { simpleTests := []struct {
src pgtype.CID src pgtype.Cid
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.CID{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)}, {src: pgtype.Cid{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
{src: pgtype.CID{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))}, {src: pgtype.Cid{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
} }
for i, tt := range simpleTests { for i, tt := range simpleTests {
@@ -60,11 +60,11 @@ func TestCIDAssignTo(t *testing.T) {
} }
pointerAllocTests := []struct { pointerAllocTests := []struct {
src pgtype.CID src pgtype.Cid
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.CID{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)}, {src: pgtype.Cid{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)},
} }
for i, tt := range pointerAllocTests { for i, tt := range pointerAllocTests {
@@ -79,10 +79,10 @@ func TestCIDAssignTo(t *testing.T) {
} }
errorTests := []struct { errorTests := []struct {
src pgtype.CID src pgtype.Cid
dst interface{} dst interface{}
}{ }{
{src: pgtype.CID{Status: pgtype.Null}, dst: &ui32}, {src: pgtype.Cid{Status: pgtype.Null}, dst: &ui32},
} }
for i, tt := range errorTests { for i, tt := range errorTests {
+1 -1
View File
@@ -27,5 +27,5 @@ func (src *CidrArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *CidrArray) EncodeBinary(w io.Writer) (bool, error) { func (src *CidrArray) EncodeBinary(w io.Writer) (bool, error) {
return (*InetArray)(src).encodeBinary(w, CidrOID) return (*InetArray)(src).encodeBinary(w, CidrOid)
} }
+3 -3
View File
@@ -230,10 +230,10 @@ func (src *DateArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *DateArray) EncodeBinary(w io.Writer) (bool, error) { func (src *DateArray) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, DateOID) return src.encodeBinary(w, DateOid)
} }
func (src *DateArray) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *DateArray) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -242,7 +242,7 @@ func (src *DateArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+1 -1
View File
@@ -1,3 +1,3 @@
Can pass function to get inet data and function to get oid/name mapping as optional interface with io.Reader or io.Writer Can pass function to get inet data and function to get oid/name mapping as optional interface with io.Reader or io.Writer
Could be useful for arrays of types without defined OIDs like hstore. Could be useful for arrays of types without defined Oids like hstore.
+3 -3
View File
@@ -229,10 +229,10 @@ func (src *Float4Array) EncodeText(w io.Writer) (bool, error) {
} }
func (src *Float4Array) EncodeBinary(w io.Writer) (bool, error) { func (src *Float4Array) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, Float4OID) return src.encodeBinary(w, Float4Oid)
} }
func (src *Float4Array) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *Float4Array) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -241,7 +241,7 @@ func (src *Float4Array) encodeBinary(w io.Writer, elementOID int32) (bool, error
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+3 -3
View File
@@ -229,10 +229,10 @@ func (src *Float8Array) EncodeText(w io.Writer) (bool, error) {
} }
func (src *Float8Array) EncodeBinary(w io.Writer) (bool, error) { func (src *Float8Array) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, Float8OID) return src.encodeBinary(w, Float8Oid)
} }
func (src *Float8Array) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *Float8Array) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -241,7 +241,7 @@ func (src *Float8Array) encodeBinary(w io.Writer, elementOID int32) (bool, error
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+3 -3
View File
@@ -261,10 +261,10 @@ func (src *InetArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *InetArray) EncodeBinary(w io.Writer) (bool, error) { func (src *InetArray) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, InetOID) return src.encodeBinary(w, InetOid)
} }
func (src *InetArray) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *InetArray) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -273,7 +273,7 @@ func (src *InetArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+18 -18
View File
@@ -17,7 +17,7 @@ func TestInetArrayTranscode(t *testing.T) {
}, },
&pgtype.InetArray{ &pgtype.InetArray{
Elements: []pgtype.Inet{ Elements: []pgtype.Inet{
pgtype.Inet{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
pgtype.Inet{Status: pgtype.Null}, pgtype.Inet{Status: pgtype.Null},
}, },
Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}}, Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}},
@@ -26,22 +26,22 @@ func TestInetArrayTranscode(t *testing.T) {
&pgtype.InetArray{Status: pgtype.Null}, &pgtype.InetArray{Status: pgtype.Null},
&pgtype.InetArray{ &pgtype.InetArray{
Elements: []pgtype.Inet{ Elements: []pgtype.Inet{
pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "192.168.0.1/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "192.168.0.1/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
pgtype.Inet{Status: pgtype.Null}, pgtype.Inet{Status: pgtype.Null},
pgtype.Inet{IPNet: mustParseCIDR(t, "255.0.0.0/8"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "255.0.0.0/8"), Status: pgtype.Present},
}, },
Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}}, Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}},
Status: pgtype.Present, Status: pgtype.Present,
}, },
&pgtype.InetArray{ &pgtype.InetArray{
Elements: []pgtype.Inet{ Elements: []pgtype.Inet{
pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "192.168.0.1/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "192.168.0.1/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
}, },
Dimensions: []pgtype.ArrayDimension{ Dimensions: []pgtype.ArrayDimension{
{Length: 2, LowerBound: 4}, {Length: 2, LowerBound: 4},
@@ -58,9 +58,9 @@ func TestInetArrayConvertFrom(t *testing.T) {
result pgtype.InetArray result pgtype.InetArray
}{ }{
{ {
source: []*net.IPNet{mustParseCIDR(t, "127.0.0.1/32")}, source: []*net.IPNet{mustParseCidr(t, "127.0.0.1/32")},
result: pgtype.InetArray{ result: pgtype.InetArray{
Elements: []pgtype.Inet{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}}, Elements: []pgtype.Inet{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}}, Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present}, Status: pgtype.Present},
}, },
@@ -69,9 +69,9 @@ func TestInetArrayConvertFrom(t *testing.T) {
result: pgtype.InetArray{Status: pgtype.Null}, result: pgtype.InetArray{Status: pgtype.Null},
}, },
{ {
source: []net.IP{mustParseCIDR(t, "127.0.0.1/32").IP}, source: []net.IP{mustParseCidr(t, "127.0.0.1/32").IP},
result: pgtype.InetArray{ result: pgtype.InetArray{
Elements: []pgtype.Inet{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}}, Elements: []pgtype.Inet{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}}, Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present}, Status: pgtype.Present},
}, },
@@ -105,12 +105,12 @@ func TestInetArrayAssignTo(t *testing.T) {
}{ }{
{ {
src: pgtype.InetArray{ src: pgtype.InetArray{
Elements: []pgtype.Inet{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}}, Elements: []pgtype.Inet{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}}, Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present, Status: pgtype.Present,
}, },
dst: &ipnetSlice, dst: &ipnetSlice,
expected: []*net.IPNet{mustParseCIDR(t, "127.0.0.1/32")}, expected: []*net.IPNet{mustParseCidr(t, "127.0.0.1/32")},
}, },
{ {
src: pgtype.InetArray{ src: pgtype.InetArray{
@@ -123,12 +123,12 @@ func TestInetArrayAssignTo(t *testing.T) {
}, },
{ {
src: pgtype.InetArray{ src: pgtype.InetArray{
Elements: []pgtype.Inet{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}}, Elements: []pgtype.Inet{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}}, Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present, Status: pgtype.Present,
}, },
dst: &ipSlice, dst: &ipSlice,
expected: []net.IP{mustParseCIDR(t, "127.0.0.1/32").IP}, expected: []net.IP{mustParseCidr(t, "127.0.0.1/32").IP},
}, },
{ {
src: pgtype.InetArray{ src: pgtype.InetArray{
+19 -19
View File
@@ -11,16 +11,16 @@ import (
func TestInetTranscode(t *testing.T) { func TestInetTranscode(t *testing.T) {
for _, pgTypeName := range []string{"inet", "cidr"} { for _, pgTypeName := range []string{"inet", "cidr"} {
testSuccessfulTranscode(t, pgTypeName, []interface{}{ testSuccessfulTranscode(t, pgTypeName, []interface{}{
pgtype.Inet{IPNet: mustParseCIDR(t, "0.0.0.0/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "0.0.0.0/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "192.168.1.0/24"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "192.168.1.0/24"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "255.0.0.0/8"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "255.0.0.0/8"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "255.255.255.255/32"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "255.255.255.255/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "::/128"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "::/128"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "::/0"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "::/0"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "::1/128"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "::1/128"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present}, pgtype.Inet{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
pgtype.Inet{Status: pgtype.Null}, pgtype.Inet{Status: pgtype.Null},
}) })
} }
@@ -31,10 +31,10 @@ func TestInetConvertFrom(t *testing.T) {
source interface{} source interface{}
result pgtype.Inet result pgtype.Inet
}{ }{
{source: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Null}, result: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Null}}, {source: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Null}, result: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Null}},
{source: mustParseCIDR(t, "127.0.0.1/32"), result: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}}, {source: mustParseCidr(t, "127.0.0.1/32"), result: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
{source: mustParseCIDR(t, "127.0.0.1/32").IP, result: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}}, {source: mustParseCidr(t, "127.0.0.1/32").IP, result: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
{source: "127.0.0.1/32", result: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}}, {source: "127.0.0.1/32", result: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
} }
for i, tt := range successfulTests { for i, tt := range successfulTests {
@@ -61,8 +61,8 @@ func TestInetAssignTo(t *testing.T) {
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ipnet, expected: *mustParseCIDR(t, "127.0.0.1/32")}, {src: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ipnet, expected: *mustParseCidr(t, "127.0.0.1/32")},
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ip, expected: mustParseCIDR(t, "127.0.0.1/32").IP}, {src: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ip, expected: mustParseCidr(t, "127.0.0.1/32").IP},
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pipnet, expected: ((*net.IPNet)(nil))}, {src: pgtype.Inet{Status: pgtype.Null}, dst: &pipnet, expected: ((*net.IPNet)(nil))},
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pip, expected: ((*net.IP)(nil))}, {src: pgtype.Inet{Status: pgtype.Null}, dst: &pip, expected: ((*net.IP)(nil))},
} }
@@ -83,8 +83,8 @@ func TestInetAssignTo(t *testing.T) {
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &pipnet, expected: *mustParseCIDR(t, "127.0.0.1/32")}, {src: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &pipnet, expected: *mustParseCidr(t, "127.0.0.1/32")},
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &pip, expected: mustParseCIDR(t, "127.0.0.1/32").IP}, {src: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &pip, expected: mustParseCidr(t, "127.0.0.1/32").IP},
} }
for i, tt := range pointerAllocTests { for i, tt := range pointerAllocTests {
@@ -102,7 +102,7 @@ func TestInetAssignTo(t *testing.T) {
src pgtype.Inet src pgtype.Inet
dst interface{} dst interface{}
}{ }{
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "192.168.0.0/16"), Status: pgtype.Present}, dst: &ip}, {src: pgtype.Inet{IPNet: mustParseCidr(t, "192.168.0.0/16"), Status: pgtype.Present}, dst: &ip},
{src: pgtype.Inet{Status: pgtype.Null}, dst: &ipnet}, {src: pgtype.Inet{Status: pgtype.Null}, dst: &ipnet},
} }
+3 -3
View File
@@ -260,10 +260,10 @@ func (src *Int2Array) EncodeText(w io.Writer) (bool, error) {
} }
func (src *Int2Array) EncodeBinary(w io.Writer) (bool, error) { func (src *Int2Array) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, Int2OID) return src.encodeBinary(w, Int2Oid)
} }
func (src *Int2Array) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *Int2Array) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -272,7 +272,7 @@ func (src *Int2Array) encodeBinary(w io.Writer, elementOID int32) (bool, error)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+3 -3
View File
@@ -260,10 +260,10 @@ func (src *Int4Array) EncodeText(w io.Writer) (bool, error) {
} }
func (src *Int4Array) EncodeBinary(w io.Writer) (bool, error) { func (src *Int4Array) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, Int4OID) return src.encodeBinary(w, Int4Oid)
} }
func (src *Int4Array) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *Int4Array) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -272,7 +272,7 @@ func (src *Int4Array) encodeBinary(w io.Writer, elementOID int32) (bool, error)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+3 -3
View File
@@ -260,10 +260,10 @@ func (src *Int8Array) EncodeText(w io.Writer) (bool, error) {
} }
func (src *Int8Array) EncodeBinary(w io.Writer) (bool, error) { func (src *Int8Array) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, Int8OID) return src.encodeBinary(w, Int8Oid)
} }
func (src *Int8Array) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *Int8Array) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -272,7 +272,7 @@ func (src *Int8Array) encodeBinary(w io.Writer, elementOID int32) (bool, error)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+10 -10
View File
@@ -4,38 +4,38 @@ import (
"io" "io"
) )
// OID (Object Identifier Type) is, according to // Oid (Object Identifier Type) is, according to
// https://www.postgresql.org/docs/current/static/datatype-oid.html, used // https://www.postgresql.org/docs/current/static/datatype-oid.html, used
// internally by PostgreSQL as a primary key for various system tables. It is // internally by PostgreSQL as a primary key for various system tables. It is
// currently implemented as an unsigned four-byte integer. Its definition can be // currently implemented as an unsigned four-byte integer. Its definition can be
// found in src/include/postgres_ext.h in the PostgreSQL sources. // found in src/include/postgres_ext.h in the PostgreSQL sources.
type OID pguint32 type Oid pguint32
// ConvertFrom converts from src to dst. Note that as OID is not a general // 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 // number type ConvertFrom does not do automatic type conversion as other number
// types do. // types do.
func (dst *OID) ConvertFrom(src interface{}) error { func (dst *Oid) ConvertFrom(src interface{}) error {
return (*pguint32)(dst).ConvertFrom(src) return (*pguint32)(dst).ConvertFrom(src)
} }
// AssignTo assigns from src to dst. Note that as OID is not a general number // AssignTo assigns from src to dst. Note that as Oid is not a general number
// type AssignTo does not do automatic type conversion as other number types do. // type AssignTo does not do automatic type conversion as other number types do.
func (src *OID) AssignTo(dst interface{}) error { func (src *Oid) AssignTo(dst interface{}) error {
return (*pguint32)(src).AssignTo(dst) return (*pguint32)(src).AssignTo(dst)
} }
func (dst *OID) DecodeText(src []byte) error { func (dst *Oid) DecodeText(src []byte) error {
return (*pguint32)(dst).DecodeText(src) return (*pguint32)(dst).DecodeText(src)
} }
func (dst *OID) DecodeBinary(src []byte) error { func (dst *Oid) DecodeBinary(src []byte) error {
return (*pguint32)(dst).DecodeBinary(src) return (*pguint32)(dst).DecodeBinary(src)
} }
func (src OID) EncodeText(w io.Writer) (bool, error) { func (src Oid) EncodeText(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeText(w) return (pguint32)(src).EncodeText(w)
} }
func (src OID) EncodeBinary(w io.Writer) (bool, error) { func (src Oid) EncodeBinary(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeBinary(w) return (pguint32)(src).EncodeBinary(w)
} }
+15 -15
View File
@@ -7,23 +7,23 @@ import (
"github.com/jackc/pgx/pgtype" "github.com/jackc/pgx/pgtype"
) )
func TestOIDTranscode(t *testing.T) { func TestOidTranscode(t *testing.T) {
testSuccessfulTranscode(t, "oid", []interface{}{ testSuccessfulTranscode(t, "oid", []interface{}{
pgtype.OID{Uint: 42, Status: pgtype.Present}, pgtype.Oid{Uint: 42, Status: pgtype.Present},
pgtype.OID{Status: pgtype.Null}, pgtype.Oid{Status: pgtype.Null},
}) })
} }
func TestOIDConvertFrom(t *testing.T) { func TestOidConvertFrom(t *testing.T) {
successfulTests := []struct { successfulTests := []struct {
source interface{} source interface{}
result pgtype.OID result pgtype.Oid
}{ }{
{source: uint32(1), result: pgtype.OID{Uint: 1, Status: pgtype.Present}}, {source: uint32(1), result: pgtype.Oid{Uint: 1, Status: pgtype.Present}},
} }
for i, tt := range successfulTests { for i, tt := range successfulTests {
var r pgtype.OID var r pgtype.Oid
err := r.ConvertFrom(tt.source) err := r.ConvertFrom(tt.source)
if err != nil { if err != nil {
t.Errorf("%d: %v", i, err) t.Errorf("%d: %v", i, err)
@@ -35,17 +35,17 @@ func TestOIDConvertFrom(t *testing.T) {
} }
} }
func TestOIDAssignTo(t *testing.T) { func TestOidAssignTo(t *testing.T) {
var ui32 uint32 var ui32 uint32
var pui32 *uint32 var pui32 *uint32
simpleTests := []struct { simpleTests := []struct {
src pgtype.OID src pgtype.Oid
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.OID{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)}, {src: pgtype.Oid{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
{src: pgtype.OID{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))}, {src: pgtype.Oid{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
} }
for i, tt := range simpleTests { for i, tt := range simpleTests {
@@ -60,11 +60,11 @@ func TestOIDAssignTo(t *testing.T) {
} }
pointerAllocTests := []struct { pointerAllocTests := []struct {
src pgtype.OID src pgtype.Oid
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.OID{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)}, {src: pgtype.Oid{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)},
} }
for i, tt := range pointerAllocTests { for i, tt := range pointerAllocTests {
@@ -79,10 +79,10 @@ func TestOIDAssignTo(t *testing.T) {
} }
errorTests := []struct { errorTests := []struct {
src pgtype.OID src pgtype.Oid
dst interface{} dst interface{}
}{ }{
{src: pgtype.OID{Status: pgtype.Null}, dst: &ui32}, {src: pgtype.Oid{Status: pgtype.Null}, dst: &ui32},
} }
for i, tt := range errorTests { for i, tt := range errorTests {
+41 -41
View File
@@ -7,47 +7,47 @@ import (
// PostgreSQL oids for common types // PostgreSQL oids for common types
const ( const (
BoolOID = 16 BoolOid = 16
ByteaOID = 17 ByteaOid = 17
CharOID = 18 CharOid = 18
NameOID = 19 NameOid = 19
Int8OID = 20 Int8Oid = 20
Int2OID = 21 Int2Oid = 21
Int4OID = 23 Int4Oid = 23
TextOID = 25 TextOid = 25
OIDOID = 26 OidOid = 26
TIDOID = 27 TidOid = 27
XIDOID = 28 XidOid = 28
CIDOID = 29 CidOid = 29
JSONOID = 114 JsonOid = 114
CidrOID = 650 CidrOid = 650
CidrArrayOID = 651 CidrArrayOid = 651
Float4OID = 700 Float4Oid = 700
Float8OID = 701 Float8Oid = 701
UnknownOID = 705 UnknownOid = 705
InetOID = 869 InetOid = 869
BoolArrayOID = 1000 BoolArrayOid = 1000
Int2ArrayOID = 1005 Int2ArrayOid = 1005
Int4ArrayOID = 1007 Int4ArrayOid = 1007
TextArrayOID = 1009 TextArrayOid = 1009
ByteaArrayOID = 1001 ByteaArrayOid = 1001
VarcharArrayOID = 1015 VarcharArrayOid = 1015
Int8ArrayOID = 1016 Int8ArrayOid = 1016
Float4ArrayOID = 1021 Float4ArrayOid = 1021
Float8ArrayOID = 1022 Float8ArrayOid = 1022
ACLItemOID = 1033 AclitemOid = 1033
ACLItemArrayOID = 1034 AclitemArrayOid = 1034
InetArrayOID = 1041 InetArrayOid = 1041
VarcharOID = 1043 VarcharOid = 1043
DateOID = 1082 DateOid = 1082
TimestampOID = 1114 TimestampOid = 1114
TimestampArrayOID = 1115 TimestampArrayOid = 1115
DateArrayOID = 1182 DateArrayOid = 1182
TimestamptzOID = 1184 TimestamptzOid = 1184
TimestamptzArrayOID = 1185 TimestamptzArrayOid = 1185
RecordOID = 2249 RecordOid = 2249
UUIDOID = 2950 UuidOid = 2950
JSONBOID = 3802 JsonbOid = 3802
) )
type Status byte type Status byte
+1 -1
View File
@@ -47,7 +47,7 @@ func mustClose(t testing.TB, conn interface {
} }
} }
func mustParseCIDR(t testing.TB, s string) *net.IPNet { func mustParseCidr(t testing.TB, s string) *net.IPNet {
_, ipnet, err := net.ParseCIDR(s) _, ipnet, err := net.ParseCIDR(s)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
+1 -1
View File
@@ -10,7 +10,7 @@ import (
) )
// pguint32 is the core type that is used to implement PostgreSQL types such as // pguint32 is the core type that is used to implement PostgreSQL types such as
// CID and XID. // Cid and Xid.
type pguint32 struct { type pguint32 struct {
Uint uint32 Uint uint32
Status Status Status Status
+3 -3
View File
@@ -229,10 +229,10 @@ func (src *TextArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *TextArray) EncodeBinary(w io.Writer) (bool, error) { func (src *TextArray) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, TextOID) return src.encodeBinary(w, TextOid)
} }
func (src *TextArray) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *TextArray) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -241,7 +241,7 @@ func (src *TextArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+10 -10
View File
@@ -10,7 +10,7 @@ import (
"github.com/jackc/pgx/pgio" "github.com/jackc/pgx/pgio"
) )
// TID is PostgreSQL's Tuple Identifier type. // Tid is PostgreSQL's Tuple Identifier type.
// //
// When one does // When one does
// //
@@ -21,15 +21,15 @@ import (
// It is currently implemented as a pair unsigned two byte integers. // It is currently implemented as a pair unsigned two byte integers.
// Its conversion functions can be found in src/backend/utils/adt/tid.c // Its conversion functions can be found in src/backend/utils/adt/tid.c
// in the PostgreSQL sources. // in the PostgreSQL sources.
type TID struct { type Tid struct {
BlockNumber uint32 BlockNumber uint32
OffsetNumber uint16 OffsetNumber uint16
Status Status Status Status
} }
func (dst *TID) DecodeText(src []byte) error { func (dst *Tid) DecodeText(src []byte) error {
if src == nil { if src == nil {
*dst = TID{Status: Null} *dst = Tid{Status: Null}
return nil return nil
} }
@@ -52,13 +52,13 @@ func (dst *TID) DecodeText(src []byte) error {
return err return err
} }
*dst = TID{BlockNumber: uint32(blockNumber), OffsetNumber: uint16(offsetNumber), Status: Present} *dst = Tid{BlockNumber: uint32(blockNumber), OffsetNumber: uint16(offsetNumber), Status: Present}
return nil return nil
} }
func (dst *TID) DecodeBinary(src []byte) error { func (dst *Tid) DecodeBinary(src []byte) error {
if src == nil { if src == nil {
*dst = TID{Status: Null} *dst = Tid{Status: Null}
return nil return nil
} }
@@ -66,7 +66,7 @@ func (dst *TID) DecodeBinary(src []byte) error {
return fmt.Errorf("invalid length for tid: %v", len(src)) return fmt.Errorf("invalid length for tid: %v", len(src))
} }
*dst = TID{ *dst = Tid{
BlockNumber: binary.BigEndian.Uint32(src), BlockNumber: binary.BigEndian.Uint32(src),
OffsetNumber: binary.BigEndian.Uint16(src[4:]), OffsetNumber: binary.BigEndian.Uint16(src[4:]),
Status: Present, Status: Present,
@@ -74,7 +74,7 @@ func (dst *TID) DecodeBinary(src []byte) error {
return nil return nil
} }
func (src TID) EncodeText(w io.Writer) (bool, error) { func (src Tid) EncodeText(w io.Writer) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -86,7 +86,7 @@ func (src TID) EncodeText(w io.Writer) (bool, error) {
return false, err return false, err
} }
func (src TID) EncodeBinary(w io.Writer) (bool, error) { func (src Tid) EncodeBinary(w io.Writer) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
+4 -4
View File
@@ -6,10 +6,10 @@ import (
"github.com/jackc/pgx/pgtype" "github.com/jackc/pgx/pgtype"
) )
func TestTIDTranscode(t *testing.T) { func TestTidTranscode(t *testing.T) {
testSuccessfulTranscode(t, "tid", []interface{}{ testSuccessfulTranscode(t, "tid", []interface{}{
pgtype.TID{BlockNumber: 42, OffsetNumber: 43, Status: pgtype.Present}, pgtype.Tid{BlockNumber: 42, OffsetNumber: 43, Status: pgtype.Present},
pgtype.TID{BlockNumber: 4294967295, OffsetNumber: 65535, Status: pgtype.Present}, pgtype.Tid{BlockNumber: 4294967295, OffsetNumber: 65535, Status: pgtype.Present},
pgtype.TID{Status: pgtype.Null}, pgtype.Tid{Status: pgtype.Null},
}) })
} }
+3 -3
View File
@@ -230,10 +230,10 @@ func (src *TimestampArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *TimestampArray) EncodeBinary(w io.Writer) (bool, error) { func (src *TimestampArray) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, TimestampOID) return src.encodeBinary(w, TimestampOid)
} }
func (src *TimestampArray) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *TimestampArray) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -242,7 +242,7 @@ func (src *TimestampArray) encodeBinary(w io.Writer, elementOID int32) (bool, er
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+3 -3
View File
@@ -230,10 +230,10 @@ func (src *TimestamptzArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *TimestamptzArray) EncodeBinary(w io.Writer) (bool, error) { func (src *TimestamptzArray) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, TimestamptzOID) return src.encodeBinary(w, TimestamptzOid)
} }
func (src *TimestamptzArray) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *TimestamptzArray) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -242,7 +242,7 @@ func (src *TimestamptzArray) encodeBinary(w io.Writer, elementOID int32) (bool,
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+2 -2
View File
@@ -231,7 +231,7 @@ func (src *<%= pgtype_array_type %>) EncodeBinary(w io.Writer) (bool, error) {
return src.encodeBinary(w, <%= element_oid %>) return src.encodeBinary(w, <%= element_oid %>)
} }
func (src *<%= pgtype_array_type %>) encodeBinary(w io.Writer, elementOID int32) (bool, error) { func (src *<%= pgtype_array_type %>) encodeBinary(w io.Writer, elementOid int32) (bool, error) {
switch src.Status { switch src.Status {
case Null: case Null:
return true, nil return true, nil
@@ -240,7 +240,7 @@ func (src *<%= pgtype_array_type %>) encodeBinary(w io.Writer, elementOID int32)
} }
arrayHeader := ArrayHeader{ arrayHeader := ArrayHeader{
ElementOID: elementOID, ElementOid: elementOid,
Dimensions: src.Dimensions, Dimensions: src.Dimensions,
} }
+13 -13
View File
@@ -1,13 +1,13 @@
erb pgtype_array_type=Int2Array pgtype_element_type=Int2 go_array_types=[]int16,[]uint16 element_oid=Int2OID text_null=NULL typed_array.go.erb > int2_array.go erb pgtype_array_type=Int2Array pgtype_element_type=Int2 go_array_types=[]int16,[]uint16 element_oid=Int2Oid text_null=NULL typed_array.go.erb > int2_array.go
erb pgtype_array_type=Int4Array pgtype_element_type=Int4 go_array_types=[]int32,[]uint32 element_oid=Int4OID text_null=NULL typed_array.go.erb > int4_array.go erb pgtype_array_type=Int4Array pgtype_element_type=Int4 go_array_types=[]int32,[]uint32 element_oid=Int4Oid text_null=NULL typed_array.go.erb > int4_array.go
erb pgtype_array_type=Int8Array pgtype_element_type=Int8 go_array_types=[]int64,[]uint64 element_oid=Int8OID text_null=NULL typed_array.go.erb > int8_array.go erb pgtype_array_type=Int8Array pgtype_element_type=Int8 go_array_types=[]int64,[]uint64 element_oid=Int8Oid text_null=NULL typed_array.go.erb > int8_array.go
erb pgtype_array_type=BoolArray pgtype_element_type=Bool go_array_types=[]bool element_oid=BoolOID text_null=NULL typed_array.go.erb > bool_array.go erb pgtype_array_type=BoolArray pgtype_element_type=Bool go_array_types=[]bool element_oid=BoolOid text_null=NULL typed_array.go.erb > bool_array.go
erb pgtype_array_type=DateArray pgtype_element_type=Date go_array_types=[]time.Time element_oid=DateOID text_null=NULL typed_array.go.erb > date_array.go erb pgtype_array_type=DateArray pgtype_element_type=Date go_array_types=[]time.Time element_oid=DateOid text_null=NULL typed_array.go.erb > date_array.go
erb pgtype_array_type=TimestamptzArray pgtype_element_type=Timestamptz go_array_types=[]time.Time element_oid=TimestamptzOID text_null=NULL typed_array.go.erb > timestamptz_array.go erb pgtype_array_type=TimestamptzArray pgtype_element_type=Timestamptz go_array_types=[]time.Time element_oid=TimestamptzOid text_null=NULL typed_array.go.erb > timestamptz_array.go
erb pgtype_array_type=TimestampArray pgtype_element_type=Timestamp go_array_types=[]time.Time element_oid=TimestampOID text_null=NULL typed_array.go.erb > timestamp_array.go erb pgtype_array_type=TimestampArray pgtype_element_type=Timestamp go_array_types=[]time.Time element_oid=TimestampOid text_null=NULL typed_array.go.erb > timestamp_array.go
erb pgtype_array_type=Float4Array pgtype_element_type=Float4 go_array_types=[]float32 element_oid=Float4OID text_null=NULL typed_array.go.erb > float4_array.go erb pgtype_array_type=Float4Array pgtype_element_type=Float4 go_array_types=[]float32 element_oid=Float4Oid text_null=NULL typed_array.go.erb > float4_array.go
erb pgtype_array_type=Float8Array pgtype_element_type=Float8 go_array_types=[]float64 element_oid=Float8OID text_null=NULL typed_array.go.erb > float8_array.go erb pgtype_array_type=Float8Array pgtype_element_type=Float8 go_array_types=[]float64 element_oid=Float8Oid text_null=NULL typed_array.go.erb > float8_array.go
erb pgtype_array_type=InetArray pgtype_element_type=Inet go_array_types=[]*net.IPNet,[]net.IP element_oid=InetOID text_null=NULL typed_array.go.erb > inet_array.go erb pgtype_array_type=InetArray pgtype_element_type=Inet go_array_types=[]*net.IPNet,[]net.IP element_oid=InetOid text_null=NULL typed_array.go.erb > inet_array.go
erb pgtype_array_type=TextArray pgtype_element_type=Text go_array_types=[]string element_oid=TextOID text_null='"NULL"' typed_array.go.erb > text_array.go erb pgtype_array_type=TextArray pgtype_element_type=Text go_array_types=[]string element_oid=TextOid text_null='"NULL"' typed_array.go.erb > text_array.go
erb pgtype_array_type=ByteaArray pgtype_element_type=Bytea go_array_types=[][]byte element_oid=ByteaOID text_null=NULL typed_array.go.erb > bytea_array.go erb pgtype_array_type=ByteaArray pgtype_element_type=Bytea go_array_types=[][]byte element_oid=ByteaOid text_null=NULL typed_array.go.erb > bytea_array.go
erb pgtype_array_type=ACLItemArray pgtype_element_type=ACLItem go_array_types=[]string element_oid=ACLItemOID text_null=NULL typed_array.go.erb > aclitem_array.go erb pgtype_array_type=AclitemArray pgtype_element_type=Aclitem go_array_types=[]string element_oid=AclitemOid text_null=NULL typed_array.go.erb > aclitem_array.go
+1 -1
View File
@@ -27,5 +27,5 @@ func (src *VarcharArray) EncodeText(w io.Writer) (bool, error) {
} }
func (src *VarcharArray) EncodeBinary(w io.Writer) (bool, error) { func (src *VarcharArray) EncodeBinary(w io.Writer) (bool, error) {
return (*TextArray)(src).encodeBinary(w, VarcharOID) return (*TextArray)(src).encodeBinary(w, VarcharOid)
} }
+10 -10
View File
@@ -4,7 +4,7 @@ import (
"io" "io"
) )
// XID is PostgreSQL's Transaction ID type. // Xid is PostgreSQL's Transaction ID type.
// //
// In later versions of PostgreSQL, it is the type used for the backend_xid // In later versions of PostgreSQL, it is the type used for the backend_xid
// and backend_xmin columns of the pg_stat_activity system view. // and backend_xmin columns of the pg_stat_activity system view.
@@ -18,33 +18,33 @@ import (
// It is currently implemented as an unsigned four byte integer. // It is currently implemented as an unsigned four byte integer.
// Its definition can be found in src/include/postgres_ext.h as TransactionId // Its definition can be found in src/include/postgres_ext.h as TransactionId
// in the PostgreSQL sources. // in the PostgreSQL sources.
type XID pguint32 type Xid pguint32
// ConvertFrom converts from src to dst. Note that as XID is not a general // 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 // number type ConvertFrom does not do automatic type conversion as other number
// types do. // types do.
func (dst *XID) ConvertFrom(src interface{}) error { func (dst *Xid) ConvertFrom(src interface{}) error {
return (*pguint32)(dst).ConvertFrom(src) return (*pguint32)(dst).ConvertFrom(src)
} }
// AssignTo assigns from src to dst. Note that as XID is not a general number // AssignTo assigns from src to dst. Note that as Xid is not a general number
// type AssignTo does not do automatic type conversion as other number types do. // type AssignTo does not do automatic type conversion as other number types do.
func (src *XID) AssignTo(dst interface{}) error { func (src *Xid) AssignTo(dst interface{}) error {
return (*pguint32)(src).AssignTo(dst) return (*pguint32)(src).AssignTo(dst)
} }
func (dst *XID) DecodeText(src []byte) error { func (dst *Xid) DecodeText(src []byte) error {
return (*pguint32)(dst).DecodeText(src) return (*pguint32)(dst).DecodeText(src)
} }
func (dst *XID) DecodeBinary(src []byte) error { func (dst *Xid) DecodeBinary(src []byte) error {
return (*pguint32)(dst).DecodeBinary(src) return (*pguint32)(dst).DecodeBinary(src)
} }
func (src XID) EncodeText(w io.Writer) (bool, error) { func (src Xid) EncodeText(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeText(w) return (pguint32)(src).EncodeText(w)
} }
func (src XID) EncodeBinary(w io.Writer) (bool, error) { func (src Xid) EncodeBinary(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeBinary(w) return (pguint32)(src).EncodeBinary(w)
} }
+15 -15
View File
@@ -7,23 +7,23 @@ import (
"github.com/jackc/pgx/pgtype" "github.com/jackc/pgx/pgtype"
) )
func TestXIDTranscode(t *testing.T) { func TestXidTranscode(t *testing.T) {
testSuccessfulTranscode(t, "xid", []interface{}{ testSuccessfulTranscode(t, "xid", []interface{}{
pgtype.XID{Uint: 42, Status: pgtype.Present}, pgtype.Xid{Uint: 42, Status: pgtype.Present},
pgtype.XID{Status: pgtype.Null}, pgtype.Xid{Status: pgtype.Null},
}) })
} }
func TestXIDConvertFrom(t *testing.T) { func TestXidConvertFrom(t *testing.T) {
successfulTests := []struct { successfulTests := []struct {
source interface{} source interface{}
result pgtype.XID result pgtype.Xid
}{ }{
{source: uint32(1), result: pgtype.XID{Uint: 1, Status: pgtype.Present}}, {source: uint32(1), result: pgtype.Xid{Uint: 1, Status: pgtype.Present}},
} }
for i, tt := range successfulTests { for i, tt := range successfulTests {
var r pgtype.XID var r pgtype.Xid
err := r.ConvertFrom(tt.source) err := r.ConvertFrom(tt.source)
if err != nil { if err != nil {
t.Errorf("%d: %v", i, err) t.Errorf("%d: %v", i, err)
@@ -35,17 +35,17 @@ func TestXIDConvertFrom(t *testing.T) {
} }
} }
func TestXIDAssignTo(t *testing.T) { func TestXidAssignTo(t *testing.T) {
var ui32 uint32 var ui32 uint32
var pui32 *uint32 var pui32 *uint32
simpleTests := []struct { simpleTests := []struct {
src pgtype.XID src pgtype.Xid
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.XID{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)}, {src: pgtype.Xid{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
{src: pgtype.XID{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))}, {src: pgtype.Xid{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
} }
for i, tt := range simpleTests { for i, tt := range simpleTests {
@@ -60,11 +60,11 @@ func TestXIDAssignTo(t *testing.T) {
} }
pointerAllocTests := []struct { pointerAllocTests := []struct {
src pgtype.XID src pgtype.Xid
dst interface{} dst interface{}
expected interface{} expected interface{}
}{ }{
{src: pgtype.XID{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)}, {src: pgtype.Xid{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)},
} }
for i, tt := range pointerAllocTests { for i, tt := range pointerAllocTests {
@@ -79,10 +79,10 @@ func TestXIDAssignTo(t *testing.T) {
} }
errorTests := []struct { errorTests := []struct {
src pgtype.XID src pgtype.Xid
dst interface{} dst interface{}
}{ }{
{src: pgtype.XID{Status: pgtype.Null}, dst: &ui32}, {src: pgtype.Xid{Status: pgtype.Null}, dst: &ui32},
} }
for i, tt := range errorTests { for i, tt := range errorTests {