Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 61444bf

Browse files
committed
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.
1 parent e6d8cb7 commit 61444bf

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

src/backend/optimizer/plan/planner.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -570,13 +570,12 @@ subquery_planner(PlannerGlobal *glob, Query *parse,
570570

571571
if (contain_agg_clause(havingclause) ||
572572
contain_volatile_functions(havingclause) ||
573-
contain_subplans(havingclause) ||
574-
parse->groupingSets)
573+
contain_subplans(havingclause))
575574
{
576575
/* keep it in HAVING */
577576
newHaving = lappend(newHaving, havingclause);
578577
}
579-
else if (parse->groupClause)
578+
else if (parse->groupClause && !parse->groupingSets)
580579
{
581580
/* move it to WHERE */
582581
parse->jointree->quals = (Node *)

0 commit comments

Comments
 (0)