Fix incorrect handling of polymorphic aggregates used as window functions.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 Oct 2016 16:49:37 +0000 (12:49 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 Oct 2016 16:49:37 +0000 (12:49 -0400)
commitac4a9d92fcb6869e757cc729dca2ca5ccf94b185
tree890afd89acea19523b7262f3074cbd4009cccb27
parente55a946a81c6648c5ff3a0ccdda242f639e33c6f
Fix incorrect handling of polymorphic aggregates used as window functions.

The transfunction was told that its first argument and result were
of the window function output type, not the aggregate state type.
This'd only matter if the transfunction consults get_fn_expr_argtype,
which typically only polymorphic functions would do.

Although we have several regression tests around polymorphic aggs,
none of them detected this mistake --- in fact, they still didn't
fail when I injected the same mistake into nodeAgg.c.  So add some
more tests covering both plain agg and window-function-agg cases.

Per report from Sebastian Luque.  Back-patch to 9.6 where the error
was introduced (by sloppy refactoring in commit 804163bc2, looks like).

Report: <87int2qkat.fsf@gmail.com>
src/backend/executor/nodeWindowAgg.c
src/test/regress/expected/polymorphism.out
src/test/regress/sql/polymorphism.sql