pgsql: Fix handling of NULLs returned by aggregate combine functions.

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix handling of NULLs returned by aggregate combine functions.
Date: 2017-11-24 01:19:19
Message-ID: E1eI2eF-0008Jq-86@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix handling of NULLs returned by aggregate combine functions.

When strict aggregate combine functions, used in multi-stage/parallel
aggregation, returned NULL, we didn't check for that, invoking the
combine function with NULL the next round, despite it being strict.

The equivalent code invoking normal transition functions has a check
for that situation, which did not get copied in a7de3dc5c346. Fix the
bug by adding the equivalent check.

Based on a quick look I could not find any strict combine functions in
core actually returning NULL, and it doesn't seem very likely external
users have done so. So this isn't likely to have caused issues in
practice.

Add tests verifying transition / combine functions returning NULL is
tested.

Reported-By: Andres Freund
Author: Andres Freund
Discussion: https://postgr.es/m/20171121033642.7xvmjqrl4jdaaat3@alap3.anarazel.de
Backpatch: 9.6, where parallel aggregation was introduced

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/c253b722f616d15c0b45c729465b4b85849cbcda

Modified Files
--------------
src/backend/executor/nodeAgg.c | 11 +++++
src/test/regress/expected/aggregates.out | 73 ++++++++++++++++++++++++++++++++
src/test/regress/sql/aggregates.sql | 65 ++++++++++++++++++++++++++++
3 files changed, 149 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2017-11-24 04:19:14 Re: pgsql: Generational memory allocator
Previous Message Andres Freund 2017-11-24 01:19:17 pgsql: Fix handling of NULLs returned by aggregate combine functions.