Fix asymmetry in setting EquivalenceClass.ec_sortref 0452b461bc made get_eclass_for_sort_expr() always set EquivalenceClass.ec_sortref if it's not done yet. This leads to an asymmetric situation when whoever first looks for the EquivalenceClass sets the ec_sortref. It is also counterintuitive that get_eclass_for_sort_expr() performs modification of data structures.
This commit makes make_pathkeys_for_sortclauses_extended() responsible for setting EquivalenceClass.ec_sortref. Now we set the EquivalenceClass.ec_sortref's needed to explore alternative GROUP BY ordering specifically during building pathkeys by the list of grouping clauses. Discussion: https://postgr.es/m/17037754-f187-4138-8285-0e2bfebd0dea%40postgrespro.ru Reported-by: Tom Lane Author: Andrei Lepikhov Reviewed-by: Alexander Korotkov, Pavel Borisov Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/199012a3d844c6283e0ab4b1139440840a91433d Modified Files -------------- src/backend/optimizer/path/equivclass.c | 13 +-------- src/backend/optimizer/path/pathkeys.c | 18 ++++++++++-- src/backend/optimizer/plan/planner.c | 16 ++++++++--- src/include/optimizer/paths.h | 3 +- src/test/regress/expected/aggregates.out | 47 ++++++++++++++++++++++++++++++++ src/test/regress/sql/aggregates.sql | 14 ++++++++++ 6 files changed, 92 insertions(+), 19 deletions(-)