Adds checks for zero length arrays.
Assigning values from nil or zero length elements or dimensions now return immediately as there are no values to assign.
This commit is contained in:
@@ -190,6 +190,10 @@ func (dst ACLItemArray) Get() interface{} {
|
|||||||
func (src *ACLItemArray) AssignTo(dst interface{}) error {
|
func (src *ACLItemArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -189,6 +189,11 @@ func TestACLItemArrayAssignTo(t *testing.T) {
|
|||||||
dst: &stringSlice,
|
dst: &stringSlice,
|
||||||
expected: (([]string)(nil)),
|
expected: (([]string)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.ACLItemArray{Status: pgtype.Present},
|
||||||
|
dst: &stringSlice,
|
||||||
|
expected: (([]string)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.ACLItemArray{
|
src: pgtype.ACLItemArray{
|
||||||
Elements: []pgtype.ACLItem{
|
Elements: []pgtype.ACLItem{
|
||||||
|
|||||||
@@ -192,6 +192,10 @@ func (dst BoolArray) Get() interface{} {
|
|||||||
func (src *BoolArray) AssignTo(dst interface{}) error {
|
func (src *BoolArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -168,6 +168,11 @@ func TestBoolArrayAssignTo(t *testing.T) {
|
|||||||
dst: &boolSlice,
|
dst: &boolSlice,
|
||||||
expected: (([]bool)(nil)),
|
expected: (([]bool)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.BoolArray{Status: pgtype.Present},
|
||||||
|
dst: &boolSlice,
|
||||||
|
expected: (([]bool)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.BoolArray{
|
src: pgtype.BoolArray{
|
||||||
Elements: []pgtype.Bool{{Bool: true, Status: pgtype.Present}, {Bool: false, Status: pgtype.Present}},
|
Elements: []pgtype.Bool{{Bool: true, Status: pgtype.Present}, {Bool: false, Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -192,6 +192,10 @@ func (dst BPCharArray) Get() interface{} {
|
|||||||
func (src *BPCharArray) AssignTo(dst interface{}) error {
|
func (src *BPCharArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -173,6 +173,10 @@ func (dst ByteaArray) Get() interface{} {
|
|||||||
func (src *ByteaArray) AssignTo(dst interface{}) error {
|
func (src *ByteaArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -157,6 +157,11 @@ func TestByteaArrayAssignTo(t *testing.T) {
|
|||||||
dst: &byteByteSlice,
|
dst: &byteByteSlice,
|
||||||
expected: (([][]byte)(nil)),
|
expected: (([][]byte)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.ByteaArray{Status: pgtype.Present},
|
||||||
|
dst: &byteByteSlice,
|
||||||
|
expected: (([][]byte)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.ByteaArray{
|
src: pgtype.ByteaArray{
|
||||||
Elements: []pgtype.Bytea{{Bytes: []byte{1}, Status: pgtype.Present}, {Bytes: []byte{2}, Status: pgtype.Present}},
|
Elements: []pgtype.Bytea{{Bytes: []byte{1}, Status: pgtype.Present}, {Bytes: []byte{2}, Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -212,6 +212,10 @@ 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:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -217,11 +217,21 @@ func TestCIDRArrayAssignTo(t *testing.T) {
|
|||||||
dst: &ipnetSlice,
|
dst: &ipnetSlice,
|
||||||
expected: (([]*net.IPNet)(nil)),
|
expected: (([]*net.IPNet)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.CIDRArray{Status: pgtype.Present},
|
||||||
|
dst: &ipnetSlice,
|
||||||
|
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)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.CIDRArray{Status: pgtype.Present},
|
||||||
|
dst: &ipSlice,
|
||||||
|
expected: (([]net.IP)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.CIDRArray{
|
src: pgtype.CIDRArray{
|
||||||
Elements: []pgtype.CIDR{
|
Elements: []pgtype.CIDR{
|
||||||
|
|||||||
@@ -193,6 +193,10 @@ func (dst DateArray) Get() interface{} {
|
|||||||
func (src *DateArray) AssignTo(dst interface{}) error {
|
func (src *DateArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -182,6 +182,11 @@ func TestDateArrayAssignTo(t *testing.T) {
|
|||||||
dst: &timeSlice,
|
dst: &timeSlice,
|
||||||
expected: (([]time.Time)(nil)),
|
expected: (([]time.Time)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.DateArray{Status: pgtype.Present},
|
||||||
|
dst: &timeSlice,
|
||||||
|
expected: (([]time.Time)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.DateArray{
|
src: pgtype.DateArray{
|
||||||
Elements: []pgtype.Date{
|
Elements: []pgtype.Date{
|
||||||
|
|||||||
@@ -190,6 +190,10 @@ func (dst EnumArray) Get() interface{} {
|
|||||||
func (src *EnumArray) AssignTo(dst interface{}) error {
|
func (src *EnumArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -167,6 +167,11 @@ func TestEnumArrayArrayAssignTo(t *testing.T) {
|
|||||||
dst: &stringSlice,
|
dst: &stringSlice,
|
||||||
expected: (([]string)(nil)),
|
expected: (([]string)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.EnumArray{Status: pgtype.Present},
|
||||||
|
dst: &stringSlice,
|
||||||
|
expected: (([]string)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.EnumArray{
|
src: pgtype.EnumArray{
|
||||||
Elements: []pgtype.GenericText{{String: "foo", Status: pgtype.Present}, {String: "bar", Status: pgtype.Present}},
|
Elements: []pgtype.GenericText{{String: "foo", Status: pgtype.Present}, {String: "bar", Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -192,6 +192,10 @@ func (dst Float4Array) Get() interface{} {
|
|||||||
func (src *Float4Array) AssignTo(dst interface{}) error {
|
func (src *Float4Array) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -167,6 +167,11 @@ func TestFloat4ArrayAssignTo(t *testing.T) {
|
|||||||
dst: &float32Slice,
|
dst: &float32Slice,
|
||||||
expected: (([]float32)(nil)),
|
expected: (([]float32)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.Float4Array{Status: pgtype.Present},
|
||||||
|
dst: &float32Slice,
|
||||||
|
expected: (([]float32)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.Float4Array{
|
src: pgtype.Float4Array{
|
||||||
Elements: []pgtype.Float4{{Float: 1, Status: pgtype.Present}, {Float: 2, Status: pgtype.Present}},
|
Elements: []pgtype.Float4{{Float: 1, Status: pgtype.Present}, {Float: 2, Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -192,6 +192,10 @@ func (dst Float8Array) Get() interface{} {
|
|||||||
func (src *Float8Array) AssignTo(dst interface{}) error {
|
func (src *Float8Array) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -143,6 +143,11 @@ func TestFloat8ArrayAssignTo(t *testing.T) {
|
|||||||
dst: &float64Slice,
|
dst: &float64Slice,
|
||||||
expected: (([]float64)(nil)),
|
expected: (([]float64)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.Float8Array{Status: pgtype.Present},
|
||||||
|
dst: &float64Slice,
|
||||||
|
expected: (([]float64)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.Float8Array{
|
src: pgtype.Float8Array{
|
||||||
Elements: []pgtype.Float8{{Float: 1, Status: pgtype.Present}, {Float: 2, Status: pgtype.Present}},
|
Elements: []pgtype.Float8{{Float: 1, Status: pgtype.Present}, {Float: 2, Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -173,6 +173,10 @@ func (dst HstoreArray) Get() interface{} {
|
|||||||
func (src *HstoreArray) AssignTo(dst interface{}) error {
|
func (src *HstoreArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -302,6 +302,9 @@ func TestHstoreArrayAssignTo(t *testing.T) {
|
|||||||
{
|
{
|
||||||
src: pgtype.HstoreArray{Status: pgtype.Null}, dst: &hstoreSlice, expected: (([]map[string]string)(nil)),
|
src: pgtype.HstoreArray{Status: pgtype.Null}, dst: &hstoreSlice, expected: (([]map[string]string)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.HstoreArray{Status: pgtype.Present}, dst: &hstoreSlice, expected: (([]map[string]string)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.HstoreArray{
|
src: pgtype.HstoreArray{
|
||||||
Elements: []pgtype.Hstore{
|
Elements: []pgtype.Hstore{
|
||||||
|
|||||||
@@ -212,6 +212,10 @@ func (dst InetArray) Get() interface{} {
|
|||||||
func (src *InetArray) AssignTo(dst interface{}) error {
|
func (src *InetArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -217,11 +217,21 @@ func TestInetArrayAssignTo(t *testing.T) {
|
|||||||
dst: &ipnetSlice,
|
dst: &ipnetSlice,
|
||||||
expected: (([]*net.IPNet)(nil)),
|
expected: (([]*net.IPNet)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.InetArray{Status: pgtype.Present},
|
||||||
|
dst: &ipnetSlice,
|
||||||
|
expected: (([]*net.IPNet)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.InetArray{Status: pgtype.Null},
|
src: pgtype.InetArray{Status: pgtype.Null},
|
||||||
dst: &ipSlice,
|
dst: &ipSlice,
|
||||||
expected: (([]net.IP)(nil)),
|
expected: (([]net.IP)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.InetArray{Status: pgtype.Present},
|
||||||
|
dst: &ipSlice,
|
||||||
|
expected: (([]net.IP)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.InetArray{
|
src: pgtype.InetArray{
|
||||||
Elements: []pgtype.Inet{
|
Elements: []pgtype.Inet{
|
||||||
|
|||||||
@@ -458,6 +458,10 @@ func (dst Int2Array) Get() interface{} {
|
|||||||
func (src *Int2Array) AssignTo(dst interface{}) error {
|
func (src *Int2Array) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -219,6 +219,11 @@ func TestInt2ArrayAssignTo(t *testing.T) {
|
|||||||
dst: &int16Slice,
|
dst: &int16Slice,
|
||||||
expected: (([]int16)(nil)),
|
expected: (([]int16)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.Int2Array{Status: pgtype.Present},
|
||||||
|
dst: &int16Slice,
|
||||||
|
expected: (([]int16)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.Int2Array{
|
src: pgtype.Int2Array{
|
||||||
Elements: []pgtype.Int2{{Int: 1, Status: pgtype.Present}, {Int: 2, Status: pgtype.Present}},
|
Elements: []pgtype.Int2{{Int: 1, Status: pgtype.Present}, {Int: 2, Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -458,6 +458,10 @@ func (dst Int4Array) Get() interface{} {
|
|||||||
func (src *Int4Array) AssignTo(dst interface{}) error {
|
func (src *Int4Array) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -233,6 +233,11 @@ func TestInt4ArrayAssignTo(t *testing.T) {
|
|||||||
dst: &int32Slice,
|
dst: &int32Slice,
|
||||||
expected: (([]int32)(nil)),
|
expected: (([]int32)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.Int4Array{Status: pgtype.Present},
|
||||||
|
dst: &int32Slice,
|
||||||
|
expected: (([]int32)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.Int4Array{
|
src: pgtype.Int4Array{
|
||||||
Elements: []pgtype.Int4{{Int: 1, Status: pgtype.Present}, {Int: 2, Status: pgtype.Present}},
|
Elements: []pgtype.Int4{{Int: 1, Status: pgtype.Present}, {Int: 2, Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -458,6 +458,10 @@ func (dst Int8Array) Get() interface{} {
|
|||||||
func (src *Int8Array) AssignTo(dst interface{}) error {
|
func (src *Int8Array) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -226,6 +226,11 @@ func TestInt8ArrayAssignTo(t *testing.T) {
|
|||||||
dst: &int64Slice,
|
dst: &int64Slice,
|
||||||
expected: (([]int64)(nil)),
|
expected: (([]int64)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.Int8Array{Status: pgtype.Present},
|
||||||
|
dst: &int64Slice,
|
||||||
|
expected: (([]int64)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.Int8Array{
|
src: pgtype.Int8Array{
|
||||||
Elements: []pgtype.Int8{{Int: 1, Status: pgtype.Present}, {Int: 2, Status: pgtype.Present}},
|
Elements: []pgtype.Int8{{Int: 1, Status: pgtype.Present}, {Int: 2, Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -192,6 +192,10 @@ func (dst JSONBArray) Get() interface{} {
|
|||||||
func (src *JSONBArray) AssignTo(dst interface{}) error {
|
func (src *JSONBArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -193,6 +193,10 @@ func (dst MacaddrArray) Get() interface{} {
|
|||||||
func (src *MacaddrArray) AssignTo(dst interface{}) error {
|
func (src *MacaddrArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -166,6 +166,11 @@ func TestMacaddrArrayAssignTo(t *testing.T) {
|
|||||||
dst: &macaddrSlice,
|
dst: &macaddrSlice,
|
||||||
expected: (([]net.HardwareAddr)(nil)),
|
expected: (([]net.HardwareAddr)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.MacaddrArray{Status: pgtype.Present},
|
||||||
|
dst: &macaddrSlice,
|
||||||
|
expected: (([]net.HardwareAddr)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.MacaddrArray{
|
src: pgtype.MacaddrArray{
|
||||||
Elements: []pgtype.Macaddr{
|
Elements: []pgtype.Macaddr{
|
||||||
|
|||||||
@@ -306,6 +306,10 @@ func (dst NumericArray) Get() interface{} {
|
|||||||
func (src *NumericArray) AssignTo(dst interface{}) error {
|
func (src *NumericArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -190,6 +190,11 @@ func TestNumericArrayAssignTo(t *testing.T) {
|
|||||||
dst: &float32Slice,
|
dst: &float32Slice,
|
||||||
expected: (([]float32)(nil)),
|
expected: (([]float32)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.NumericArray{Status: pgtype.Present},
|
||||||
|
dst: &float32Slice,
|
||||||
|
expected: (([]float32)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.NumericArray{
|
src: pgtype.NumericArray{
|
||||||
Elements: []pgtype.Numeric{{Int: big.NewInt(1), Status: pgtype.Present}, {Int: big.NewInt(2), Status: pgtype.Present}},
|
Elements: []pgtype.Numeric{{Int: big.NewInt(1), Status: pgtype.Present}, {Int: big.NewInt(2), Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -192,6 +192,10 @@ func (dst TextArray) Get() interface{} {
|
|||||||
func (src *TextArray) AssignTo(dst interface{}) error {
|
func (src *TextArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -168,6 +168,11 @@ func TestTextArrayAssignTo(t *testing.T) {
|
|||||||
dst: &stringSlice,
|
dst: &stringSlice,
|
||||||
expected: (([]string)(nil)),
|
expected: (([]string)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.TextArray{Status: pgtype.Present},
|
||||||
|
dst: &stringSlice,
|
||||||
|
expected: (([]string)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.TextArray{
|
src: pgtype.TextArray{
|
||||||
Elements: []pgtype.Text{{String: "foo", Status: pgtype.Present}, {String: "bar", Status: pgtype.Present}},
|
Elements: []pgtype.Text{{String: "foo", Status: pgtype.Present}, {String: "bar", Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -193,6 +193,10 @@ func (dst TimestampArray) Get() interface{} {
|
|||||||
func (src *TimestampArray) AssignTo(dst interface{}) error {
|
func (src *TimestampArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -162,6 +162,11 @@ func TestTimestampArrayAssignTo(t *testing.T) {
|
|||||||
dst: &timeSlice,
|
dst: &timeSlice,
|
||||||
expected: (([]time.Time)(nil)),
|
expected: (([]time.Time)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.TimestampArray{Status: pgtype.Present},
|
||||||
|
dst: &timeSlice,
|
||||||
|
expected: (([]time.Time)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.TimestampArray{
|
src: pgtype.TimestampArray{
|
||||||
Elements: []pgtype.Timestamp{
|
Elements: []pgtype.Timestamp{
|
||||||
|
|||||||
@@ -193,6 +193,10 @@ func (dst TimestamptzArray) Get() interface{} {
|
|||||||
func (src *TimestamptzArray) AssignTo(dst interface{}) error {
|
func (src *TimestamptzArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -198,6 +198,11 @@ func TestTimestamptzArrayAssignTo(t *testing.T) {
|
|||||||
dst: &timeSlice,
|
dst: &timeSlice,
|
||||||
expected: (([]time.Time)(nil)),
|
expected: (([]time.Time)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.TimestamptzArray{Status: pgtype.Present},
|
||||||
|
dst: &timeSlice,
|
||||||
|
expected: (([]time.Time)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.TimestamptzArray{
|
src: pgtype.TimestamptzArray{
|
||||||
Elements: []pgtype.Timestamptz{
|
Elements: []pgtype.Timestamptz{
|
||||||
|
|||||||
@@ -154,6 +154,10 @@ func (dst TstzrangeArray) Get() interface{} {
|
|||||||
func (src *TstzrangeArray) AssignTo(dst interface{}) error {
|
func (src *TstzrangeArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -174,6 +174,10 @@ func (dst <%= pgtype_array_type %>) Get() interface{} {
|
|||||||
func (src *<%= pgtype_array_type %>) AssignTo(dst interface{}) error {
|
func (src *<%= pgtype_array_type %>) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1{
|
if len(src.Dimensions) <= 1{
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -230,6 +230,10 @@ func (dst UUIDArray) Get() interface{} {
|
|||||||
func (src *UUIDArray) AssignTo(dst interface{}) error {
|
func (src *UUIDArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ func TestUUIDArrayAssignTo(t *testing.T) {
|
|||||||
var byteArraySlice [][16]byte
|
var byteArraySlice [][16]byte
|
||||||
var byteSliceSlice [][]byte
|
var byteSliceSlice [][]byte
|
||||||
var stringSlice []string
|
var stringSlice []string
|
||||||
|
var byteSlice []byte
|
||||||
var byteArraySliceDim2 [][][16]byte
|
var byteArraySliceDim2 [][][16]byte
|
||||||
var stringSliceDim4 [][][][]string
|
var stringSliceDim4 [][][][]string
|
||||||
var byteArrayDim2 [2][1][16]byte
|
var byteArrayDim2 [2][1][16]byte
|
||||||
@@ -252,6 +253,16 @@ func TestUUIDArrayAssignTo(t *testing.T) {
|
|||||||
dst: &byteSliceSlice,
|
dst: &byteSliceSlice,
|
||||||
expected: ([][]byte)(nil),
|
expected: ([][]byte)(nil),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.UUIDArray{Status: pgtype.Present},
|
||||||
|
dst: &byteSlice,
|
||||||
|
expected: ([]byte)(nil),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.UUIDArray{Status: pgtype.Present},
|
||||||
|
dst: &stringSlice,
|
||||||
|
expected: (([]string)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.UUIDArray{
|
src: pgtype.UUIDArray{
|
||||||
Elements: []pgtype.UUID{{Bytes: [16]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, Status: pgtype.Present}},
|
Elements: []pgtype.UUID{{Bytes: [16]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, Status: pgtype.Present}},
|
||||||
|
|||||||
@@ -192,6 +192,10 @@ func (dst VarcharArray) Get() interface{} {
|
|||||||
func (src *VarcharArray) AssignTo(dst interface{}) error {
|
func (src *VarcharArray) AssignTo(dst interface{}) error {
|
||||||
switch src.Status {
|
switch src.Status {
|
||||||
case Present:
|
case Present:
|
||||||
|
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||||
|
// No values to assign
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if len(src.Dimensions) <= 1 {
|
if len(src.Dimensions) <= 1 {
|
||||||
// Attempt to match to select common types:
|
// Attempt to match to select common types:
|
||||||
switch v := dst.(type) {
|
switch v := dst.(type) {
|
||||||
|
|||||||
@@ -168,6 +168,11 @@ func TestVarcharArrayAssignTo(t *testing.T) {
|
|||||||
dst: &stringSlice,
|
dst: &stringSlice,
|
||||||
expected: (([]string)(nil)),
|
expected: (([]string)(nil)),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
src: pgtype.VarcharArray{Status: pgtype.Present},
|
||||||
|
dst: &stringSlice,
|
||||||
|
expected: (([]string)(nil)),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: pgtype.VarcharArray{
|
src: pgtype.VarcharArray{
|
||||||
Elements: []pgtype.Varchar{{String: "foo", Status: pgtype.Present}, {String: "bar", Status: pgtype.Present}},
|
Elements: []pgtype.Varchar{{String: "foo", Status: pgtype.Present}, {String: "bar", Status: pgtype.Present}},
|
||||||
|
|||||||
Reference in New Issue
Block a user