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{} {
|
func (dst ArrayType) Get() interface{} {
|
||||||
switch dst.status {
|
switch dst.status {
|
||||||
case Present:
|
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:
|
case Null:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
|
|||||||
+3
-3
@@ -59,9 +59,9 @@ func NewCompositeTypeValues(typeName string, fields []CompositeTypeField, values
|
|||||||
func (src CompositeType) Get() interface{} {
|
func (src CompositeType) Get() interface{} {
|
||||||
switch src.status {
|
switch src.status {
|
||||||
case Present:
|
case Present:
|
||||||
results := make([]interface{}, len(src.valueTranscoders))
|
results := make(map[string]interface{}, len(src.valueTranscoders))
|
||||||
for i := range results {
|
for i := range src.valueTranscoders {
|
||||||
results[i] = src.valueTranscoders[i].Get()
|
results[src.fields[i].Name] = src.valueTranscoders[i].Get()
|
||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
case Null:
|
case Null:
|
||||||
|
|||||||
@@ -37,19 +37,19 @@ func TestCompositeTypeSetAndGet(t *testing.T) {
|
|||||||
|
|
||||||
compatibleValuesTests := []struct {
|
compatibleValuesTests := []struct {
|
||||||
src []interface{}
|
src []interface{}
|
||||||
expected []interface{}
|
expected map[string]interface{}
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
src: []interface{}{"foo", int32(42)},
|
src: []interface{}{"foo", int32(42)},
|
||||||
expected: []interface{}{"foo", int32(42)},
|
expected: map[string]interface{}{"a": "foo", "b": int32(42)},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
src: []interface{}{nil, nil},
|
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}},
|
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