2
0

Better CompositeType and ArrayType Get implementation

This commit is contained in:
Jack Christensen
2020-06-05 13:39:53 -05:00
parent 9d847241cb
commit 43e4070cb4
3 changed files with 12 additions and 8 deletions
+5 -1
View File
@@ -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:
+3 -3
View File
@@ -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:
+4 -4
View File
@@ -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)},
},
}