From 1334d45d7129a0419659bc6803e7a6316307b701 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Tue, 8 Feb 2022 11:35:40 -0600 Subject: [PATCH] Parse array header to empty slices instead of nils --- pgtype/array.go | 11 ++++++----- pgtype/array_codec.go | 12 ------------ pgtype/array_test.go | 6 +++--- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/pgtype/array.go b/pgtype/array.go index 0e8e31a0..d1a78e64 100644 --- a/pgtype/array.go +++ b/pgtype/array.go @@ -58,9 +58,7 @@ func (dst *ArrayHeader) DecodeBinary(ci *ConnInfo, src []byte) (int, error) { dst.ElementOID = binary.BigEndian.Uint32(src[rp:]) rp += 4 - if numDims > 0 { - dst.Dimensions = make([]ArrayDimension, numDims) - } + dst.Dimensions = make([]ArrayDimension, numDims) if len(src) < 12+numDims*8 { return 0, fmt.Errorf("array header too short for %d dimensions: %d", numDims, len(src)) } @@ -101,7 +99,11 @@ type UntypedTextArray struct { } func ParseUntypedTextArray(src string) (*UntypedTextArray, error) { - dst := &UntypedTextArray{} + dst := &UntypedTextArray{ + Elements: []string{}, + Quoted: []bool{}, + Dimensions: []ArrayDimension{}, + } buf := bytes.NewBufferString(src) @@ -234,7 +236,6 @@ func ParseUntypedTextArray(src string) (*UntypedTextArray, error) { } if len(dst.Elements) == 0 { - dst.Dimensions = nil } else if len(explicitDimensions) > 0 { dst.Dimensions = explicitDimensions } else { diff --git a/pgtype/array_codec.go b/pgtype/array_codec.go index 94d24fc9..f23d8e3b 100644 --- a/pgtype/array_codec.go +++ b/pgtype/array_codec.go @@ -238,12 +238,6 @@ func (c *ArrayCodec) decodeBinary(ci *ConnInfo, arrayOID uint32, src []byte, arr return err } - // TODO - ArrayHeader.DecodeBinary should do this. But doing this there breaks old array code. Leave until old code - // can be removed. - if arrayHeader.Dimensions == nil { - arrayHeader.Dimensions = []ArrayDimension{} - } - err = array.SetDimensions(arrayHeader.Dimensions) if err != nil { return err @@ -283,12 +277,6 @@ func (c *ArrayCodec) decodeText(ci *ConnInfo, arrayOID uint32, src []byte, array return err } - // TODO - ParseUntypedTextArray should do this. But doing this there breaks old array code. Leave until old code - // can be removed. - if uta.Dimensions == nil { - uta.Dimensions = []ArrayDimension{} - } - err = array.SetDimensions(uta.Dimensions) if err != nil { return err diff --git a/pgtype/array_test.go b/pgtype/array_test.go index 82f5f229..8043e12f 100644 --- a/pgtype/array_test.go +++ b/pgtype/array_test.go @@ -15,9 +15,9 @@ func TestParseUntypedTextArray(t *testing.T) { { source: "{}", result: pgtype.UntypedTextArray{ - Elements: nil, - Quoted: nil, - Dimensions: nil, + Elements: []string{}, + Quoted: []bool{}, + Dimensions: []pgtype.ArrayDimension{}, }, }, {