Better CompositeType and ArrayType Get implementation
This commit is contained in:
+5
-1
@@ -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
@@ -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:
|
||||
|
||||
@@ -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)},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user