aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2015-07-26 15:34:29 +0200
committerAndres Freund <andres@anarazel.de>2015-07-26 16:53:13 +0200
commit3500d1cc78f61927e05c0e73158b87ff24f81c09 (patch)
tree9c17d76fbb254e9d45c835f62d601915187d3de4 /src/backend
parent65b86c1767a7dac0cc79dcfba7ba4cbd326dc03f (diff)
downloadpostgresql-3500d1cc78f61927e05c0e73158b87ff24f81c09.tar.gz
postgresql-3500d1cc78f61927e05c0e73158b87ff24f81c09.zip
Recognize GROUPING() as a aggregate expression.
Previously GROUPING() was not recognized as a aggregate expression, erroneously allowing the planner to move it from HAVING to WHERE. Author: Jeevan Chalke Reviewed-By: Andrew Gierth Discussion: CAM2+6=WG9omG5rFOMAYBweJxmpTaapvVp5pCeMrE6BfpCwr4Og@mail.gmail.com Backpatch: 9.5, where grouping sets were introduced
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/optimizer/util/clauses.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c
index 0137e0ecfce..c72dbef1c83 100644
--- a/src/backend/optimizer/util/clauses.c
+++ b/src/backend/optimizer/util/clauses.c
@@ -390,7 +390,7 @@ make_ands_implicit(Expr *clause)
/*
* contain_agg_clause
- * Recursively search for Aggref nodes within a clause.
+ * Recursively search for Aggref/GroupingFunc nodes within a clause.
*
* Returns true if any aggregate found.
*
@@ -417,6 +417,11 @@ contain_agg_clause_walker(Node *node, void *context)
Assert(((Aggref *) node)->agglevelsup == 0);
return true; /* abort the tree traversal and return true */
}
+ if (IsA(node, GroupingFunc))
+ {
+ Assert(((GroupingFunc *) node)->agglevelsup == 0);
+ return true; /* abort the tree traversal and return true */
+ }
Assert(!IsA(node, SubLink));
return expression_tree_walker(node, contain_agg_clause_walker, context);
}