Fix scan empty array into multi-dimension slice

query-exec-mode
Jack Christensen 2022-02-08 11:12:05 -06:00
parent 7193e48923
commit bcc0af3f56
2 changed files with 21 additions and 1 deletions

View File

@ -126,6 +126,23 @@ func TestArrayCodecScanMultipleDimensions(t *testing.T) {
require.NoError(t, rows.Err())
}
func TestArrayCodecScanMultipleDimensionsEmpty(t *testing.T) {
conn := testutil.MustConnectPgx(t)
defer testutil.MustCloseContext(t, conn)
rows, err := conn.Query(context.Background(), `select '{}'::int4[]`)
require.NoError(t, err)
for rows.Next() {
var ss [][]int32
err := rows.Scan(&ss)
require.NoError(t, err)
require.Equal(t, [][]int32{}, ss)
}
require.NoError(t, rows.Err())
}
func TestArrayCodecScanWrongMultipleDimensions(t *testing.T) {
conn := testutil.MustConnectPgx(t)
defer testutil.MustCloseContext(t, conn)

View File

@ -763,7 +763,10 @@ func (a *anyMultiDimSliceArray) SetDimensions(dimensions []ArrayDimension) error
switch len(dimensions) {
case 0:
return fmt.Errorf("impossible: non-nil dimensions but zero elements")
// Empty, but non-nil array
slice := reflect.MakeSlice(sliceType, 0, 0)
a.slice.Set(slice)
return nil
case 1:
elementCount := cardinality(dimensions)
slice := reflect.MakeSlice(sliceType, elementCount, elementCount)