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.
non-blocking
Jack Christensen 2017-03-11 17:03:23 -06:00
parent 44e206ab5b
commit 666af9ead5
35 changed files with 311 additions and 311 deletions

View File

@ -6,7 +6,7 @@ import (
"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:
//
// postgres=arwdDxt/postgres
@ -18,34 +18,34 @@ import (
//
// postgres=arwdDxt/"role with spaces"
//
type ACLItem struct {
type Aclitem struct {
String string
Status Status
}
func (dst *ACLItem) ConvertFrom(src interface{}) error {
func (dst *Aclitem) ConvertFrom(src interface{}) error {
switch value := src.(type) {
case ACLItem:
case Aclitem:
*dst = value
case string:
*dst = ACLItem{String: value, Status: Present}
*dst = Aclitem{String: value, Status: Present}
case *string:
if value == nil {
*dst = ACLItem{Status: Null}
*dst = Aclitem{Status: Null}
} else {
*dst = ACLItem{String: *value, Status: Present}
*dst = Aclitem{String: *value, Status: Present}
}
default:
if originalSrc, ok := underlyingStringType(src); ok {
return dst.ConvertFrom(originalSrc)
}
return fmt.Errorf("cannot convert %v to ACLItem", value)
return fmt.Errorf("cannot convert %v to Aclitem", value)
}
return nil
}
func (src *ACLItem) AssignTo(dst interface{}) error {
func (src *Aclitem) AssignTo(dst interface{}) error {
switch v := dst.(type) {
case *string:
if src.Status != Present {
@ -81,17 +81,17 @@ func (src *ACLItem) AssignTo(dst interface{}) error {
return nil
}
func (dst *ACLItem) DecodeText(src []byte) error {
func (dst *Aclitem) DecodeText(src []byte) error {
if src == nil {
*dst = ACLItem{Status: Null}
*dst = Aclitem{Status: Null}
return nil
}
*dst = ACLItem{String: string(src), Status: Present}
*dst = Aclitem{String: string(src), Status: Present}
return nil
}
func (src ACLItem) EncodeText(w io.Writer) (bool, error) {
func (src Aclitem) EncodeText(w io.Writer) (bool, error) {
switch src.Status {
case Null:
return true, nil

View File

@ -8,30 +8,30 @@ import (
"github.com/jackc/pgx/pgio"
)
type ACLItemArray struct {
Elements []ACLItem
type AclitemArray struct {
Elements []Aclitem
Dimensions []ArrayDimension
Status Status
}
func (dst *ACLItemArray) ConvertFrom(src interface{}) error {
func (dst *AclitemArray) ConvertFrom(src interface{}) error {
switch value := src.(type) {
case ACLItemArray:
case AclitemArray:
*dst = value
case []string:
if value == nil {
*dst = ACLItemArray{Status: Null}
*dst = AclitemArray{Status: Null}
} else if len(value) == 0 {
*dst = ACLItemArray{Status: Present}
*dst = AclitemArray{Status: Present}
} else {
elements := make([]ACLItem, len(value))
elements := make([]Aclitem, len(value))
for i := range value {
if err := elements[i].ConvertFrom(value[i]); err != nil {
return err
}
}
*dst = ACLItemArray{
*dst = AclitemArray{
Elements: elements,
Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}},
Status: Present,
@ -42,13 +42,13 @@ func (dst *ACLItemArray) ConvertFrom(src interface{}) error {
if originalSrc, ok := underlyingSliceType(src); ok {
return dst.ConvertFrom(originalSrc)
}
return fmt.Errorf("cannot convert %v to ACLItem", value)
return fmt.Errorf("cannot convert %v to Aclitem", value)
}
return nil
}
func (src *ACLItemArray) AssignTo(dst interface{}) error {
func (src *AclitemArray) AssignTo(dst interface{}) error {
switch v := dst.(type) {
case *[]string:
@ -73,9 +73,9 @@ func (src *ACLItemArray) AssignTo(dst interface{}) error {
return nil
}
func (dst *ACLItemArray) DecodeText(src []byte) error {
func (dst *AclitemArray) DecodeText(src []byte) error {
if src == nil {
*dst = ACLItemArray{Status: Null}
*dst = AclitemArray{Status: Null}
return nil
}
@ -84,13 +84,13 @@ func (dst *ACLItemArray) DecodeText(src []byte) error {
return err
}
var elements []ACLItem
var elements []Aclitem
if len(uta.Elements) > 0 {
elements = make([]ACLItem, len(uta.Elements))
elements = make([]Aclitem, len(uta.Elements))
for i, s := range uta.Elements {
var elem ACLItem
var elem Aclitem
var elemSrc []byte
if s != "NULL" {
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
}
func (src *ACLItemArray) EncodeText(w io.Writer) (bool, error) {
func (src *AclitemArray) EncodeText(w io.Writer) (bool, error) {
switch src.Status {
case Null:
return true, nil

View File

@ -7,40 +7,40 @@ import (
"github.com/jackc/pgx/pgtype"
)
func TestACLItemArrayTranscode(t *testing.T) {
func TestAclitemArrayTranscode(t *testing.T) {
testSuccessfulTranscode(t, "aclitem[]", []interface{}{
&pgtype.ACLItemArray{
&pgtype.AclitemArray{
Elements: nil,
Dimensions: nil,
Status: pgtype.Present,
},
&pgtype.ACLItemArray{
Elements: []pgtype.ACLItem{
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{Status: pgtype.Null},
&pgtype.AclitemArray{
Elements: []pgtype.Aclitem{
pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
pgtype.Aclitem{Status: pgtype.Null},
},
Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}},
Status: pgtype.Present,
},
&pgtype.ACLItemArray{Status: pgtype.Null},
&pgtype.ACLItemArray{
Elements: []pgtype.ACLItem{
pgtype.ACLItem{String: "=r/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: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{Status: pgtype.Null},
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present},
&pgtype.AclitemArray{Status: pgtype.Null},
&pgtype.AclitemArray{
Elements: []pgtype.Aclitem{
pgtype.Aclitem{String: "=r/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: "=r/postgres", Status: pgtype.Present},
pgtype.Aclitem{Status: pgtype.Null},
pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
},
Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}},
Status: pgtype.Present,
},
&pgtype.ACLItemArray{
Elements: []pgtype.ACLItem{
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: "=r/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
&pgtype.AclitemArray{
Elements: []pgtype.Aclitem{
pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
pgtype.Aclitem{String: "=r/postgres", Status: pgtype.Present},
pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
},
Dimensions: []pgtype.ArrayDimension{
{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 {
source interface{}
result pgtype.ACLItemArray
result pgtype.AclitemArray
}{
{
source: []string{"=r/postgres"},
result: pgtype.ACLItemArray{
Elements: []pgtype.ACLItem{{String: "=r/postgres", Status: pgtype.Present}},
result: pgtype.AclitemArray{
Elements: []pgtype.Aclitem{{String: "=r/postgres", Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present},
},
{
source: (([]string)(nil)),
result: pgtype.ACLItemArray{Status: pgtype.Null},
result: pgtype.AclitemArray{Status: pgtype.Null},
},
}
for i, tt := range successfulTests {
var r pgtype.ACLItemArray
var r pgtype.AclitemArray
err := r.ConvertFrom(tt.source)
if err != nil {
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
type _stringSlice []string
var namedStringSlice _stringSlice
simpleTests := []struct {
src pgtype.ACLItemArray
src pgtype.AclitemArray
dst interface{}
expected interface{}
}{
{
src: pgtype.ACLItemArray{
Elements: []pgtype.ACLItem{{String: "=r/postgres", Status: pgtype.Present}},
src: pgtype.AclitemArray{
Elements: []pgtype.Aclitem{{String: "=r/postgres", Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present,
},
@ -102,8 +102,8 @@ func TestACLItemArrayAssignTo(t *testing.T) {
expected: []string{"=r/postgres"},
},
{
src: pgtype.ACLItemArray{
Elements: []pgtype.ACLItem{{String: "=r/postgres", Status: pgtype.Present}},
src: pgtype.AclitemArray{
Elements: []pgtype.Aclitem{{String: "=r/postgres", Status: pgtype.Present}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present,
},
@ -111,7 +111,7 @@ func TestACLItemArrayAssignTo(t *testing.T) {
expected: _stringSlice{"=r/postgres"},
},
{
src: pgtype.ACLItemArray{Status: pgtype.Null},
src: pgtype.AclitemArray{Status: pgtype.Null},
dst: &stringSlice,
expected: (([]string)(nil)),
},
@ -129,12 +129,12 @@ func TestACLItemArrayAssignTo(t *testing.T) {
}
errorTests := []struct {
src pgtype.ACLItemArray
src pgtype.AclitemArray
dst interface{}
}{
{
src: pgtype.ACLItemArray{
Elements: []pgtype.ACLItem{{Status: pgtype.Null}},
src: pgtype.AclitemArray{
Elements: []pgtype.Aclitem{{Status: pgtype.Null}},
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
Status: pgtype.Present,
},

View File

@ -7,26 +7,26 @@ import (
"github.com/jackc/pgx/pgtype"
)
func TestACLItemTranscode(t *testing.T) {
func TestAclitemTranscode(t *testing.T) {
testSuccessfulTranscode(t, "aclitem", []interface{}{
pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
pgtype.ACLItem{String: `postgres=arwdDxt/" tricky, ' } "" \ test user "`, Status: pgtype.Present},
pgtype.ACLItem{Status: pgtype.Null},
pgtype.Aclitem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present},
pgtype.Aclitem{String: `postgres=arwdDxt/" tricky, ' } "" \ test user "`, Status: pgtype.Present},
pgtype.Aclitem{Status: pgtype.Null},
})
}
func TestACLItemConvertFrom(t *testing.T) {
func TestAclitemConvertFrom(t *testing.T) {
successfulTests := []struct {
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: "postgres=arwdDxt/postgres", result: pgtype.ACLItem{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}},
{source: (*string)(nil), result: pgtype.ACLItem{Status: pgtype.Null}},
{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: (*string)(nil), result: pgtype.Aclitem{Status: pgtype.Null}},
}
for i, tt := range successfulTests {
var d pgtype.ACLItem
var d pgtype.Aclitem
err := d.ConvertFrom(tt.source)
if err != nil {
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 ps *string
simpleTests := []struct {
src pgtype.ACLItem
src pgtype.Aclitem
dst interface{}
expected interface{}
}{
{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{String: "postgres=arwdDxt/postgres", Status: pgtype.Present}, dst: &s, expected: "postgres=arwdDxt/postgres"},
{src: pgtype.Aclitem{Status: pgtype.Null}, dst: &ps, expected: ((*string)(nil))},
}
for i, tt := range simpleTests {
@ -63,11 +63,11 @@ func TestACLItemAssignTo(t *testing.T) {
}
pointerAllocTests := []struct {
src pgtype.ACLItem
src pgtype.Aclitem
dst 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 {
@ -82,10 +82,10 @@ func TestACLItemAssignTo(t *testing.T) {
}
errorTests := []struct {
src pgtype.ACLItem
src pgtype.Aclitem
dst interface{}
}{
{src: pgtype.ACLItem{Status: pgtype.Null}, dst: &s},
{src: pgtype.Aclitem{Status: pgtype.Null}, dst: &s},
}
for i, tt := range errorTests {

View File

@ -18,7 +18,7 @@ import (
type ArrayHeader struct {
ContainsNull bool
ElementOID int32
ElementOid int32
Dimensions []ArrayDimension
}
@ -40,7 +40,7 @@ func (dst *ArrayHeader) DecodeBinary(src []byte) (int, error) {
dst.ContainsNull = binary.BigEndian.Uint32(src[rp:]) == 1
rp += 4
dst.ElementOID = int32(binary.BigEndian.Uint32(src[rp:]))
dst.ElementOid = int32(binary.BigEndian.Uint32(src[rp:]))
rp += 4
if numDims > 0 {
@ -75,7 +75,7 @@ func (src *ArrayHeader) EncodeBinary(w io.Writer) error {
return err
}
_, err = pgio.WriteInt32(w, src.ElementOID)
_, err = pgio.WriteInt32(w, src.ElementOid)
if err != nil {
return err
}

View File

@ -229,10 +229,10 @@ func (src *BoolArray) EncodeText(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 {
case Null:
return true, nil
@ -241,7 +241,7 @@ func (src *BoolArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

View File

@ -229,10 +229,10 @@ func (src *ByteaArray) EncodeText(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 {
case Null:
return true, nil
@ -241,7 +241,7 @@ func (src *ByteaArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

20
cid.go
View File

@ -4,7 +4,7 @@ import (
"io"
)
// CID is PostgreSQL's Command Identifier type.
// Cid is PostgreSQL's Command Identifier type.
//
// When one does
//
@ -15,33 +15,33 @@ import (
// It is currently implemented as an unsigned four byte integer.
// Its definition can be found in src/include/c.h as CommandId
// 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
// types do.
func (dst *CID) ConvertFrom(src interface{}) error {
func (dst *Cid) ConvertFrom(src interface{}) error {
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.
func (src *CID) AssignTo(dst interface{}) error {
func (src *Cid) AssignTo(dst interface{}) error {
return (*pguint32)(src).AssignTo(dst)
}
func (dst *CID) DecodeText(src []byte) error {
func (dst *Cid) DecodeText(src []byte) error {
return (*pguint32)(dst).DecodeText(src)
}
func (dst *CID) DecodeBinary(src []byte) error {
func (dst *Cid) DecodeBinary(src []byte) error {
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)
}
func (src CID) EncodeBinary(w io.Writer) (bool, error) {
func (src Cid) EncodeBinary(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeBinary(w)
}

View File

@ -7,23 +7,23 @@ import (
"github.com/jackc/pgx/pgtype"
)
func TestCIDTranscode(t *testing.T) {
func TestCidTranscode(t *testing.T) {
testSuccessfulTranscode(t, "cid", []interface{}{
pgtype.CID{Uint: 42, Status: pgtype.Present},
pgtype.CID{Status: pgtype.Null},
pgtype.Cid{Uint: 42, Status: pgtype.Present},
pgtype.Cid{Status: pgtype.Null},
})
}
func TestCIDConvertFrom(t *testing.T) {
func TestCidConvertFrom(t *testing.T) {
successfulTests := []struct {
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 {
var r pgtype.CID
var r pgtype.Cid
err := r.ConvertFrom(tt.source)
if err != nil {
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 pui32 *uint32
simpleTests := []struct {
src pgtype.CID
src pgtype.Cid
dst interface{}
expected interface{}
}{
{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{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
{src: pgtype.Cid{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
}
for i, tt := range simpleTests {
@ -60,11 +60,11 @@ func TestCIDAssignTo(t *testing.T) {
}
pointerAllocTests := []struct {
src pgtype.CID
src pgtype.Cid
dst 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 {
@ -79,10 +79,10 @@ func TestCIDAssignTo(t *testing.T) {
}
errorTests := []struct {
src pgtype.CID
src pgtype.Cid
dst interface{}
}{
{src: pgtype.CID{Status: pgtype.Null}, dst: &ui32},
{src: pgtype.Cid{Status: pgtype.Null}, dst: &ui32},
}
for i, tt := range errorTests {

View File

@ -27,5 +27,5 @@ func (src *CidrArray) EncodeText(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)
}

View File

@ -230,10 +230,10 @@ func (src *DateArray) EncodeText(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 {
case Null:
return true, nil
@ -242,7 +242,7 @@ func (src *DateArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

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
Could be useful for arrays of types without defined OIDs like hstore.
Could be useful for arrays of types without defined Oids like hstore.

View File

@ -229,10 +229,10 @@ func (src *Float4Array) EncodeText(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 {
case Null:
return true, nil
@ -241,7 +241,7 @@ func (src *Float4Array) encodeBinary(w io.Writer, elementOID int32) (bool, error
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

View File

@ -229,10 +229,10 @@ func (src *Float8Array) EncodeText(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 {
case Null:
return true, nil
@ -241,7 +241,7 @@ func (src *Float8Array) encodeBinary(w io.Writer, elementOID int32) (bool, error
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

View File

@ -261,10 +261,10 @@ func (src *InetArray) EncodeText(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 {
case Null:
return true, nil
@ -273,7 +273,7 @@ func (src *InetArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

View File

@ -17,7 +17,7 @@ func TestInetArrayTranscode(t *testing.T) {
},
&pgtype.InetArray{
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},
},
Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}},
@ -26,22 +26,22 @@ func TestInetArrayTranscode(t *testing.T) {
&pgtype.InetArray{Status: pgtype.Null},
&pgtype.InetArray{
Elements: []pgtype.Inet{
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, "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, "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, "192.168.0.1/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
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}},
Status: pgtype.Present,
},
&pgtype.InetArray{
Elements: []pgtype.Inet{
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, "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, "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, "192.168.0.1/32"), Status: pgtype.Present},
pgtype.Inet{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
},
Dimensions: []pgtype.ArrayDimension{
{Length: 2, LowerBound: 4},
@ -58,9 +58,9 @@ func TestInetArrayConvertFrom(t *testing.T) {
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{
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}},
Status: pgtype.Present},
},
@ -69,9 +69,9 @@ func TestInetArrayConvertFrom(t *testing.T) {
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{
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}},
Status: pgtype.Present},
},
@ -105,12 +105,12 @@ func TestInetArrayAssignTo(t *testing.T) {
}{
{
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}},
Status: pgtype.Present,
},
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{
@ -123,12 +123,12 @@ func TestInetArrayAssignTo(t *testing.T) {
},
{
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}},
Status: pgtype.Present,
},
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{

View File

@ -11,16 +11,16 @@ import (
func TestInetTranscode(t *testing.T) {
for _, pgTypeName := range []string{"inet", "cidr"} {
testSuccessfulTranscode(t, pgTypeName, []interface{}{
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, "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, "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, "::/128"), 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, "2607:f8b0:4009:80b::200e/128"), 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, "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, "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, "::/128"), 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, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
pgtype.Inet{Status: pgtype.Null},
})
}
@ -31,10 +31,10 @@ func TestInetConvertFrom(t *testing.T) {
source interface{}
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: 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: "127.0.0.1/32", result: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
{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").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}},
}
for i, tt := range successfulTests {
@ -61,8 +61,8 @@ func TestInetAssignTo(t *testing.T) {
dst 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: &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: &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{Status: pgtype.Null}, dst: &pipnet, expected: ((*net.IPNet)(nil))},
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pip, expected: ((*net.IP)(nil))},
}
@ -83,8 +83,8 @@ func TestInetAssignTo(t *testing.T) {
dst 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: &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: &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},
}
for i, tt := range pointerAllocTests {
@ -102,7 +102,7 @@ func TestInetAssignTo(t *testing.T) {
src pgtype.Inet
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},
}

View File

@ -260,10 +260,10 @@ func (src *Int2Array) EncodeText(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 {
case Null:
return true, nil
@ -272,7 +272,7 @@ func (src *Int2Array) encodeBinary(w io.Writer, elementOID int32) (bool, error)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

View File

@ -260,10 +260,10 @@ func (src *Int4Array) EncodeText(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 {
case Null:
return true, nil
@ -272,7 +272,7 @@ func (src *Int4Array) encodeBinary(w io.Writer, elementOID int32) (bool, error)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

View File

@ -260,10 +260,10 @@ func (src *Int8Array) EncodeText(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 {
case Null:
return true, nil
@ -272,7 +272,7 @@ func (src *Int8Array) encodeBinary(w io.Writer, elementOID int32) (bool, error)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

20
oid.go
View File

@ -4,38 +4,38 @@ import (
"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
// 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
// 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
// types do.
func (dst *OID) ConvertFrom(src interface{}) error {
func (dst *Oid) ConvertFrom(src interface{}) error {
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.
func (src *OID) AssignTo(dst interface{}) error {
func (src *Oid) AssignTo(dst interface{}) error {
return (*pguint32)(src).AssignTo(dst)
}
func (dst *OID) DecodeText(src []byte) error {
func (dst *Oid) DecodeText(src []byte) error {
return (*pguint32)(dst).DecodeText(src)
}
func (dst *OID) DecodeBinary(src []byte) error {
func (dst *Oid) DecodeBinary(src []byte) error {
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)
}
func (src OID) EncodeBinary(w io.Writer) (bool, error) {
func (src Oid) EncodeBinary(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeBinary(w)
}

View File

@ -7,23 +7,23 @@ import (
"github.com/jackc/pgx/pgtype"
)
func TestOIDTranscode(t *testing.T) {
func TestOidTranscode(t *testing.T) {
testSuccessfulTranscode(t, "oid", []interface{}{
pgtype.OID{Uint: 42, Status: pgtype.Present},
pgtype.OID{Status: pgtype.Null},
pgtype.Oid{Uint: 42, Status: pgtype.Present},
pgtype.Oid{Status: pgtype.Null},
})
}
func TestOIDConvertFrom(t *testing.T) {
func TestOidConvertFrom(t *testing.T) {
successfulTests := []struct {
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 {
var r pgtype.OID
var r pgtype.Oid
err := r.ConvertFrom(tt.source)
if err != nil {
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 pui32 *uint32
simpleTests := []struct {
src pgtype.OID
src pgtype.Oid
dst interface{}
expected interface{}
}{
{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{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
{src: pgtype.Oid{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
}
for i, tt := range simpleTests {
@ -60,11 +60,11 @@ func TestOIDAssignTo(t *testing.T) {
}
pointerAllocTests := []struct {
src pgtype.OID
src pgtype.Oid
dst 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 {
@ -79,10 +79,10 @@ func TestOIDAssignTo(t *testing.T) {
}
errorTests := []struct {
src pgtype.OID
src pgtype.Oid
dst interface{}
}{
{src: pgtype.OID{Status: pgtype.Null}, dst: &ui32},
{src: pgtype.Oid{Status: pgtype.Null}, dst: &ui32},
}
for i, tt := range errorTests {

View File

@ -7,47 +7,47 @@ import (
// PostgreSQL oids for common types
const (
BoolOID = 16
ByteaOID = 17
CharOID = 18
NameOID = 19
Int8OID = 20
Int2OID = 21
Int4OID = 23
TextOID = 25
OIDOID = 26
TIDOID = 27
XIDOID = 28
CIDOID = 29
JSONOID = 114
CidrOID = 650
CidrArrayOID = 651
Float4OID = 700
Float8OID = 701
UnknownOID = 705
InetOID = 869
BoolArrayOID = 1000
Int2ArrayOID = 1005
Int4ArrayOID = 1007
TextArrayOID = 1009
ByteaArrayOID = 1001
VarcharArrayOID = 1015
Int8ArrayOID = 1016
Float4ArrayOID = 1021
Float8ArrayOID = 1022
ACLItemOID = 1033
ACLItemArrayOID = 1034
InetArrayOID = 1041
VarcharOID = 1043
DateOID = 1082
TimestampOID = 1114
TimestampArrayOID = 1115
DateArrayOID = 1182
TimestamptzOID = 1184
TimestamptzArrayOID = 1185
RecordOID = 2249
UUIDOID = 2950
JSONBOID = 3802
BoolOid = 16
ByteaOid = 17
CharOid = 18
NameOid = 19
Int8Oid = 20
Int2Oid = 21
Int4Oid = 23
TextOid = 25
OidOid = 26
TidOid = 27
XidOid = 28
CidOid = 29
JsonOid = 114
CidrOid = 650
CidrArrayOid = 651
Float4Oid = 700
Float8Oid = 701
UnknownOid = 705
InetOid = 869
BoolArrayOid = 1000
Int2ArrayOid = 1005
Int4ArrayOid = 1007
TextArrayOid = 1009
ByteaArrayOid = 1001
VarcharArrayOid = 1015
Int8ArrayOid = 1016
Float4ArrayOid = 1021
Float8ArrayOid = 1022
AclitemOid = 1033
AclitemArrayOid = 1034
InetArrayOid = 1041
VarcharOid = 1043
DateOid = 1082
TimestampOid = 1114
TimestampArrayOid = 1115
DateArrayOid = 1182
TimestamptzOid = 1184
TimestamptzArrayOid = 1185
RecordOid = 2249
UuidOid = 2950
JsonbOid = 3802
)
type Status byte

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)
if err != nil {
t.Fatal(err)

View File

@ -10,7 +10,7 @@ import (
)
// pguint32 is the core type that is used to implement PostgreSQL types such as
// CID and XID.
// Cid and Xid.
type pguint32 struct {
Uint uint32
Status Status

View File

@ -229,10 +229,10 @@ func (src *TextArray) EncodeText(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 {
case Null:
return true, nil
@ -241,7 +241,7 @@ func (src *TextArray) encodeBinary(w io.Writer, elementOID int32) (bool, error)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

20
tid.go
View File

@ -10,7 +10,7 @@ import (
"github.com/jackc/pgx/pgio"
)
// TID is PostgreSQL's Tuple Identifier type.
// Tid is PostgreSQL's Tuple Identifier type.
//
// When one does
//
@ -21,15 +21,15 @@ import (
// It is currently implemented as a pair unsigned two byte integers.
// Its conversion functions can be found in src/backend/utils/adt/tid.c
// in the PostgreSQL sources.
type TID struct {
type Tid struct {
BlockNumber uint32
OffsetNumber uint16
Status Status
}
func (dst *TID) DecodeText(src []byte) error {
func (dst *Tid) DecodeText(src []byte) error {
if src == nil {
*dst = TID{Status: Null}
*dst = Tid{Status: Null}
return nil
}
@ -52,13 +52,13 @@ func (dst *TID) DecodeText(src []byte) error {
return err
}
*dst = TID{BlockNumber: uint32(blockNumber), OffsetNumber: uint16(offsetNumber), Status: Present}
*dst = Tid{BlockNumber: uint32(blockNumber), OffsetNumber: uint16(offsetNumber), Status: Present}
return nil
}
func (dst *TID) DecodeBinary(src []byte) error {
func (dst *Tid) DecodeBinary(src []byte) error {
if src == nil {
*dst = TID{Status: Null}
*dst = Tid{Status: Null}
return nil
}
@ -66,7 +66,7 @@ func (dst *TID) DecodeBinary(src []byte) error {
return fmt.Errorf("invalid length for tid: %v", len(src))
}
*dst = TID{
*dst = Tid{
BlockNumber: binary.BigEndian.Uint32(src),
OffsetNumber: binary.BigEndian.Uint16(src[4:]),
Status: Present,
@ -74,7 +74,7 @@ func (dst *TID) DecodeBinary(src []byte) error {
return nil
}
func (src TID) EncodeText(w io.Writer) (bool, error) {
func (src Tid) EncodeText(w io.Writer) (bool, error) {
switch src.Status {
case Null:
return true, nil
@ -86,7 +86,7 @@ func (src TID) EncodeText(w io.Writer) (bool, error) {
return false, err
}
func (src TID) EncodeBinary(w io.Writer) (bool, error) {
func (src Tid) EncodeBinary(w io.Writer) (bool, error) {
switch src.Status {
case Null:
return true, nil

View File

@ -6,10 +6,10 @@ import (
"github.com/jackc/pgx/pgtype"
)
func TestTIDTranscode(t *testing.T) {
func TestTidTranscode(t *testing.T) {
testSuccessfulTranscode(t, "tid", []interface{}{
pgtype.TID{BlockNumber: 42, OffsetNumber: 43, Status: pgtype.Present},
pgtype.TID{BlockNumber: 4294967295, OffsetNumber: 65535, Status: pgtype.Present},
pgtype.TID{Status: pgtype.Null},
pgtype.Tid{BlockNumber: 42, OffsetNumber: 43, Status: pgtype.Present},
pgtype.Tid{BlockNumber: 4294967295, OffsetNumber: 65535, Status: pgtype.Present},
pgtype.Tid{Status: pgtype.Null},
})
}

View File

@ -230,10 +230,10 @@ func (src *TimestampArray) EncodeText(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 {
case Null:
return true, nil
@ -242,7 +242,7 @@ func (src *TimestampArray) encodeBinary(w io.Writer, elementOID int32) (bool, er
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

View File

@ -230,10 +230,10 @@ func (src *TimestamptzArray) EncodeText(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 {
case Null:
return true, nil
@ -242,7 +242,7 @@ func (src *TimestamptzArray) encodeBinary(w io.Writer, elementOID int32) (bool,
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

View File

@ -231,7 +231,7 @@ func (src *<%= pgtype_array_type %>) EncodeBinary(w io.Writer) (bool, error) {
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 {
case Null:
return true, nil
@ -240,7 +240,7 @@ func (src *<%= pgtype_array_type %>) encodeBinary(w io.Writer, elementOID int32)
}
arrayHeader := ArrayHeader{
ElementOID: elementOID,
ElementOid: elementOid,
Dimensions: src.Dimensions,
}

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=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=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=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=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=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=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=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=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=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=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=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=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=AclitemArray pgtype_element_type=Aclitem go_array_types=[]string element_oid=AclitemOid text_null=NULL typed_array.go.erb > aclitem_array.go

View File

@ -27,5 +27,5 @@ func (src *VarcharArray) EncodeText(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)
}

20
xid.go
View File

@ -4,7 +4,7 @@ import (
"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
// 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.
// Its definition can be found in src/include/postgres_ext.h as TransactionId
// 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
// types do.
func (dst *XID) ConvertFrom(src interface{}) error {
func (dst *Xid) ConvertFrom(src interface{}) error {
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.
func (src *XID) AssignTo(dst interface{}) error {
func (src *Xid) AssignTo(dst interface{}) error {
return (*pguint32)(src).AssignTo(dst)
}
func (dst *XID) DecodeText(src []byte) error {
func (dst *Xid) DecodeText(src []byte) error {
return (*pguint32)(dst).DecodeText(src)
}
func (dst *XID) DecodeBinary(src []byte) error {
func (dst *Xid) DecodeBinary(src []byte) error {
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)
}
func (src XID) EncodeBinary(w io.Writer) (bool, error) {
func (src Xid) EncodeBinary(w io.Writer) (bool, error) {
return (pguint32)(src).EncodeBinary(w)
}

View File

@ -7,23 +7,23 @@ import (
"github.com/jackc/pgx/pgtype"
)
func TestXIDTranscode(t *testing.T) {
func TestXidTranscode(t *testing.T) {
testSuccessfulTranscode(t, "xid", []interface{}{
pgtype.XID{Uint: 42, Status: pgtype.Present},
pgtype.XID{Status: pgtype.Null},
pgtype.Xid{Uint: 42, Status: pgtype.Present},
pgtype.Xid{Status: pgtype.Null},
})
}
func TestXIDConvertFrom(t *testing.T) {
func TestXidConvertFrom(t *testing.T) {
successfulTests := []struct {
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 {
var r pgtype.XID
var r pgtype.Xid
err := r.ConvertFrom(tt.source)
if err != nil {
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 pui32 *uint32
simpleTests := []struct {
src pgtype.XID
src pgtype.Xid
dst interface{}
expected interface{}
}{
{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{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
{src: pgtype.Xid{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
}
for i, tt := range simpleTests {
@ -60,11 +60,11 @@ func TestXIDAssignTo(t *testing.T) {
}
pointerAllocTests := []struct {
src pgtype.XID
src pgtype.Xid
dst 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 {
@ -79,10 +79,10 @@ func TestXIDAssignTo(t *testing.T) {
}
errorTests := []struct {
src pgtype.XID
src pgtype.Xid
dst interface{}
}{
{src: pgtype.XID{Status: pgtype.Null}, dst: &ui32},
{src: pgtype.Xid{Status: pgtype.Null}, dst: &ui32},
}
for i, tt := range errorTests {