mirror of https://github.com/jackc/pgx.git
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
parent
44e206ab5b
commit
666af9ead5
26
aclitem.go
26
aclitem.go
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
|
|
|
@ -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 {
|
||||
|
|
6
array.go
6
array.go
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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
20
cid.go
|
@ -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)
|
||||
}
|
||||
|
|
30
cid_test.go
30
cid_test.go
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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{
|
||||
|
|
38
inet_test.go
38
inet_test.go
|
@ -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},
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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
20
oid.go
|
@ -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)
|
||||
}
|
||||
|
|
30
oid_test.go
30
oid_test.go
|
@ -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 {
|
||||
|
|
82
pgtype.go
82
pgtype.go
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
20
tid.go
|
@ -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
|
||||
|
|
|
@ -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},
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
20
xid.go
|
@ -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)
|
||||
}
|
||||
|
|
30
xid_test.go
30
xid_test.go
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue