aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/executor/execExprInterp.c6
-rw-r--r--src/test/regress/expected/aggregates.out8
-rw-r--r--src/test/regress/sql/aggregates.sql4
3 files changed, 15 insertions, 3 deletions
diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c
index 1470edc0aba..827c65cc852 100644
--- a/src/backend/executor/execExprInterp.c
+++ b/src/backend/executor/execExprInterp.c
@@ -4250,9 +4250,9 @@ ExecEvalPreOrderedDistinctSingle(AggState *aggstate, AggStatePerTrans pertrans)
if (!pertrans->haslast ||
pertrans->lastisnull != isnull ||
- !DatumGetBool(FunctionCall2Coll(&pertrans->equalfnOne,
- pertrans->aggCollation,
- pertrans->lastdatum, value)))
+ (!isnull && !DatumGetBool(FunctionCall2Coll(&pertrans->equalfnOne,
+ pertrans->aggCollation,
+ pertrans->lastdatum, value))))
{
if (pertrans->haslast && !pertrans->inputtypeByVal)
pfree(DatumGetPointer(pertrans->lastdatum));
diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out
index 82d09615248..52046c33dc8 100644
--- a/src/test/regress/expected/aggregates.out
+++ b/src/test/regress/expected/aggregates.out
@@ -1506,6 +1506,14 @@ group by ten;
-> Seq Scan on tenk1
(5 rows)
+-- Ensure consecutive NULLs are properly treated as distinct from each other
+select array_agg(distinct val)
+from (select null as val from generate_series(1, 2));
+ array_agg
+-----------
+ {NULL}
+(1 row)
+
-- Ensure no ordering is requested when enable_presorted_aggregate is off
set enable_presorted_aggregate to off;
explain (costs off)
diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql
index e81a22465b2..e7970983c36 100644
--- a/src/test/regress/sql/aggregates.sql
+++ b/src/test/regress/sql/aggregates.sql
@@ -567,6 +567,10 @@ select
from tenk1
group by ten;
+-- Ensure consecutive NULLs are properly treated as distinct from each other
+select array_agg(distinct val)
+from (select null as val from generate_series(1, 2));
+
-- Ensure no ordering is requested when enable_presorted_aggregate is off
set enable_presorted_aggregate to off;
explain (costs off)