mirror of https://github.com/jackc/pgx.git
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.non-blocking
parent
e92478ec70
commit
9639a69d45
|
@ -190,6 +190,10 @@ func (dst ACLItemArray) Get() interface{} {
|
|||
func (src *ACLItemArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -189,6 +189,11 @@ func TestACLItemArrayAssignTo(t *testing.T) {
|
|||
dst: &stringSlice,
|
||||
expected: (([]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.ACLItemArray{Status: pgtype.Present},
|
||||
dst: &stringSlice,
|
||||
expected: (([]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.ACLItemArray{
|
||||
Elements: []pgtype.ACLItem{
|
||||
|
|
|
@ -192,6 +192,10 @@ func (dst BoolArray) Get() interface{} {
|
|||
func (src *BoolArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -168,6 +168,11 @@ func TestBoolArrayAssignTo(t *testing.T) {
|
|||
dst: &boolSlice,
|
||||
expected: (([]bool)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.BoolArray{Status: pgtype.Present},
|
||||
dst: &boolSlice,
|
||||
expected: (([]bool)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.BoolArray{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -173,6 +173,10 @@ func (dst ByteaArray) Get() interface{} {
|
|||
func (src *ByteaArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -157,6 +157,11 @@ func TestByteaArrayAssignTo(t *testing.T) {
|
|||
dst: &byteByteSlice,
|
||||
expected: (([][]byte)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.ByteaArray{Status: pgtype.Present},
|
||||
dst: &byteByteSlice,
|
||||
expected: (([][]byte)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.ByteaArray{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -217,11 +217,21 @@ func TestCIDRArrayAssignTo(t *testing.T) {
|
|||
dst: &ipnetSlice,
|
||||
expected: (([]*net.IPNet)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.CIDRArray{Status: pgtype.Present},
|
||||
dst: &ipnetSlice,
|
||||
expected: (([]*net.IPNet)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.CIDRArray{Status: pgtype.Null},
|
||||
dst: &ipSlice,
|
||||
expected: (([]net.IP)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.CIDRArray{Status: pgtype.Present},
|
||||
dst: &ipSlice,
|
||||
expected: (([]net.IP)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.CIDRArray{
|
||||
Elements: []pgtype.CIDR{
|
||||
|
|
|
@ -193,6 +193,10 @@ func (dst DateArray) Get() interface{} {
|
|||
func (src *DateArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -182,6 +182,11 @@ func TestDateArrayAssignTo(t *testing.T) {
|
|||
dst: &timeSlice,
|
||||
expected: (([]time.Time)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.DateArray{Status: pgtype.Present},
|
||||
dst: &timeSlice,
|
||||
expected: (([]time.Time)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.DateArray{
|
||||
Elements: []pgtype.Date{
|
||||
|
|
|
@ -190,6 +190,10 @@ func (dst EnumArray) Get() interface{} {
|
|||
func (src *EnumArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -167,6 +167,11 @@ func TestEnumArrayArrayAssignTo(t *testing.T) {
|
|||
dst: &stringSlice,
|
||||
expected: (([]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.EnumArray{Status: pgtype.Present},
|
||||
dst: &stringSlice,
|
||||
expected: (([]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.EnumArray{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -167,6 +167,11 @@ func TestFloat4ArrayAssignTo(t *testing.T) {
|
|||
dst: &float32Slice,
|
||||
expected: (([]float32)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Float4Array{Status: pgtype.Present},
|
||||
dst: &float32Slice,
|
||||
expected: (([]float32)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Float4Array{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -143,6 +143,11 @@ func TestFloat8ArrayAssignTo(t *testing.T) {
|
|||
dst: &float64Slice,
|
||||
expected: (([]float64)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Float8Array{Status: pgtype.Present},
|
||||
dst: &float64Slice,
|
||||
expected: (([]float64)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Float8Array{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
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.Present}, dst: &hstoreSlice, expected: (([]map[string]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.HstoreArray{
|
||||
Elements: []pgtype.Hstore{
|
||||
|
|
|
@ -212,6 +212,10 @@ func (dst InetArray) Get() interface{} {
|
|||
func (src *InetArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -217,11 +217,21 @@ func TestInetArrayAssignTo(t *testing.T) {
|
|||
dst: &ipnetSlice,
|
||||
expected: (([]*net.IPNet)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.InetArray{Status: pgtype.Present},
|
||||
dst: &ipnetSlice,
|
||||
expected: (([]*net.IPNet)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.InetArray{Status: pgtype.Null},
|
||||
dst: &ipSlice,
|
||||
expected: (([]net.IP)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.InetArray{Status: pgtype.Present},
|
||||
dst: &ipSlice,
|
||||
expected: (([]net.IP)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.InetArray{
|
||||
Elements: []pgtype.Inet{
|
||||
|
|
|
@ -458,6 +458,10 @@ func (dst Int2Array) Get() interface{} {
|
|||
func (src *Int2Array) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -219,6 +219,11 @@ func TestInt2ArrayAssignTo(t *testing.T) {
|
|||
dst: &int16Slice,
|
||||
expected: (([]int16)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Int2Array{Status: pgtype.Present},
|
||||
dst: &int16Slice,
|
||||
expected: (([]int16)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Int2Array{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -233,6 +233,11 @@ func TestInt4ArrayAssignTo(t *testing.T) {
|
|||
dst: &int32Slice,
|
||||
expected: (([]int32)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Int4Array{Status: pgtype.Present},
|
||||
dst: &int32Slice,
|
||||
expected: (([]int32)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Int4Array{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -226,6 +226,11 @@ func TestInt8ArrayAssignTo(t *testing.T) {
|
|||
dst: &int64Slice,
|
||||
expected: (([]int64)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Int8Array{Status: pgtype.Present},
|
||||
dst: &int64Slice,
|
||||
expected: (([]int64)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.Int8Array{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -193,6 +193,10 @@ func (dst MacaddrArray) Get() interface{} {
|
|||
func (src *MacaddrArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -166,6 +166,11 @@ func TestMacaddrArrayAssignTo(t *testing.T) {
|
|||
dst: &macaddrSlice,
|
||||
expected: (([]net.HardwareAddr)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.MacaddrArray{Status: pgtype.Present},
|
||||
dst: &macaddrSlice,
|
||||
expected: (([]net.HardwareAddr)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.MacaddrArray{
|
||||
Elements: []pgtype.Macaddr{
|
||||
|
|
|
@ -306,6 +306,10 @@ func (dst NumericArray) Get() interface{} {
|
|||
func (src *NumericArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -190,6 +190,11 @@ func TestNumericArrayAssignTo(t *testing.T) {
|
|||
dst: &float32Slice,
|
||||
expected: (([]float32)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.NumericArray{Status: pgtype.Present},
|
||||
dst: &float32Slice,
|
||||
expected: (([]float32)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.NumericArray{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -168,6 +168,11 @@ func TestTextArrayAssignTo(t *testing.T) {
|
|||
dst: &stringSlice,
|
||||
expected: (([]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.TextArray{Status: pgtype.Present},
|
||||
dst: &stringSlice,
|
||||
expected: (([]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.TextArray{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -162,6 +162,11 @@ func TestTimestampArrayAssignTo(t *testing.T) {
|
|||
dst: &timeSlice,
|
||||
expected: (([]time.Time)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.TimestampArray{Status: pgtype.Present},
|
||||
dst: &timeSlice,
|
||||
expected: (([]time.Time)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.TimestampArray{
|
||||
Elements: []pgtype.Timestamp{
|
||||
|
|
|
@ -193,6 +193,10 @@ func (dst TimestamptzArray) Get() interface{} {
|
|||
func (src *TimestamptzArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -198,6 +198,11 @@ func TestTimestamptzArrayAssignTo(t *testing.T) {
|
|||
dst: &timeSlice,
|
||||
expected: (([]time.Time)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.TimestamptzArray{Status: pgtype.Present},
|
||||
dst: &timeSlice,
|
||||
expected: (([]time.Time)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.TimestamptzArray{
|
||||
Elements: []pgtype.Timestamptz{
|
||||
|
|
|
@ -154,6 +154,10 @@ func (dst TstzrangeArray) Get() interface{} {
|
|||
func (src *TstzrangeArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -174,6 +174,10 @@ func (dst <%= pgtype_array_type %>) Get() interface{} {
|
|||
func (src *<%= pgtype_array_type %>) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1{
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -230,6 +230,10 @@ func (dst UUIDArray) Get() interface{} {
|
|||
func (src *UUIDArray) AssignTo(dst interface{}) error {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -214,6 +214,7 @@ func TestUUIDArrayAssignTo(t *testing.T) {
|
|||
var byteArraySlice [][16]byte
|
||||
var byteSliceSlice [][]byte
|
||||
var stringSlice []string
|
||||
var byteSlice []byte
|
||||
var byteArraySliceDim2 [][][16]byte
|
||||
var stringSliceDim4 [][][][]string
|
||||
var byteArrayDim2 [2][1][16]byte
|
||||
|
@ -252,6 +253,16 @@ func TestUUIDArrayAssignTo(t *testing.T) {
|
|||
dst: &byteSliceSlice,
|
||||
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{
|
||||
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 {
|
||||
switch src.Status {
|
||||
case Present:
|
||||
if len(src.Elements) == 0 || len(src.Dimensions) == 0 {
|
||||
// No values to assign
|
||||
return nil
|
||||
}
|
||||
if len(src.Dimensions) <= 1 {
|
||||
// Attempt to match to select common types:
|
||||
switch v := dst.(type) {
|
||||
|
|
|
@ -168,6 +168,11 @@ func TestVarcharArrayAssignTo(t *testing.T) {
|
|||
dst: &stringSlice,
|
||||
expected: (([]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.VarcharArray{Status: pgtype.Present},
|
||||
dst: &stringSlice,
|
||||
expected: (([]string)(nil)),
|
||||
},
|
||||
{
|
||||
src: pgtype.VarcharArray{
|
||||
Elements: []pgtype.Varchar{{String: "foo", Status: pgtype.Present}, {String: "bar", Status: pgtype.Present}},
|
||||
|
|
Loading…
Reference in New Issue