aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2015-07-26 15:56:26 +0200
committerAndres Freund <andres@anarazel.de>2015-07-26 16:53:13 +0200
commit29e4455d7139d0b1bf8d3b62e566e7bb20cf0ec6 (patch)
tree24fc4a0d65b4060a0235a651a0926dbcfb66dce1
parent3500d1cc78f61927e05c0e73158b87ff24f81c09 (diff)
downloadpostgresql-29e4455d7139d0b1bf8d3b62e566e7bb20cf0ec6.tar.gz
postgresql-29e4455d7139d0b1bf8d3b62e566e7bb20cf0ec6.zip
Allow to push down clauses from HAVING to WHERE when grouping sets are used.
Previously we disallowed pushing down quals to WHERE in the presence of grouping sets. That's overly restrictive. We now instead copy quals to WHERE if applicable, leaving the one in HAVING in place. That's because, at that stage of the planning process, it's nontrivial to determine if it's safe to remove the one in HAVING. Author: Andrew Gierth Discussion: 874mkt3l59.fsf@news-spur.riddles.org.uk Backpatch: 9.5, where grouping sets were introduced. This isn't exactly a bugfix, but it seems better to keep the branches in sync at this point.
-rw-r--r--src/backend/optimizer/plan/planner.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 11678388fab..6ee411eec87 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -570,13 +570,12 @@ subquery_planner(PlannerGlobal *glob, Query *parse,
if (contain_agg_clause(havingclause) ||
contain_volatile_functions(havingclause) ||
- contain_subplans(havingclause) ||
- parse->groupingSets)
+ contain_subplans(havingclause))
{
/* keep it in HAVING */
newHaving = lappend(newHaving, havingclause);
}
- else if (parse->groupClause)
+ else if (parse->groupClause && !parse->groupingSets)
{
/* move it to WHERE */
parse->jointree->quals = (Node *)