Parse array header to empty slices instead of nils

query-exec-mode
Jack Christensen 2022-02-08 11:35:40 -06:00
parent bcc0af3f56
commit 1334d45d71
3 changed files with 9 additions and 20 deletions

View File

@ -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 {

View File

@ -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

View File

@ -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{},
},
},
{