diff --git a/pgtype/array_codec_test.go b/pgtype/array_codec_test.go index b4b9b6a7..81e564c7 100644 --- a/pgtype/array_codec_test.go +++ b/pgtype/array_codec_test.go @@ -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) diff --git a/pgtype/builtin_wrappers.go b/pgtype/builtin_wrappers.go index 466ef45a..cb981906 100644 --- a/pgtype/builtin_wrappers.go +++ b/pgtype/builtin_wrappers.go @@ -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)