Use Go casing convention for CID/TID/XID/CIDR
This commit is contained in:
@@ -146,7 +146,7 @@ JSON and JSONB Mapping
|
|||||||
pgx includes built-in support to marshal and unmarshal between Go types and
|
pgx includes built-in support to marshal and unmarshal between Go types and
|
||||||
the PostgreSQL JSON and JSONB.
|
the PostgreSQL JSON and JSONB.
|
||||||
|
|
||||||
Inet and Cidr Mapping
|
Inet and CIDR Mapping
|
||||||
|
|
||||||
pgx encodes from net.IPNet to and from inet and cidr PostgreSQL types. In
|
pgx encodes from net.IPNet to and from inet and cidr PostgreSQL types. In
|
||||||
addition, as a convenience pgx will encode from a net.IP; it will assume a /32
|
addition, as a convenience pgx will encode from a net.IP; it will assume a /32
|
||||||
|
|||||||
+13
-13
@@ -4,7 +4,7 @@ import (
|
|||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Cid is PostgreSQL's Command Identifier type.
|
// CID is PostgreSQL's Command Identifier type.
|
||||||
//
|
//
|
||||||
// When one does
|
// When one does
|
||||||
//
|
//
|
||||||
@@ -15,47 +15,47 @@ import (
|
|||||||
// It is currently implemented as an unsigned four byte integer.
|
// It is currently implemented as an unsigned four byte integer.
|
||||||
// Its definition can be found in src/include/c.h as CommandId
|
// Its definition can be found in src/include/c.h as CommandId
|
||||||
// in the PostgreSQL sources.
|
// in the PostgreSQL sources.
|
||||||
type Cid pguint32
|
type CID pguint32
|
||||||
|
|
||||||
// Set converts from src to dst. Note that as Cid is not a general
|
// Set converts from src to dst. Note that as CID is not a general
|
||||||
// number type Set does not do automatic type conversion as other number
|
// number type Set does not do automatic type conversion as other number
|
||||||
// types do.
|
// types do.
|
||||||
func (dst *Cid) Set(src interface{}) error {
|
func (dst *CID) Set(src interface{}) error {
|
||||||
return (*pguint32)(dst).Set(src)
|
return (*pguint32)(dst).Set(src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Cid) Get() interface{} {
|
func (dst *CID) Get() interface{} {
|
||||||
return (*pguint32)(dst).Get()
|
return (*pguint32)(dst).Get()
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssignTo assigns from src to dst. Note that as Cid is not a general number
|
// AssignTo assigns from src to dst. Note that as CID is not a general number
|
||||||
// type AssignTo does not do automatic type conversion as other number types do.
|
// type AssignTo does not do automatic type conversion as other number types do.
|
||||||
func (src *Cid) AssignTo(dst interface{}) error {
|
func (src *CID) AssignTo(dst interface{}) error {
|
||||||
return (*pguint32)(src).AssignTo(dst)
|
return (*pguint32)(src).AssignTo(dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Cid) DecodeText(ci *ConnInfo, src []byte) error {
|
func (dst *CID) DecodeText(ci *ConnInfo, src []byte) error {
|
||||||
return (*pguint32)(dst).DecodeText(ci, src)
|
return (*pguint32)(dst).DecodeText(ci, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Cid) DecodeBinary(ci *ConnInfo, src []byte) error {
|
func (dst *CID) DecodeBinary(ci *ConnInfo, src []byte) error {
|
||||||
return (*pguint32)(dst).DecodeBinary(ci, src)
|
return (*pguint32)(dst).DecodeBinary(ci, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Cid) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *CID) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
return (*pguint32)(src).EncodeText(ci, buf)
|
return (*pguint32)(src).EncodeText(ci, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Cid) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *CID) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
return (*pguint32)(src).EncodeBinary(ci, buf)
|
return (*pguint32)(src).EncodeBinary(ci, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan implements the database/sql Scanner interface.
|
// Scan implements the database/sql Scanner interface.
|
||||||
func (dst *Cid) Scan(src interface{}) error {
|
func (dst *CID) Scan(src interface{}) error {
|
||||||
return (*pguint32)(dst).Scan(src)
|
return (*pguint32)(dst).Scan(src)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Value implements the database/sql/driver Valuer interface.
|
// Value implements the database/sql/driver Valuer interface.
|
||||||
func (src *Cid) Value() (driver.Value, error) {
|
func (src *CID) Value() (driver.Value, error) {
|
||||||
return (*pguint32)(src).Value()
|
return (*pguint32)(src).Value()
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-15
@@ -8,11 +8,11 @@ import (
|
|||||||
"github.com/jackc/pgx/pgtype/testutil"
|
"github.com/jackc/pgx/pgtype/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCidTranscode(t *testing.T) {
|
func TestCIDTranscode(t *testing.T) {
|
||||||
pgTypeName := "cid"
|
pgTypeName := "cid"
|
||||||
values := []interface{}{
|
values := []interface{}{
|
||||||
&pgtype.Cid{Uint: 42, Status: pgtype.Present},
|
&pgtype.CID{Uint: 42, Status: pgtype.Present},
|
||||||
&pgtype.Cid{Status: pgtype.Null},
|
&pgtype.CID{Status: pgtype.Null},
|
||||||
}
|
}
|
||||||
eqFunc := func(a, b interface{}) bool {
|
eqFunc := func(a, b interface{}) bool {
|
||||||
return reflect.DeepEqual(a, b)
|
return reflect.DeepEqual(a, b)
|
||||||
@@ -28,16 +28,16 @@ func TestCidTranscode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCidSet(t *testing.T) {
|
func TestCIDSet(t *testing.T) {
|
||||||
successfulTests := []struct {
|
successfulTests := []struct {
|
||||||
source interface{}
|
source interface{}
|
||||||
result pgtype.Cid
|
result pgtype.CID
|
||||||
}{
|
}{
|
||||||
{source: uint32(1), result: pgtype.Cid{Uint: 1, Status: pgtype.Present}},
|
{source: uint32(1), result: pgtype.CID{Uint: 1, Status: pgtype.Present}},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range successfulTests {
|
for i, tt := range successfulTests {
|
||||||
var r pgtype.Cid
|
var r pgtype.CID
|
||||||
err := r.Set(tt.source)
|
err := r.Set(tt.source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%d: %v", i, err)
|
t.Errorf("%d: %v", i, err)
|
||||||
@@ -49,17 +49,17 @@ func TestCidSet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCidAssignTo(t *testing.T) {
|
func TestCIDAssignTo(t *testing.T) {
|
||||||
var ui32 uint32
|
var ui32 uint32
|
||||||
var pui32 *uint32
|
var pui32 *uint32
|
||||||
|
|
||||||
simpleTests := []struct {
|
simpleTests := []struct {
|
||||||
src pgtype.Cid
|
src pgtype.CID
|
||||||
dst interface{}
|
dst interface{}
|
||||||
expected interface{}
|
expected interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Cid{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
|
{src: pgtype.CID{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
|
||||||
{src: pgtype.Cid{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
|
{src: pgtype.CID{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range simpleTests {
|
for i, tt := range simpleTests {
|
||||||
@@ -74,11 +74,11 @@ func TestCidAssignTo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pointerAllocTests := []struct {
|
pointerAllocTests := []struct {
|
||||||
src pgtype.Cid
|
src pgtype.CID
|
||||||
dst interface{}
|
dst interface{}
|
||||||
expected interface{}
|
expected interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Cid{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)},
|
{src: pgtype.CID{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range pointerAllocTests {
|
for i, tt := range pointerAllocTests {
|
||||||
@@ -93,10 +93,10 @@ func TestCidAssignTo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
errorTests := []struct {
|
errorTests := []struct {
|
||||||
src pgtype.Cid
|
src pgtype.CID
|
||||||
dst interface{}
|
dst interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Cid{Status: pgtype.Null}, dst: &ui32},
|
{src: pgtype.CID{Status: pgtype.Null}, dst: &ui32},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range errorTests {
|
for i, tt := range errorTests {
|
||||||
|
|||||||
+8
-8
@@ -1,31 +1,31 @@
|
|||||||
package pgtype
|
package pgtype
|
||||||
|
|
||||||
type Cidr Inet
|
type CIDR Inet
|
||||||
|
|
||||||
func (dst *Cidr) Set(src interface{}) error {
|
func (dst *CIDR) Set(src interface{}) error {
|
||||||
return (*Inet)(dst).Set(src)
|
return (*Inet)(dst).Set(src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Cidr) Get() interface{} {
|
func (dst *CIDR) Get() interface{} {
|
||||||
return (*Inet)(dst).Get()
|
return (*Inet)(dst).Get()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Cidr) AssignTo(dst interface{}) error {
|
func (src *CIDR) AssignTo(dst interface{}) error {
|
||||||
return (*Inet)(src).AssignTo(dst)
|
return (*Inet)(src).AssignTo(dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Cidr) DecodeText(ci *ConnInfo, src []byte) error {
|
func (dst *CIDR) DecodeText(ci *ConnInfo, src []byte) error {
|
||||||
return (*Inet)(dst).DecodeText(ci, src)
|
return (*Inet)(dst).DecodeText(ci, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Cidr) DecodeBinary(ci *ConnInfo, src []byte) error {
|
func (dst *CIDR) DecodeBinary(ci *ConnInfo, src []byte) error {
|
||||||
return (*Inet)(dst).DecodeBinary(ci, src)
|
return (*Inet)(dst).DecodeBinary(ci, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Cidr) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *CIDR) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
return (*Inet)(src).EncodeText(ci, buf)
|
return (*Inet)(src).EncodeText(ci, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Cidr) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *CIDR) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
return (*Inet)(src).EncodeBinary(ci, buf)
|
return (*Inet)(src).EncodeBinary(ci, buf)
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-29
@@ -9,28 +9,28 @@ import (
|
|||||||
"github.com/jackc/pgx/pgio"
|
"github.com/jackc/pgx/pgio"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CidrArray struct {
|
type CIDRArray struct {
|
||||||
Elements []Cidr
|
Elements []CIDR
|
||||||
Dimensions []ArrayDimension
|
Dimensions []ArrayDimension
|
||||||
Status Status
|
Status Status
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *CidrArray) Set(src interface{}) error {
|
func (dst *CIDRArray) Set(src interface{}) error {
|
||||||
switch value := src.(type) {
|
switch value := src.(type) {
|
||||||
|
|
||||||
case []*net.IPNet:
|
case []*net.IPNet:
|
||||||
if value == nil {
|
if value == nil {
|
||||||
*dst = CidrArray{Status: Null}
|
*dst = CIDRArray{Status: Null}
|
||||||
} else if len(value) == 0 {
|
} else if len(value) == 0 {
|
||||||
*dst = CidrArray{Status: Present}
|
*dst = CIDRArray{Status: Present}
|
||||||
} else {
|
} else {
|
||||||
elements := make([]Cidr, len(value))
|
elements := make([]CIDR, len(value))
|
||||||
for i := range value {
|
for i := range value {
|
||||||
if err := elements[i].Set(value[i]); err != nil {
|
if err := elements[i].Set(value[i]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*dst = CidrArray{
|
*dst = CIDRArray{
|
||||||
Elements: elements,
|
Elements: elements,
|
||||||
Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}},
|
Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}},
|
||||||
Status: Present,
|
Status: Present,
|
||||||
@@ -39,17 +39,17 @@ func (dst *CidrArray) Set(src interface{}) error {
|
|||||||
|
|
||||||
case []net.IP:
|
case []net.IP:
|
||||||
if value == nil {
|
if value == nil {
|
||||||
*dst = CidrArray{Status: Null}
|
*dst = CIDRArray{Status: Null}
|
||||||
} else if len(value) == 0 {
|
} else if len(value) == 0 {
|
||||||
*dst = CidrArray{Status: Present}
|
*dst = CIDRArray{Status: Present}
|
||||||
} else {
|
} else {
|
||||||
elements := make([]Cidr, len(value))
|
elements := make([]CIDR, len(value))
|
||||||
for i := range value {
|
for i := range value {
|
||||||
if err := elements[i].Set(value[i]); err != nil {
|
if err := elements[i].Set(value[i]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*dst = CidrArray{
|
*dst = CIDRArray{
|
||||||
Elements: elements,
|
Elements: elements,
|
||||||
Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}},
|
Dimensions: []ArrayDimension{{Length: int32(len(elements)), LowerBound: 1}},
|
||||||
Status: Present,
|
Status: Present,
|
||||||
@@ -60,13 +60,13 @@ func (dst *CidrArray) Set(src interface{}) error {
|
|||||||
if originalSrc, ok := underlyingSliceType(src); ok {
|
if originalSrc, ok := underlyingSliceType(src); ok {
|
||||||
return dst.Set(originalSrc)
|
return dst.Set(originalSrc)
|
||||||
}
|
}
|
||||||
return fmt.Errorf("cannot convert %v to Cidr", value)
|
return fmt.Errorf("cannot convert %v to CIDR", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *CidrArray) Get() interface{} {
|
func (dst *CIDRArray) Get() interface{} {
|
||||||
switch dst.Status {
|
switch dst.Status {
|
||||||
case Present:
|
case Present:
|
||||||
return dst
|
return dst
|
||||||
@@ -77,7 +77,7 @@ func (dst *CidrArray) Get() interface{} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *CidrArray) AssignTo(dst interface{}) error {
|
func (src *CIDRArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
@@ -112,9 +112,9 @@ func (src *CidrArray) AssignTo(dst interface{}) error {
|
|||||||
return fmt.Errorf("cannot decode %v into %T", src, dst)
|
return fmt.Errorf("cannot decode %v into %T", src, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *CidrArray) DecodeText(ci *ConnInfo, src []byte) error {
|
func (dst *CIDRArray) DecodeText(ci *ConnInfo, src []byte) error {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
*dst = CidrArray{Status: Null}
|
*dst = CIDRArray{Status: Null}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,13 +123,13 @@ func (dst *CidrArray) DecodeText(ci *ConnInfo, src []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var elements []Cidr
|
var elements []CIDR
|
||||||
|
|
||||||
if len(uta.Elements) > 0 {
|
if len(uta.Elements) > 0 {
|
||||||
elements = make([]Cidr, len(uta.Elements))
|
elements = make([]CIDR, len(uta.Elements))
|
||||||
|
|
||||||
for i, s := range uta.Elements {
|
for i, s := range uta.Elements {
|
||||||
var elem Cidr
|
var elem CIDR
|
||||||
var elemSrc []byte
|
var elemSrc []byte
|
||||||
if s != "NULL" {
|
if s != "NULL" {
|
||||||
elemSrc = []byte(s)
|
elemSrc = []byte(s)
|
||||||
@@ -143,14 +143,14 @@ func (dst *CidrArray) DecodeText(ci *ConnInfo, src []byte) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*dst = CidrArray{Elements: elements, Dimensions: uta.Dimensions, Status: Present}
|
*dst = CIDRArray{Elements: elements, Dimensions: uta.Dimensions, Status: Present}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *CidrArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
func (dst *CIDRArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
*dst = CidrArray{Status: Null}
|
*dst = CIDRArray{Status: Null}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,7 +161,7 @@ func (dst *CidrArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(arrayHeader.Dimensions) == 0 {
|
if len(arrayHeader.Dimensions) == 0 {
|
||||||
*dst = CidrArray{Dimensions: arrayHeader.Dimensions, Status: Present}
|
*dst = CIDRArray{Dimensions: arrayHeader.Dimensions, Status: Present}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,7 +170,7 @@ func (dst *CidrArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||||||
elementCount *= d.Length
|
elementCount *= d.Length
|
||||||
}
|
}
|
||||||
|
|
||||||
elements := make([]Cidr, elementCount)
|
elements := make([]CIDR, elementCount)
|
||||||
|
|
||||||
for i := range elements {
|
for i := range elements {
|
||||||
elemLen := int(int32(binary.BigEndian.Uint32(src[rp:])))
|
elemLen := int(int32(binary.BigEndian.Uint32(src[rp:])))
|
||||||
@@ -186,11 +186,11 @@ func (dst *CidrArray) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*dst = CidrArray{Elements: elements, Dimensions: arrayHeader.Dimensions, Status: Present}
|
*dst = CIDRArray{Elements: elements, Dimensions: arrayHeader.Dimensions, Status: Present}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *CidrArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *CIDRArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Null:
|
case Null:
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@@ -247,7 +247,7 @@ func (src *CidrArray) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||||||
return buf, nil
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *CidrArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *CIDRArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Null:
|
case Null:
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@@ -292,7 +292,7 @@ func (src *CidrArray) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Scan implements the database/sql Scanner interface.
|
// Scan implements the database/sql Scanner interface.
|
||||||
func (dst *CidrArray) Scan(src interface{}) error {
|
func (dst *CIDRArray) Scan(src interface{}) error {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
return dst.DecodeText(nil, nil)
|
return dst.DecodeText(nil, nil)
|
||||||
}
|
}
|
||||||
@@ -310,7 +310,7 @@ func (dst *CidrArray) Scan(src interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Value implements the database/sql/driver Valuer interface.
|
// Value implements the database/sql/driver Valuer interface.
|
||||||
func (src *CidrArray) Value() (driver.Value, error) {
|
func (src *CIDRArray) Value() (driver.Value, error) {
|
||||||
buf, err := src.EncodeText(nil, nil)
|
buf, err := src.EncodeText(nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
+46
-46
@@ -9,40 +9,40 @@ import (
|
|||||||
"github.com/jackc/pgx/pgtype/testutil"
|
"github.com/jackc/pgx/pgtype/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCidrArrayTranscode(t *testing.T) {
|
func TestCIDRArrayTranscode(t *testing.T) {
|
||||||
testutil.TestSuccessfulTranscode(t, "cidr[]", []interface{}{
|
testutil.TestSuccessfulTranscode(t, "cidr[]", []interface{}{
|
||||||
&pgtype.CidrArray{
|
&pgtype.CIDRArray{
|
||||||
Elements: nil,
|
Elements: nil,
|
||||||
Dimensions: nil,
|
Dimensions: nil,
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
&pgtype.CidrArray{
|
&pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{
|
Elements: []pgtype.CIDR{
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present},
|
||||||
pgtype.Cidr{Status: pgtype.Null},
|
pgtype.CIDR{Status: pgtype.Null},
|
||||||
},
|
},
|
||||||
Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}},
|
Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
&pgtype.CidrArray{Status: pgtype.Null},
|
&pgtype.CIDRArray{Status: pgtype.Null},
|
||||||
&pgtype.CidrArray{
|
&pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{
|
Elements: []pgtype.CIDR{
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present},
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present},
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "192.168.0.1/32"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "192.168.0.1/32"), Status: pgtype.Present},
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
||||||
pgtype.Cidr{Status: pgtype.Null},
|
pgtype.CIDR{Status: pgtype.Null},
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "255.0.0.0/8"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "255.0.0.0/8"), Status: pgtype.Present},
|
||||||
},
|
},
|
||||||
Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}},
|
Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
&pgtype.CidrArray{
|
&pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{
|
Elements: []pgtype.CIDR{
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present},
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present},
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "192.168.0.1/32"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "192.168.0.1/32"), Status: pgtype.Present},
|
||||||
pgtype.Cidr{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
pgtype.CIDR{IPNet: mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
||||||
},
|
},
|
||||||
Dimensions: []pgtype.ArrayDimension{
|
Dimensions: []pgtype.ArrayDimension{
|
||||||
{Length: 2, LowerBound: 4},
|
{Length: 2, LowerBound: 4},
|
||||||
@@ -53,37 +53,37 @@ func TestCidrArrayTranscode(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCidrArraySet(t *testing.T) {
|
func TestCIDRArraySet(t *testing.T) {
|
||||||
successfulTests := []struct {
|
successfulTests := []struct {
|
||||||
source interface{}
|
source interface{}
|
||||||
result pgtype.CidrArray
|
result pgtype.CIDRArray
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
source: []*net.IPNet{mustParseCidr(t, "127.0.0.1/32")},
|
source: []*net.IPNet{mustParseCIDR(t, "127.0.0.1/32")},
|
||||||
result: pgtype.CidrArray{
|
result: pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
Elements: []pgtype.CIDR{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present},
|
Status: pgtype.Present},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: (([]*net.IPNet)(nil)),
|
source: (([]*net.IPNet)(nil)),
|
||||||
result: pgtype.CidrArray{Status: pgtype.Null},
|
result: pgtype.CIDRArray{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.CidrArray{
|
result: pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
Elements: []pgtype.CIDR{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present},
|
Status: pgtype.Present},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: (([]net.IP)(nil)),
|
source: (([]net.IP)(nil)),
|
||||||
result: pgtype.CidrArray{Status: pgtype.Null},
|
result: pgtype.CIDRArray{Status: pgtype.Null},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range successfulTests {
|
for i, tt := range successfulTests {
|
||||||
var r pgtype.CidrArray
|
var r pgtype.CIDRArray
|
||||||
err := r.Set(tt.source)
|
err := r.Set(tt.source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%d: %v", i, err)
|
t.Errorf("%d: %v", i, err)
|
||||||
@@ -95,27 +95,27 @@ func TestCidrArraySet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCidrArrayAssignTo(t *testing.T) {
|
func TestCIDRArrayAssignTo(t *testing.T) {
|
||||||
var ipnetSlice []*net.IPNet
|
var ipnetSlice []*net.IPNet
|
||||||
var ipSlice []net.IP
|
var ipSlice []net.IP
|
||||||
|
|
||||||
simpleTests := []struct {
|
simpleTests := []struct {
|
||||||
src pgtype.CidrArray
|
src pgtype.CIDRArray
|
||||||
dst interface{}
|
dst interface{}
|
||||||
expected interface{}
|
expected interface{}
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
src: pgtype.CidrArray{
|
src: pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
Elements: []pgtype.CIDR{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
dst: &ipnetSlice,
|
dst: &ipnetSlice,
|
||||||
expected: []*net.IPNet{mustParseCidr(t, "127.0.0.1/32")},
|
expected: []*net.IPNet{mustParseCIDR(t, "127.0.0.1/32")},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.CidrArray{
|
src: pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{{Status: pgtype.Null}},
|
Elements: []pgtype.CIDR{{Status: pgtype.Null}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
@@ -123,17 +123,17 @@ func TestCidrArrayAssignTo(t *testing.T) {
|
|||||||
expected: []*net.IPNet{nil},
|
expected: []*net.IPNet{nil},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.CidrArray{
|
src: pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
Elements: []pgtype.CIDR{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
dst: &ipSlice,
|
dst: &ipSlice,
|
||||||
expected: []net.IP{mustParseCidr(t, "127.0.0.1/32").IP},
|
expected: []net.IP{mustParseCIDR(t, "127.0.0.1/32").IP},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.CidrArray{
|
src: pgtype.CIDRArray{
|
||||||
Elements: []pgtype.Cidr{{Status: pgtype.Null}},
|
Elements: []pgtype.CIDR{{Status: pgtype.Null}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
@@ -141,12 +141,12 @@ func TestCidrArrayAssignTo(t *testing.T) {
|
|||||||
expected: []net.IP{nil},
|
expected: []net.IP{nil},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.CidrArray{Status: pgtype.Null},
|
src: pgtype.CIDRArray{Status: pgtype.Null},
|
||||||
dst: &ipnetSlice,
|
dst: &ipnetSlice,
|
||||||
expected: (([]*net.IPNet)(nil)),
|
expected: (([]*net.IPNet)(nil)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.CidrArray{Status: pgtype.Null},
|
src: pgtype.CIDRArray{Status: pgtype.Null},
|
||||||
dst: &ipSlice,
|
dst: &ipSlice,
|
||||||
expected: (([]net.IP)(nil)),
|
expected: (([]net.IP)(nil)),
|
||||||
},
|
},
|
||||||
|
|||||||
+18
-18
@@ -18,7 +18,7 @@ func TestInetArrayTranscode(t *testing.T) {
|
|||||||
},
|
},
|
||||||
&pgtype.InetArray{
|
&pgtype.InetArray{
|
||||||
Elements: []pgtype.Inet{
|
Elements: []pgtype.Inet{
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present},
|
||||||
pgtype.Inet{Status: pgtype.Null},
|
pgtype.Inet{Status: pgtype.Null},
|
||||||
},
|
},
|
||||||
Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}},
|
Dimensions: []pgtype.ArrayDimension{{Length: 2, LowerBound: 1}},
|
||||||
@@ -27,22 +27,22 @@ func TestInetArrayTranscode(t *testing.T) {
|
|||||||
&pgtype.InetArray{Status: pgtype.Null},
|
&pgtype.InetArray{Status: pgtype.Null},
|
||||||
&pgtype.InetArray{
|
&pgtype.InetArray{
|
||||||
Elements: []pgtype.Inet{
|
Elements: []pgtype.Inet{
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present},
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present},
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "192.168.0.1/32"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "192.168.0.1/32"), Status: pgtype.Present},
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
||||||
pgtype.Inet{Status: pgtype.Null},
|
pgtype.Inet{Status: pgtype.Null},
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "255.0.0.0/8"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "255.0.0.0/8"), Status: pgtype.Present},
|
||||||
},
|
},
|
||||||
Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}},
|
Dimensions: []pgtype.ArrayDimension{{Length: 3, LowerBound: 1}, {Length: 2, LowerBound: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
&pgtype.InetArray{
|
&pgtype.InetArray{
|
||||||
Elements: []pgtype.Inet{
|
Elements: []pgtype.Inet{
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present},
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present},
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "192.168.0.1/32"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "192.168.0.1/32"), Status: pgtype.Present},
|
||||||
pgtype.Inet{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
pgtype.Inet{IPNet: mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
||||||
},
|
},
|
||||||
Dimensions: []pgtype.ArrayDimension{
|
Dimensions: []pgtype.ArrayDimension{
|
||||||
{Length: 2, LowerBound: 4},
|
{Length: 2, LowerBound: 4},
|
||||||
@@ -59,9 +59,9 @@ func TestInetArraySet(t *testing.T) {
|
|||||||
result pgtype.InetArray
|
result pgtype.InetArray
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
source: []*net.IPNet{mustParseCidr(t, "127.0.0.1/32")},
|
source: []*net.IPNet{mustParseCIDR(t, "127.0.0.1/32")},
|
||||||
result: pgtype.InetArray{
|
result: pgtype.InetArray{
|
||||||
Elements: []pgtype.Inet{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
Elements: []pgtype.Inet{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present},
|
Status: pgtype.Present},
|
||||||
},
|
},
|
||||||
@@ -70,9 +70,9 @@ func TestInetArraySet(t *testing.T) {
|
|||||||
result: pgtype.InetArray{Status: pgtype.Null},
|
result: pgtype.InetArray{Status: pgtype.Null},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
source: []net.IP{mustParseCidr(t, "127.0.0.1/32").IP},
|
source: []net.IP{mustParseCIDR(t, "127.0.0.1/32").IP},
|
||||||
result: pgtype.InetArray{
|
result: pgtype.InetArray{
|
||||||
Elements: []pgtype.Inet{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
Elements: []pgtype.Inet{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present},
|
Status: pgtype.Present},
|
||||||
},
|
},
|
||||||
@@ -106,12 +106,12 @@ func TestInetArrayAssignTo(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
src: pgtype.InetArray{
|
src: pgtype.InetArray{
|
||||||
Elements: []pgtype.Inet{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
Elements: []pgtype.Inet{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
dst: &ipnetSlice,
|
dst: &ipnetSlice,
|
||||||
expected: []*net.IPNet{mustParseCidr(t, "127.0.0.1/32")},
|
expected: []*net.IPNet{mustParseCIDR(t, "127.0.0.1/32")},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.InetArray{
|
src: pgtype.InetArray{
|
||||||
@@ -124,12 +124,12 @@ func TestInetArrayAssignTo(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.InetArray{
|
src: pgtype.InetArray{
|
||||||
Elements: []pgtype.Inet{{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
Elements: []pgtype.Inet{{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
Dimensions: []pgtype.ArrayDimension{{LowerBound: 1, Length: 1}},
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
dst: &ipSlice,
|
dst: &ipSlice,
|
||||||
expected: []net.IP{mustParseCidr(t, "127.0.0.1/32").IP},
|
expected: []net.IP{mustParseCIDR(t, "127.0.0.1/32").IP},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.InetArray{
|
src: pgtype.InetArray{
|
||||||
|
|||||||
+18
-18
@@ -12,16 +12,16 @@ import (
|
|||||||
func TestInetTranscode(t *testing.T) {
|
func TestInetTranscode(t *testing.T) {
|
||||||
for _, pgTypeName := range []string{"inet", "cidr"} {
|
for _, pgTypeName := range []string{"inet", "cidr"} {
|
||||||
testutil.TestSuccessfulTranscode(t, pgTypeName, []interface{}{
|
testutil.TestSuccessfulTranscode(t, pgTypeName, []interface{}{
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "0.0.0.0/32"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "0.0.0.0/32"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "12.34.56.0/32"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "12.34.56.0/32"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "192.168.1.0/24"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "192.168.1.0/24"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "255.0.0.0/8"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "255.0.0.0/8"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "255.255.255.255/32"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "255.255.255.255/32"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "::/128"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "::/128"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "::/0"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "::/0"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "::1/128"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "::1/128"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{IPNet: mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
&pgtype.Inet{IPNet: mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"), Status: pgtype.Present},
|
||||||
&pgtype.Inet{Status: pgtype.Null},
|
&pgtype.Inet{Status: pgtype.Null},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -32,9 +32,9 @@ func TestInetSet(t *testing.T) {
|
|||||||
source interface{}
|
source interface{}
|
||||||
result pgtype.Inet
|
result pgtype.Inet
|
||||||
}{
|
}{
|
||||||
{source: mustParseCidr(t, "127.0.0.1/32"), result: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
{source: mustParseCIDR(t, "127.0.0.1/32"), result: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
{source: mustParseCidr(t, "127.0.0.1/32").IP, result: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
{source: mustParseCIDR(t, "127.0.0.1/32").IP, result: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
{source: "127.0.0.1/32", result: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
{source: "127.0.0.1/32", result: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range successfulTests {
|
for i, tt := range successfulTests {
|
||||||
@@ -61,8 +61,8 @@ func TestInetAssignTo(t *testing.T) {
|
|||||||
dst interface{}
|
dst interface{}
|
||||||
expected interface{}
|
expected interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ipnet, expected: *mustParseCidr(t, "127.0.0.1/32")},
|
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ipnet, expected: *mustParseCIDR(t, "127.0.0.1/32")},
|
||||||
{src: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ip, expected: mustParseCidr(t, "127.0.0.1/32").IP},
|
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &ip, expected: mustParseCIDR(t, "127.0.0.1/32").IP},
|
||||||
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pipnet, expected: ((*net.IPNet)(nil))},
|
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pipnet, expected: ((*net.IPNet)(nil))},
|
||||||
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pip, expected: ((*net.IP)(nil))},
|
{src: pgtype.Inet{Status: pgtype.Null}, dst: &pip, expected: ((*net.IP)(nil))},
|
||||||
}
|
}
|
||||||
@@ -83,8 +83,8 @@ func TestInetAssignTo(t *testing.T) {
|
|||||||
dst interface{}
|
dst interface{}
|
||||||
expected interface{}
|
expected interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &pipnet, expected: *mustParseCidr(t, "127.0.0.1/32")},
|
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &pipnet, expected: *mustParseCIDR(t, "127.0.0.1/32")},
|
||||||
{src: pgtype.Inet{IPNet: mustParseCidr(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &pip, expected: mustParseCidr(t, "127.0.0.1/32").IP},
|
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "127.0.0.1/32"), Status: pgtype.Present}, dst: &pip, expected: mustParseCIDR(t, "127.0.0.1/32").IP},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range pointerAllocTests {
|
for i, tt := range pointerAllocTests {
|
||||||
@@ -102,7 +102,7 @@ func TestInetAssignTo(t *testing.T) {
|
|||||||
src pgtype.Inet
|
src pgtype.Inet
|
||||||
dst interface{}
|
dst interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Inet{IPNet: mustParseCidr(t, "192.168.0.0/16"), Status: pgtype.Present}, dst: &ip},
|
{src: pgtype.Inet{IPNet: mustParseCIDR(t, "192.168.0.0/16"), Status: pgtype.Present}, dst: &ip},
|
||||||
{src: pgtype.Inet{Status: pgtype.Null}, dst: &ipnet},
|
{src: pgtype.Inet{Status: pgtype.Null}, dst: &ipnet},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-10
@@ -16,12 +16,12 @@ const (
|
|||||||
Int4OID = 23
|
Int4OID = 23
|
||||||
TextOID = 25
|
TextOID = 25
|
||||||
OIDOID = 26
|
OIDOID = 26
|
||||||
TidOID = 27
|
TIDOID = 27
|
||||||
XidOID = 28
|
XIDOID = 28
|
||||||
CidOID = 29
|
CIDOID = 29
|
||||||
JSONOID = 114
|
JSONOID = 114
|
||||||
CidrOID = 650
|
CIDROID = 650
|
||||||
CidrArrayOID = 651
|
CIDRArrayOID = 651
|
||||||
Float4OID = 700
|
Float4OID = 700
|
||||||
Float8OID = 701
|
Float8OID = 701
|
||||||
UnknownOID = 705
|
UnknownOID = 705
|
||||||
@@ -209,7 +209,7 @@ func init() {
|
|||||||
"_aclitem": &ACLItemArray{},
|
"_aclitem": &ACLItemArray{},
|
||||||
"_bool": &BoolArray{},
|
"_bool": &BoolArray{},
|
||||||
"_bytea": &ByteaArray{},
|
"_bytea": &ByteaArray{},
|
||||||
"_cidr": &CidrArray{},
|
"_cidr": &CIDRArray{},
|
||||||
"_date": &DateArray{},
|
"_date": &DateArray{},
|
||||||
"_float4": &Float4Array{},
|
"_float4": &Float4Array{},
|
||||||
"_float8": &Float8Array{},
|
"_float8": &Float8Array{},
|
||||||
@@ -227,8 +227,8 @@ func init() {
|
|||||||
"box": &Box{},
|
"box": &Box{},
|
||||||
"bytea": &Bytea{},
|
"bytea": &Bytea{},
|
||||||
"char": &QChar{},
|
"char": &QChar{},
|
||||||
"cid": &Cid{},
|
"cid": &CID{},
|
||||||
"cidr": &Cidr{},
|
"cidr": &CIDR{},
|
||||||
"circle": &Circle{},
|
"circle": &Circle{},
|
||||||
"date": &Date{},
|
"date": &Date{},
|
||||||
"daterange": &Daterange{},
|
"daterange": &Daterange{},
|
||||||
@@ -256,7 +256,7 @@ func init() {
|
|||||||
"polygon": &Polygon{},
|
"polygon": &Polygon{},
|
||||||
"record": &Record{},
|
"record": &Record{},
|
||||||
"text": &Text{},
|
"text": &Text{},
|
||||||
"tid": &Tid{},
|
"tid": &TID{},
|
||||||
"timestamp": &Timestamp{},
|
"timestamp": &Timestamp{},
|
||||||
"timestamptz": &Timestamptz{},
|
"timestamptz": &Timestamptz{},
|
||||||
"tsrange": &Tsrange{},
|
"tsrange": &Tsrange{},
|
||||||
@@ -265,6 +265,6 @@ func init() {
|
|||||||
"uuid": &UUID{},
|
"uuid": &UUID{},
|
||||||
"varbit": &Varbit{},
|
"varbit": &Varbit{},
|
||||||
"varchar": &Varchar{},
|
"varchar": &Varchar{},
|
||||||
"xid": &Xid{},
|
"xid": &XID{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ type _float32Slice []float32
|
|||||||
type _float64Slice []float64
|
type _float64Slice []float64
|
||||||
type _byteSlice []byte
|
type _byteSlice []byte
|
||||||
|
|
||||||
func mustParseCidr(t testing.TB, s string) *net.IPNet {
|
func mustParseCIDR(t testing.TB, s string) *net.IPNet {
|
||||||
_, ipnet, err := net.ParseCIDR(s)
|
_, ipnet, err := net.ParseCIDR(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// pguint32 is the core type that is used to implement PostgreSQL types such as
|
// pguint32 is the core type that is used to implement PostgreSQL types such as
|
||||||
// Cid and Xid.
|
// CID and XID.
|
||||||
type pguint32 struct {
|
type pguint32 struct {
|
||||||
Uint uint32
|
Uint uint32
|
||||||
Status Status
|
Status Status
|
||||||
|
|||||||
+17
-17
@@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/jackc/pgx/pgio"
|
"github.com/jackc/pgx/pgio"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Tid is PostgreSQL's Tuple Identifier type.
|
// TID is PostgreSQL's Tuple Identifier type.
|
||||||
//
|
//
|
||||||
// When one does
|
// When one does
|
||||||
//
|
//
|
||||||
@@ -21,17 +21,17 @@ import (
|
|||||||
// It is currently implemented as a pair unsigned two byte integers.
|
// It is currently implemented as a pair unsigned two byte integers.
|
||||||
// Its conversion functions can be found in src/backend/utils/adt/tid.c
|
// Its conversion functions can be found in src/backend/utils/adt/tid.c
|
||||||
// in the PostgreSQL sources.
|
// in the PostgreSQL sources.
|
||||||
type Tid struct {
|
type TID struct {
|
||||||
BlockNumber uint32
|
BlockNumber uint32
|
||||||
OffsetNumber uint16
|
OffsetNumber uint16
|
||||||
Status Status
|
Status Status
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Tid) Set(src interface{}) error {
|
func (dst *TID) Set(src interface{}) error {
|
||||||
return fmt.Errorf("cannot convert %v to Tid", src)
|
return fmt.Errorf("cannot convert %v to TID", src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Tid) Get() interface{} {
|
func (dst *TID) Get() interface{} {
|
||||||
switch dst.Status {
|
switch dst.Status {
|
||||||
case Present:
|
case Present:
|
||||||
return dst
|
return dst
|
||||||
@@ -42,13 +42,13 @@ func (dst *Tid) Get() interface{} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Tid) AssignTo(dst interface{}) error {
|
func (src *TID) AssignTo(dst interface{}) error {
|
||||||
return fmt.Errorf("cannot assign %v to %T", src, dst)
|
return fmt.Errorf("cannot assign %v to %T", src, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Tid) DecodeText(ci *ConnInfo, src []byte) error {
|
func (dst *TID) DecodeText(ci *ConnInfo, src []byte) error {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
*dst = Tid{Status: Null}
|
*dst = TID{Status: Null}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,13 +71,13 @@ func (dst *Tid) DecodeText(ci *ConnInfo, src []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
*dst = Tid{BlockNumber: uint32(blockNumber), OffsetNumber: uint16(offsetNumber), Status: Present}
|
*dst = TID{BlockNumber: uint32(blockNumber), OffsetNumber: uint16(offsetNumber), Status: Present}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Tid) DecodeBinary(ci *ConnInfo, src []byte) error {
|
func (dst *TID) DecodeBinary(ci *ConnInfo, src []byte) error {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
*dst = Tid{Status: Null}
|
*dst = TID{Status: Null}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ func (dst *Tid) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||||||
return fmt.Errorf("invalid length for tid: %v", len(src))
|
return fmt.Errorf("invalid length for tid: %v", len(src))
|
||||||
}
|
}
|
||||||
|
|
||||||
*dst = Tid{
|
*dst = TID{
|
||||||
BlockNumber: binary.BigEndian.Uint32(src),
|
BlockNumber: binary.BigEndian.Uint32(src),
|
||||||
OffsetNumber: binary.BigEndian.Uint16(src[4:]),
|
OffsetNumber: binary.BigEndian.Uint16(src[4:]),
|
||||||
Status: Present,
|
Status: Present,
|
||||||
@@ -93,7 +93,7 @@ func (dst *Tid) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Tid) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *TID) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Null:
|
case Null:
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@@ -105,7 +105,7 @@ func (src *Tid) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||||||
return buf, nil
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Tid) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *TID) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Null:
|
case Null:
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@@ -119,9 +119,9 @@ func (src *Tid) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Scan implements the database/sql Scanner interface.
|
// Scan implements the database/sql Scanner interface.
|
||||||
func (dst *Tid) Scan(src interface{}) error {
|
func (dst *TID) Scan(src interface{}) error {
|
||||||
if src == nil {
|
if src == nil {
|
||||||
*dst = Tid{Status: Null}
|
*dst = TID{Status: Null}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,6 +138,6 @@ func (dst *Tid) Scan(src interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Value implements the database/sql/driver Valuer interface.
|
// Value implements the database/sql/driver Valuer interface.
|
||||||
func (src *Tid) Value() (driver.Value, error) {
|
func (src *TID) Value() (driver.Value, error) {
|
||||||
return EncodeValueText(src)
|
return EncodeValueText(src)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -7,10 +7,10 @@ import (
|
|||||||
"github.com/jackc/pgx/pgtype/testutil"
|
"github.com/jackc/pgx/pgtype/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestTidTranscode(t *testing.T) {
|
func TestTIDTranscode(t *testing.T) {
|
||||||
testutil.TestSuccessfulTranscode(t, "tid", []interface{}{
|
testutil.TestSuccessfulTranscode(t, "tid", []interface{}{
|
||||||
&pgtype.Tid{BlockNumber: 42, OffsetNumber: 43, Status: pgtype.Present},
|
&pgtype.TID{BlockNumber: 42, OffsetNumber: 43, Status: pgtype.Present},
|
||||||
&pgtype.Tid{BlockNumber: 4294967295, OffsetNumber: 65535, Status: pgtype.Present},
|
&pgtype.TID{BlockNumber: 4294967295, OffsetNumber: 65535, Status: pgtype.Present},
|
||||||
&pgtype.Tid{Status: pgtype.Null},
|
&pgtype.TID{Status: pgtype.Null},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ erb pgtype_array_type=TimestampArray pgtype_element_type=Timestamp go_array_type
|
|||||||
erb pgtype_array_type=Float4Array pgtype_element_type=Float4 go_array_types=[]float32 element_type_name=float4 text_null=NULL binary_format=true typed_array.go.erb > float4_array.go
|
erb pgtype_array_type=Float4Array pgtype_element_type=Float4 go_array_types=[]float32 element_type_name=float4 text_null=NULL binary_format=true typed_array.go.erb > float4_array.go
|
||||||
erb pgtype_array_type=Float8Array pgtype_element_type=Float8 go_array_types=[]float64 element_type_name=float8 text_null=NULL binary_format=true typed_array.go.erb > float8_array.go
|
erb pgtype_array_type=Float8Array pgtype_element_type=Float8 go_array_types=[]float64 element_type_name=float8 text_null=NULL binary_format=true typed_array.go.erb > float8_array.go
|
||||||
erb pgtype_array_type=InetArray pgtype_element_type=Inet go_array_types=[]*net.IPNet,[]net.IP element_type_name=inet text_null=NULL binary_format=true typed_array.go.erb > inet_array.go
|
erb pgtype_array_type=InetArray pgtype_element_type=Inet go_array_types=[]*net.IPNet,[]net.IP element_type_name=inet text_null=NULL binary_format=true typed_array.go.erb > inet_array.go
|
||||||
erb pgtype_array_type=CidrArray pgtype_element_type=Cidr go_array_types=[]*net.IPNet,[]net.IP element_type_name=cidr text_null=NULL binary_format=true typed_array.go.erb > cidr_array.go
|
erb pgtype_array_type=CIDRArray pgtype_element_type=CIDR go_array_types=[]*net.IPNet,[]net.IP element_type_name=cidr text_null=NULL binary_format=true typed_array.go.erb > cidr_array.go
|
||||||
erb pgtype_array_type=TextArray pgtype_element_type=Text go_array_types=[]string element_type_name=text text_null='"NULL"' binary_format=true typed_array.go.erb > text_array.go
|
erb pgtype_array_type=TextArray pgtype_element_type=Text go_array_types=[]string element_type_name=text text_null='"NULL"' binary_format=true typed_array.go.erb > text_array.go
|
||||||
erb pgtype_array_type=VarcharArray pgtype_element_type=Varchar go_array_types=[]string element_type_name=varchar text_null='"NULL"' binary_format=true typed_array.go.erb > varchar_array.go
|
erb pgtype_array_type=VarcharArray pgtype_element_type=Varchar go_array_types=[]string element_type_name=varchar text_null='"NULL"' binary_format=true typed_array.go.erb > varchar_array.go
|
||||||
erb pgtype_array_type=ByteaArray pgtype_element_type=Bytea go_array_types=[][]byte element_type_name=bytea text_null=NULL binary_format=true typed_array.go.erb > bytea_array.go
|
erb pgtype_array_type=ByteaArray pgtype_element_type=Bytea go_array_types=[][]byte element_type_name=bytea text_null=NULL binary_format=true typed_array.go.erb > bytea_array.go
|
||||||
|
|||||||
+13
-13
@@ -4,7 +4,7 @@ import (
|
|||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Xid is PostgreSQL's Transaction ID type.
|
// XID is PostgreSQL's Transaction ID type.
|
||||||
//
|
//
|
||||||
// In later versions of PostgreSQL, it is the type used for the backend_xid
|
// In later versions of PostgreSQL, it is the type used for the backend_xid
|
||||||
// and backend_xmin columns of the pg_stat_activity system view.
|
// and backend_xmin columns of the pg_stat_activity system view.
|
||||||
@@ -18,47 +18,47 @@ import (
|
|||||||
// It is currently implemented as an unsigned four byte integer.
|
// It is currently implemented as an unsigned four byte integer.
|
||||||
// Its definition can be found in src/include/postgres_ext.h as TransactionId
|
// Its definition can be found in src/include/postgres_ext.h as TransactionId
|
||||||
// in the PostgreSQL sources.
|
// in the PostgreSQL sources.
|
||||||
type Xid pguint32
|
type XID pguint32
|
||||||
|
|
||||||
// Set converts from src to dst. Note that as Xid is not a general
|
// Set converts from src to dst. Note that as XID is not a general
|
||||||
// number type Set does not do automatic type conversion as other number
|
// number type Set does not do automatic type conversion as other number
|
||||||
// types do.
|
// types do.
|
||||||
func (dst *Xid) Set(src interface{}) error {
|
func (dst *XID) Set(src interface{}) error {
|
||||||
return (*pguint32)(dst).Set(src)
|
return (*pguint32)(dst).Set(src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Xid) Get() interface{} {
|
func (dst *XID) Get() interface{} {
|
||||||
return (*pguint32)(dst).Get()
|
return (*pguint32)(dst).Get()
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssignTo assigns from src to dst. Note that as Xid is not a general number
|
// AssignTo assigns from src to dst. Note that as XID is not a general number
|
||||||
// type AssignTo does not do automatic type conversion as other number types do.
|
// type AssignTo does not do automatic type conversion as other number types do.
|
||||||
func (src *Xid) AssignTo(dst interface{}) error {
|
func (src *XID) AssignTo(dst interface{}) error {
|
||||||
return (*pguint32)(src).AssignTo(dst)
|
return (*pguint32)(src).AssignTo(dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Xid) DecodeText(ci *ConnInfo, src []byte) error {
|
func (dst *XID) DecodeText(ci *ConnInfo, src []byte) error {
|
||||||
return (*pguint32)(dst).DecodeText(ci, src)
|
return (*pguint32)(dst).DecodeText(ci, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dst *Xid) DecodeBinary(ci *ConnInfo, src []byte) error {
|
func (dst *XID) DecodeBinary(ci *ConnInfo, src []byte) error {
|
||||||
return (*pguint32)(dst).DecodeBinary(ci, src)
|
return (*pguint32)(dst).DecodeBinary(ci, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Xid) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *XID) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
return (*pguint32)(src).EncodeText(ci, buf)
|
return (*pguint32)(src).EncodeText(ci, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src *Xid) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
func (src *XID) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
||||||
return (*pguint32)(src).EncodeBinary(ci, buf)
|
return (*pguint32)(src).EncodeBinary(ci, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan implements the database/sql Scanner interface.
|
// Scan implements the database/sql Scanner interface.
|
||||||
func (dst *Xid) Scan(src interface{}) error {
|
func (dst *XID) Scan(src interface{}) error {
|
||||||
return (*pguint32)(dst).Scan(src)
|
return (*pguint32)(dst).Scan(src)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Value implements the database/sql/driver Valuer interface.
|
// Value implements the database/sql/driver Valuer interface.
|
||||||
func (src *Xid) Value() (driver.Value, error) {
|
func (src *XID) Value() (driver.Value, error) {
|
||||||
return (*pguint32)(src).Value()
|
return (*pguint32)(src).Value()
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-15
@@ -8,11 +8,11 @@ import (
|
|||||||
"github.com/jackc/pgx/pgtype/testutil"
|
"github.com/jackc/pgx/pgtype/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestXidTranscode(t *testing.T) {
|
func TestXIDTranscode(t *testing.T) {
|
||||||
pgTypeName := "xid"
|
pgTypeName := "xid"
|
||||||
values := []interface{}{
|
values := []interface{}{
|
||||||
&pgtype.Xid{Uint: 42, Status: pgtype.Present},
|
&pgtype.XID{Uint: 42, Status: pgtype.Present},
|
||||||
&pgtype.Xid{Status: pgtype.Null},
|
&pgtype.XID{Status: pgtype.Null},
|
||||||
}
|
}
|
||||||
eqFunc := func(a, b interface{}) bool {
|
eqFunc := func(a, b interface{}) bool {
|
||||||
return reflect.DeepEqual(a, b)
|
return reflect.DeepEqual(a, b)
|
||||||
@@ -28,16 +28,16 @@ func TestXidTranscode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestXidSet(t *testing.T) {
|
func TestXIDSet(t *testing.T) {
|
||||||
successfulTests := []struct {
|
successfulTests := []struct {
|
||||||
source interface{}
|
source interface{}
|
||||||
result pgtype.Xid
|
result pgtype.XID
|
||||||
}{
|
}{
|
||||||
{source: uint32(1), result: pgtype.Xid{Uint: 1, Status: pgtype.Present}},
|
{source: uint32(1), result: pgtype.XID{Uint: 1, Status: pgtype.Present}},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range successfulTests {
|
for i, tt := range successfulTests {
|
||||||
var r pgtype.Xid
|
var r pgtype.XID
|
||||||
err := r.Set(tt.source)
|
err := r.Set(tt.source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%d: %v", i, err)
|
t.Errorf("%d: %v", i, err)
|
||||||
@@ -49,17 +49,17 @@ func TestXidSet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestXidAssignTo(t *testing.T) {
|
func TestXIDAssignTo(t *testing.T) {
|
||||||
var ui32 uint32
|
var ui32 uint32
|
||||||
var pui32 *uint32
|
var pui32 *uint32
|
||||||
|
|
||||||
simpleTests := []struct {
|
simpleTests := []struct {
|
||||||
src pgtype.Xid
|
src pgtype.XID
|
||||||
dst interface{}
|
dst interface{}
|
||||||
expected interface{}
|
expected interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Xid{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
|
{src: pgtype.XID{Uint: 42, Status: pgtype.Present}, dst: &ui32, expected: uint32(42)},
|
||||||
{src: pgtype.Xid{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
|
{src: pgtype.XID{Status: pgtype.Null}, dst: &pui32, expected: ((*uint32)(nil))},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range simpleTests {
|
for i, tt := range simpleTests {
|
||||||
@@ -74,11 +74,11 @@ func TestXidAssignTo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pointerAllocTests := []struct {
|
pointerAllocTests := []struct {
|
||||||
src pgtype.Xid
|
src pgtype.XID
|
||||||
dst interface{}
|
dst interface{}
|
||||||
expected interface{}
|
expected interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Xid{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)},
|
{src: pgtype.XID{Uint: 42, Status: pgtype.Present}, dst: &pui32, expected: uint32(42)},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range pointerAllocTests {
|
for i, tt := range pointerAllocTests {
|
||||||
@@ -93,10 +93,10 @@ func TestXidAssignTo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
errorTests := []struct {
|
errorTests := []struct {
|
||||||
src pgtype.Xid
|
src pgtype.XID
|
||||||
dst interface{}
|
dst interface{}
|
||||||
}{
|
}{
|
||||||
{src: pgtype.Xid{Status: pgtype.Null}, dst: &ui32},
|
{src: pgtype.XID{Status: pgtype.Null}, dst: &ui32},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range errorTests {
|
for i, tt := range errorTests {
|
||||||
|
|||||||
+6
-6
@@ -100,7 +100,7 @@ func init() {
|
|||||||
databaseSqlOIDs = make(map[pgtype.OID]bool)
|
databaseSqlOIDs = make(map[pgtype.OID]bool)
|
||||||
databaseSqlOIDs[pgtype.BoolOID] = true
|
databaseSqlOIDs[pgtype.BoolOID] = true
|
||||||
databaseSqlOIDs[pgtype.ByteaOID] = true
|
databaseSqlOIDs[pgtype.ByteaOID] = true
|
||||||
databaseSqlOIDs[pgtype.CidOID] = true
|
databaseSqlOIDs[pgtype.CIDOID] = true
|
||||||
databaseSqlOIDs[pgtype.DateOID] = true
|
databaseSqlOIDs[pgtype.DateOID] = true
|
||||||
databaseSqlOIDs[pgtype.Float4OID] = true
|
databaseSqlOIDs[pgtype.Float4OID] = true
|
||||||
databaseSqlOIDs[pgtype.Float8OID] = true
|
databaseSqlOIDs[pgtype.Float8OID] = true
|
||||||
@@ -110,7 +110,7 @@ func init() {
|
|||||||
databaseSqlOIDs[pgtype.OIDOID] = true
|
databaseSqlOIDs[pgtype.OIDOID] = true
|
||||||
databaseSqlOIDs[pgtype.TimestampOID] = true
|
databaseSqlOIDs[pgtype.TimestampOID] = true
|
||||||
databaseSqlOIDs[pgtype.TimestamptzOID] = true
|
databaseSqlOIDs[pgtype.TimestamptzOID] = true
|
||||||
databaseSqlOIDs[pgtype.XidOID] = true
|
databaseSqlOIDs[pgtype.XIDOID] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
type Driver struct {
|
type Driver struct {
|
||||||
@@ -432,8 +432,8 @@ func (r *Rows) Next(dest []driver.Value) error {
|
|||||||
r.values[i] = &pgtype.Bool{}
|
r.values[i] = &pgtype.Bool{}
|
||||||
case pgtype.ByteaOID:
|
case pgtype.ByteaOID:
|
||||||
r.values[i] = &pgtype.Bytea{}
|
r.values[i] = &pgtype.Bytea{}
|
||||||
case pgtype.CidOID:
|
case pgtype.CIDOID:
|
||||||
r.values[i] = &pgtype.Cid{}
|
r.values[i] = &pgtype.CID{}
|
||||||
case pgtype.DateOID:
|
case pgtype.DateOID:
|
||||||
r.values[i] = &pgtype.Date{}
|
r.values[i] = &pgtype.Date{}
|
||||||
case pgtype.Float4OID:
|
case pgtype.Float4OID:
|
||||||
@@ -452,8 +452,8 @@ func (r *Rows) Next(dest []driver.Value) error {
|
|||||||
r.values[i] = &pgtype.Timestamp{}
|
r.values[i] = &pgtype.Timestamp{}
|
||||||
case pgtype.TimestamptzOID:
|
case pgtype.TimestamptzOID:
|
||||||
r.values[i] = &pgtype.Timestamptz{}
|
r.values[i] = &pgtype.Timestamptz{}
|
||||||
case pgtype.XidOID:
|
case pgtype.XIDOID:
|
||||||
r.values[i] = &pgtype.Xid{}
|
r.values[i] = &pgtype.XID{}
|
||||||
default:
|
default:
|
||||||
r.values[i] = &pgtype.GenericText{}
|
r.values[i] = &pgtype.GenericText{}
|
||||||
}
|
}
|
||||||
|
|||||||
+53
-53
@@ -225,7 +225,7 @@ func testJSONStruct(t *testing.T, conn *pgx.Conn, typename string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func mustParseCidr(t *testing.T, s string) *net.IPNet {
|
func mustParseCIDR(t *testing.T, s string) *net.IPNet {
|
||||||
_, ipnet, err := net.ParseCIDR(s)
|
_, ipnet, err := net.ParseCIDR(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@@ -260,7 +260,7 @@ func TestStringToNotTextTypeTranscode(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInetCidrTranscodeIPNet(t *testing.T) {
|
func TestInetCIDRTranscodeIPNet(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
conn := mustConnect(t, *defaultConnConfig)
|
conn := mustConnect(t, *defaultConnConfig)
|
||||||
@@ -270,26 +270,26 @@ func TestInetCidrTranscodeIPNet(t *testing.T) {
|
|||||||
sql string
|
sql string
|
||||||
value *net.IPNet
|
value *net.IPNet
|
||||||
}{
|
}{
|
||||||
{"select $1::inet", mustParseCidr(t, "0.0.0.0/32")},
|
{"select $1::inet", mustParseCIDR(t, "0.0.0.0/32")},
|
||||||
{"select $1::inet", mustParseCidr(t, "127.0.0.1/32")},
|
{"select $1::inet", mustParseCIDR(t, "127.0.0.1/32")},
|
||||||
{"select $1::inet", mustParseCidr(t, "12.34.56.0/32")},
|
{"select $1::inet", mustParseCIDR(t, "12.34.56.0/32")},
|
||||||
{"select $1::inet", mustParseCidr(t, "192.168.1.0/24")},
|
{"select $1::inet", mustParseCIDR(t, "192.168.1.0/24")},
|
||||||
{"select $1::inet", mustParseCidr(t, "255.0.0.0/8")},
|
{"select $1::inet", mustParseCIDR(t, "255.0.0.0/8")},
|
||||||
{"select $1::inet", mustParseCidr(t, "255.255.255.255/32")},
|
{"select $1::inet", mustParseCIDR(t, "255.255.255.255/32")},
|
||||||
{"select $1::inet", mustParseCidr(t, "::/128")},
|
{"select $1::inet", mustParseCIDR(t, "::/128")},
|
||||||
{"select $1::inet", mustParseCidr(t, "::/0")},
|
{"select $1::inet", mustParseCIDR(t, "::/0")},
|
||||||
{"select $1::inet", mustParseCidr(t, "::1/128")},
|
{"select $1::inet", mustParseCIDR(t, "::1/128")},
|
||||||
{"select $1::inet", mustParseCidr(t, "2607:f8b0:4009:80b::200e/128")},
|
{"select $1::inet", mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "0.0.0.0/32")},
|
{"select $1::cidr", mustParseCIDR(t, "0.0.0.0/32")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "127.0.0.1/32")},
|
{"select $1::cidr", mustParseCIDR(t, "127.0.0.1/32")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "12.34.56.0/32")},
|
{"select $1::cidr", mustParseCIDR(t, "12.34.56.0/32")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "192.168.1.0/24")},
|
{"select $1::cidr", mustParseCIDR(t, "192.168.1.0/24")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "255.0.0.0/8")},
|
{"select $1::cidr", mustParseCIDR(t, "255.0.0.0/8")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "255.255.255.255/32")},
|
{"select $1::cidr", mustParseCIDR(t, "255.255.255.255/32")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "::/128")},
|
{"select $1::cidr", mustParseCIDR(t, "::/128")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "::/0")},
|
{"select $1::cidr", mustParseCIDR(t, "::/0")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "::1/128")},
|
{"select $1::cidr", mustParseCIDR(t, "::1/128")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "2607:f8b0:4009:80b::200e/128")},
|
{"select $1::cidr", mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128")},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for i, tt := range tests {
|
||||||
@@ -309,7 +309,7 @@ func TestInetCidrTranscodeIPNet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInetCidrTranscodeIP(t *testing.T) {
|
func TestInetCIDRTranscodeIP(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
conn := mustConnect(t, *defaultConnConfig)
|
conn := mustConnect(t, *defaultConnConfig)
|
||||||
@@ -353,8 +353,8 @@ func TestInetCidrTranscodeIP(t *testing.T) {
|
|||||||
sql string
|
sql string
|
||||||
value *net.IPNet
|
value *net.IPNet
|
||||||
}{
|
}{
|
||||||
{"select $1::inet", mustParseCidr(t, "192.168.1.0/24")},
|
{"select $1::inet", mustParseCIDR(t, "192.168.1.0/24")},
|
||||||
{"select $1::cidr", mustParseCidr(t, "192.168.1.0/24")},
|
{"select $1::cidr", mustParseCIDR(t, "192.168.1.0/24")},
|
||||||
}
|
}
|
||||||
for i, tt := range failTests {
|
for i, tt := range failTests {
|
||||||
var actual net.IP
|
var actual net.IP
|
||||||
@@ -369,7 +369,7 @@ func TestInetCidrTranscodeIP(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInetCidrArrayTranscodeIPNet(t *testing.T) {
|
func TestInetCIDRArrayTranscodeIPNet(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
conn := mustConnect(t, *defaultConnConfig)
|
conn := mustConnect(t, *defaultConnConfig)
|
||||||
@@ -382,31 +382,31 @@ func TestInetCidrArrayTranscodeIPNet(t *testing.T) {
|
|||||||
{
|
{
|
||||||
"select $1::inet[]",
|
"select $1::inet[]",
|
||||||
[]*net.IPNet{
|
[]*net.IPNet{
|
||||||
mustParseCidr(t, "0.0.0.0/32"),
|
mustParseCIDR(t, "0.0.0.0/32"),
|
||||||
mustParseCidr(t, "127.0.0.1/32"),
|
mustParseCIDR(t, "127.0.0.1/32"),
|
||||||
mustParseCidr(t, "12.34.56.0/32"),
|
mustParseCIDR(t, "12.34.56.0/32"),
|
||||||
mustParseCidr(t, "192.168.1.0/24"),
|
mustParseCIDR(t, "192.168.1.0/24"),
|
||||||
mustParseCidr(t, "255.0.0.0/8"),
|
mustParseCIDR(t, "255.0.0.0/8"),
|
||||||
mustParseCidr(t, "255.255.255.255/32"),
|
mustParseCIDR(t, "255.255.255.255/32"),
|
||||||
mustParseCidr(t, "::/128"),
|
mustParseCIDR(t, "::/128"),
|
||||||
mustParseCidr(t, "::/0"),
|
mustParseCIDR(t, "::/0"),
|
||||||
mustParseCidr(t, "::1/128"),
|
mustParseCIDR(t, "::1/128"),
|
||||||
mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"),
|
mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"select $1::cidr[]",
|
"select $1::cidr[]",
|
||||||
[]*net.IPNet{
|
[]*net.IPNet{
|
||||||
mustParseCidr(t, "0.0.0.0/32"),
|
mustParseCIDR(t, "0.0.0.0/32"),
|
||||||
mustParseCidr(t, "127.0.0.1/32"),
|
mustParseCIDR(t, "127.0.0.1/32"),
|
||||||
mustParseCidr(t, "12.34.56.0/32"),
|
mustParseCIDR(t, "12.34.56.0/32"),
|
||||||
mustParseCidr(t, "192.168.1.0/24"),
|
mustParseCIDR(t, "192.168.1.0/24"),
|
||||||
mustParseCidr(t, "255.0.0.0/8"),
|
mustParseCIDR(t, "255.0.0.0/8"),
|
||||||
mustParseCidr(t, "255.255.255.255/32"),
|
mustParseCIDR(t, "255.255.255.255/32"),
|
||||||
mustParseCidr(t, "::/128"),
|
mustParseCIDR(t, "::/128"),
|
||||||
mustParseCidr(t, "::/0"),
|
mustParseCIDR(t, "::/0"),
|
||||||
mustParseCidr(t, "::1/128"),
|
mustParseCIDR(t, "::1/128"),
|
||||||
mustParseCidr(t, "2607:f8b0:4009:80b::200e/128"),
|
mustParseCIDR(t, "2607:f8b0:4009:80b::200e/128"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -428,7 +428,7 @@ func TestInetCidrArrayTranscodeIPNet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInetCidrArrayTranscodeIP(t *testing.T) {
|
func TestInetCIDRArrayTranscodeIP(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
conn := mustConnect(t, *defaultConnConfig)
|
conn := mustConnect(t, *defaultConnConfig)
|
||||||
@@ -483,15 +483,15 @@ func TestInetCidrArrayTranscodeIP(t *testing.T) {
|
|||||||
{
|
{
|
||||||
"select $1::inet[]",
|
"select $1::inet[]",
|
||||||
[]*net.IPNet{
|
[]*net.IPNet{
|
||||||
mustParseCidr(t, "12.34.56.0/32"),
|
mustParseCIDR(t, "12.34.56.0/32"),
|
||||||
mustParseCidr(t, "192.168.1.0/24"),
|
mustParseCIDR(t, "192.168.1.0/24"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"select $1::cidr[]",
|
"select $1::cidr[]",
|
||||||
[]*net.IPNet{
|
[]*net.IPNet{
|
||||||
mustParseCidr(t, "12.34.56.0/32"),
|
mustParseCIDR(t, "12.34.56.0/32"),
|
||||||
mustParseCidr(t, "192.168.1.0/24"),
|
mustParseCIDR(t, "192.168.1.0/24"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -509,7 +509,7 @@ func TestInetCidrArrayTranscodeIP(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInetCidrTranscodeWithJustIP(t *testing.T) {
|
func TestInetCIDRTranscodeWithJustIP(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
conn := mustConnect(t, *defaultConnConfig)
|
conn := mustConnect(t, *defaultConnConfig)
|
||||||
@@ -534,7 +534,7 @@ func TestInetCidrTranscodeWithJustIP(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for i, tt := range tests {
|
||||||
expected := mustParseCidr(t, tt.value)
|
expected := mustParseCIDR(t, tt.value)
|
||||||
var actual net.IPNet
|
var actual net.IPNet
|
||||||
|
|
||||||
err := conn.QueryRow(tt.sql, expected.IP).Scan(&actual)
|
err := conn.QueryRow(tt.sql, expected.IP).Scan(&actual)
|
||||||
|
|||||||
Reference in New Issue
Block a user