mirror of https://github.com/jackc/pgx.git
Fix scan empty array into multi-dimension slice
parent
7193e48923
commit
bcc0af3f56
|
@ -126,6 +126,23 @@ func TestArrayCodecScanMultipleDimensions(t *testing.T) {
|
||||||
require.NoError(t, rows.Err())
|
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) {
|
func TestArrayCodecScanWrongMultipleDimensions(t *testing.T) {
|
||||||
conn := testutil.MustConnectPgx(t)
|
conn := testutil.MustConnectPgx(t)
|
||||||
defer testutil.MustCloseContext(t, conn)
|
defer testutil.MustCloseContext(t, conn)
|
||||||
|
|
|
@ -763,7 +763,10 @@ func (a *anyMultiDimSliceArray) SetDimensions(dimensions []ArrayDimension) error
|
||||||
|
|
||||||
switch len(dimensions) {
|
switch len(dimensions) {
|
||||||
case 0:
|
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:
|
case 1:
|
||||||
elementCount := cardinality(dimensions)
|
elementCount := cardinality(dimensions)
|
||||||
slice := reflect.MakeSlice(sliceType, elementCount, elementCount)
|
slice := reflect.MakeSlice(sliceType, elementCount, elementCount)
|
||||||
|
|
Loading…
Reference in New Issue