1
0
mirror of https://github.com/postgres/postgres.git synced 2026-10-23 13:29:09 +03:00

Fix incorrect calcSumX2 in numeric deserialize functions

calcSumX2 is used to inform the aggregate transition function whether it
should include the square of the transition value in the aggregate
state.  The deserialize functions for various numeric aggregates that do
use calcSumX2 weren't properly setting the property to true.  This does
not matter in core as we never perform any aggregate transitions after a
deserialize operation.

This fix is only required for external code which plumbs aggregate paths
together in such a way that could result in aggregate transitions being
performed after states have been deserialized.

Author: Maxime Schoemans <maxime.schoemans@enterprisedb.com>
Reviewed-by: Andrey Borodin <x4mmm@yandex-team.ru>
Discussion: https://postgr.es/m/FEBF5C3D-CC53-455F-AA9D-4D377A2E957C@enterprisedb.com
Backpatch-through: 14
This commit is contained in:
David Rowley
2026-09-29 15:48:44 +13:00
parent 4331d20f4d
commit ab274a1e96

View File

@@ -5368,7 +5368,7 @@ numeric_deserialize(PG_FUNCTION_ARGS)
initReadOnlyStringInfo(&buf, VARDATA_ANY(sstate),
VARSIZE_ANY_EXHDR(sstate));
result = makeNumericAggStateCurrentContext(false);
result = makeNumericAggStateCurrentContext(true);
/* N */
result->N = pq_getmsgint64(&buf);
@@ -5701,7 +5701,7 @@ numeric_poly_deserialize(PG_FUNCTION_ARGS)
initReadOnlyStringInfo(&buf, VARDATA_ANY(sstate),
VARSIZE_ANY_EXHDR(sstate));
result = makeInt128AggStateCurrentContext(false);
result = makeInt128AggStateCurrentContext(true);
/* N */
result->N = pq_getmsgint64(&buf);