diff --git a/array_type.go b/array_type.go index 5de39818..9454021b 100644 --- a/array_type.go +++ b/array_type.go @@ -84,7 +84,11 @@ func (dst *ArrayType) Set(src interface{}) error { func (dst ArrayType) Get() interface{} { switch dst.status { case Present: - return dst.elements + elementValues := make([]interface{}, len(dst.elements)) + for i := range dst.elements { + elementValues[i] = dst.elements[i].Get() + } + return elementValues case Null: return nil default: diff --git a/composite_type.go b/composite_type.go index 389bf178..49ce70fa 100644 --- a/composite_type.go +++ b/composite_type.go @@ -59,9 +59,9 @@ func NewCompositeTypeValues(typeName string, fields []CompositeTypeField, values func (src CompositeType) Get() interface{} { switch src.status { case Present: - results := make([]interface{}, len(src.valueTranscoders)) - for i := range results { - results[i] = src.valueTranscoders[i].Get() + results := make(map[string]interface{}, len(src.valueTranscoders)) + for i := range src.valueTranscoders { + results[src.fields[i].Name] = src.valueTranscoders[i].Get() } return results case Null: diff --git a/composite_type_test.go b/composite_type_test.go index b32810ff..664fe36e 100644 --- a/composite_type_test.go +++ b/composite_type_test.go @@ -37,19 +37,19 @@ func TestCompositeTypeSetAndGet(t *testing.T) { compatibleValuesTests := []struct { src []interface{} - expected []interface{} + expected map[string]interface{} }{ { src: []interface{}{"foo", int32(42)}, - expected: []interface{}{"foo", int32(42)}, + expected: map[string]interface{}{"a": "foo", "b": int32(42)}, }, { src: []interface{}{nil, nil}, - expected: []interface{}{nil, nil}, + expected: map[string]interface{}{"a": nil, "b": nil}, }, { src: []interface{}{&pgtype.Text{String: "hi", Status: pgtype.Present}, &pgtype.Int4{Int: 7, Status: pgtype.Present}}, - expected: []interface{}{"hi", int32(7)}, + expected: map[string]interface{}{"a": "hi", "b": int32(7)}, }, }