From f743007fb48218dacc967c194410a25bbdb246ce Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Tue, 11 Jan 2022 20:49:20 -0600 Subject: [PATCH] Restore array support to pgxtype.LoadDataType --- pgtype/pgxtype/pgxtype.go | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/pgtype/pgxtype/pgxtype.go b/pgtype/pgxtype/pgxtype.go index 6b5068e2..6436f01b 100644 --- a/pgtype/pgxtype/pgxtype.go +++ b/pgtype/pgxtype/pgxtype.go @@ -34,25 +34,20 @@ func LoadDataType(ctx context.Context, conn Querier, ci *pgtype.ConnInfo, typeNa switch typtype { case "b": // array - panic("TODO - restore array support") - // elementOID, err := GetArrayElementOID(ctx, conn, oid) - // if err != nil { - // return pgtype.DataType{}, err - // } + elementOID, err := GetArrayElementOID(ctx, conn, oid) + if err != nil { + return pgtype.DataType{}, err + } - // var element pgtype.ValueTranscoder - // if dt, ok := ci.DataTypeForOID(elementOID); ok { - // if element, ok = dt.Value.(pgtype.ValueTranscoder); !ok { - // return pgtype.DataType{}, errors.New("array element OID not registered as ValueTranscoder") - // } - // } + var elementCodec pgtype.Codec + if dt, ok := ci.DataTypeForOID(elementOID); ok { + if dt.Codec == nil { + return pgtype.DataType{}, errors.New("array element OID not registered with Codec") + } + elementCodec = dt.Codec + } - // newElement := func() pgtype.ValueTranscoder { - // return pgtype.NewValue(element).(pgtype.ValueTranscoder) - // } - - // at := pgtype.NewArrayType(typeName, elementOID, newElement) - // return pgtype.DataType{Value: at, Name: typeName, OID: oid}, nil + return pgtype.DataType{Name: typeName, OID: oid, Codec: &pgtype.ArrayCodec{ElementOID: elementOID, ElementCodec: elementCodec}}, nil case "c": // composite panic("TODO - restore composite support") // fields, err := GetCompositeFields(ctx, conn, oid)