diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-03-31 16:59:26 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-03-31 16:59:26 +0000 |
commit | d344115519a5c88bfa8bf8551258f4eaaa1185be (patch) | |
tree | d20b2e66b2f5ad859eb0cd13115ec91489290655 /src/backend/optimizer/plan/planagg.c | |
parent | e86237ff31c1cb52591065c3d88bb09923b7f459 (diff) | |
download | postgresql-d344115519a5c88bfa8bf8551258f4eaaa1185be.tar.gz postgresql-d344115519a5c88bfa8bf8551258f4eaaa1185be.zip |
Apply my original fix for Taiki Yamaguchi's bug report about DISTINCT MAX().
Add some regression tests for plausible failures in this area.
Diffstat (limited to 'src/backend/optimizer/plan/planagg.c')
-rw-r--r-- | src/backend/optimizer/plan/planagg.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/backend/optimizer/plan/planagg.c b/src/backend/optimizer/plan/planagg.c index e472e48ccb5..5bb92111f60 100644 --- a/src/backend/optimizer/plan/planagg.c +++ b/src/backend/optimizer/plan/planagg.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/optimizer/plan/planagg.c,v 1.36 2008/01/01 19:45:50 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/optimizer/plan/planagg.c,v 1.37 2008/03/31 16:59:26 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -188,6 +188,18 @@ optimize_minmax_aggregates(PlannerInfo *root, List *tlist, Path *best_path) &aggs_list); /* + * We have to replace Aggrefs with Params in equivalence classes too, + * else ORDER BY or DISTINCT on an optimized aggregate will fail. + * + * Note: at some point it might become necessary to mutate other + * data structures too, such as the query's sortClause or distinctClause. + * Right now, those won't be examined after this point. + */ + mutate_eclass_expressions(root, + replace_aggs_with_params_mutator, + &aggs_list); + + /* * Generate the output plan --- basically just a Result */ plan = (Plan *) make_result(root, tlist, hqual, NULL); |