postgresql/src/include/optimizer
David Rowley 430a5952de Defer remove_useless_groupby_columns() work until query_planner()
Traditionally, remove_useless_groupby_columns() was called during
grouping_planner() directly after the call to preprocess_groupclause().
While in many ways, it made sense to populate the field and remove the
functionally dependent columns from processed_groupClause at the same
time, it's just that doing so had the disadvantage that
remove_useless_groupby_columns() was being called before the RelOptInfos
were populated for the relations mentioned in the query.  Not having
RelOptInfos available meant we needed to manually query the catalog tables
to get the required details about the primary key constraint for the
table.

Here we move the remove_useless_groupby_columns() call to
query_planner() and put it directly after the RelOptInfos are populated.
This is fine to do as processed_groupClause still isn't final at this
point as it can still be modified inside standard_qp_callback() by
make_pathkeys_for_sortclauses_extended().

This commit is just a refactor and simply moves
remove_useless_groupby_columns() into initsplan.c.  A planned follow-up
commit will adjust that function so it uses RelOptInfo instead of doing
catalog lookups and also teach it how to use unique indexes as proofs to
expand the cases where we can remove functionally dependent columns from
the GROUP BY.

Reviewed-by: Andrei Lepikhov, jian he
Discussion: https://postgr.es/m/CAApHDvqLezKwoEBBQd0dp4Y9MDkFBDbny0f3SzEeqOFoU7Z5+A@mail.gmail.com
2024-12-12 14:22:15 +13:00
..
appendinfo.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
clauses.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
cost.h Treat number of disabled nodes in a path as a separate cost metric. 2024-08-21 10:12:30 -04:00
geqo.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geqo_copy.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geqo_gene.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geqo_misc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geqo_mutation.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geqo_pool.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geqo_random.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geqo_recombination.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geqo_selection.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
inherit.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
joininfo.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
optimizer.h Reordering DISTINCT keys to match input path's pathkeys 2024-11-26 09:25:18 +09:00
orclauses.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
paramassign.h Add RETURNING support to MERGE. 2024-03-17 13:58:59 +00:00
pathnode.h Treat number of disabled nodes in a path as a separate cost metric. 2024-08-21 10:12:30 -04:00
paths.h Recalculate where-needed data accurately after a join removal. 2024-09-27 16:04:04 -04:00
placeholder.h Recalculate where-needed data accurately after a join removal. 2024-09-27 16:04:04 -04:00
plancat.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
planmain.h Defer remove_useless_groupby_columns() work until query_planner() 2024-12-12 14:22:15 +13:00
planner.h Re-allow planner to use Merge Append to efficiently implement UNION. 2024-05-21 12:44:51 -04:00
prep.h Re-allow planner to use Merge Append to efficiently implement UNION. 2024-05-21 12:44:51 -04:00
restrictinfo.h Teach bitmap path generation about transforming OR-clauses to SAOP's 2024-11-24 01:41:45 +02:00
subselect.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
tlist.h Update copyright for 2024 2024-01-03 20:49:05 -05:00