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