]> granicus.if.org Git - postgresql/commit
Fix sharing Agg transition state of DISTINCT or ordered aggs.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Tue, 20 Dec 2016 07:20:17 +0000 (09:20 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Tue, 20 Dec 2016 07:20:30 +0000 (09:20 +0200)
commitce92fc4e2540d0ce554e498adb27f0ef29199b94
treec45da3496e3f375558e4fa4f046fdf7601383195
parent3f07eff104793cfd82bfd3e093991695221abfd8
Fix sharing Agg transition state of DISTINCT or ordered aggs.

If a query contained two aggregates that could share the transition value,
we would correctly collect the input into a tuplesort only once, but
incorrectly run the transition function over the accumulated input twice,
in finalize_aggregates(). That caused a crash, when we tried to call
tuplesort_performsort() on an already-freed NULL tuplestore.

Backport to 9.6, where sharing of transition state and this bug were
introduced.

Analysis by Tom Lane.

Discussion: https://www.postgresql.org/message-id/ac5b0b69-744c-9114-6218-8300ac920e61@iki.fi
src/backend/executor/nodeAgg.c
src/test/regress/expected/aggregates.out
src/test/regress/sql/aggregates.sql