From 088a2ef66a31ac9f806c69eea3bc02e52222722e Mon Sep 17 00:00:00 2001 From: Hanefi Onaldi Date: Thu, 29 Nov 2018 15:36:04 +0300 Subject: [PATCH] throw an error when a subquery has grouping set clause --- .../distributed/planner/query_pushdown_planning.c | 8 ++++++++ .../regress/expected/subqueries_not_supported.out | 11 +++++++++++ src/test/regress/sql/subqueries_not_supported.sql | 7 +++++++ 3 files changed, 26 insertions(+) diff --git a/src/backend/distributed/planner/query_pushdown_planning.c b/src/backend/distributed/planner/query_pushdown_planning.c index dc2d81bfa..4e6a8d243 100644 --- a/src/backend/distributed/planner/query_pushdown_planning.c +++ b/src/backend/distributed/planner/query_pushdown_planning.c @@ -807,6 +807,14 @@ DeferErrorIfCannotPushdownSubquery(Query *subqueryTree, bool outerMostQueryHasLi } } + /* grouping sets are not allowed in subqueries*/ + if (subqueryTree->groupingSets) + { + preconditionsSatisfied = false; + errorDetail = "could not run distributed query with GROUPING SETS, CUBE, " + "or ROLLUP"; + } + /* * We support window functions when the window function * is partitioned on distribution column. diff --git a/src/test/regress/expected/subqueries_not_supported.out b/src/test/regress/expected/subqueries_not_supported.out index 964f72201..2ee0aa9cd 100644 --- a/src/test/regress/expected/subqueries_not_supported.out +++ b/src/test/regress/expected/subqueries_not_supported.out @@ -157,6 +157,17 @@ WHERE ; ERROR: cannot push down this subquery DETAIL: Having qual without group by on partition column is currently unsupported when a subquery references a column from another query +-- We do not support GROUPING SETS in subqueries +-- This also includes ROLLUP or CUBE clauses +SELECT * FROM (SELECT user_id, value_1 FROM users_table GROUP BY GROUPING SETS ((user_id), (value_1))) s; +ERROR: could not run distributed query with GROUPING SETS, CUBE, or ROLLUP +HINT: Consider using an equality filter on the distributed table's partition column. +SELECT * FROM (SELECT user_id, value_1 FROM users_table GROUP BY ROLLUP (user_id, value_1)) s; +ERROR: could not run distributed query with GROUPING SETS, CUBE, or ROLLUP +HINT: Consider using an equality filter on the distributed table's partition column. +SELECT * FROM (SELECT user_id, value_1 FROM users_table GROUP BY CUBE (user_id, value_1)) s; +ERROR: could not run distributed query with GROUPING SETS, CUBE, or ROLLUP +HINT: Consider using an equality filter on the distributed table's partition column. SET client_min_messages TO DEFAULT; DROP SCHEMA not_supported CASCADE; NOTICE: drop cascades to table users_table_local diff --git a/src/test/regress/sql/subqueries_not_supported.sql b/src/test/regress/sql/subqueries_not_supported.sql index efd5c351f..751a127dd 100644 --- a/src/test/regress/sql/subqueries_not_supported.sql +++ b/src/test/regress/sql/subqueries_not_supported.sql @@ -149,6 +149,13 @@ WHERE ) ; + +-- We do not support GROUPING SETS in subqueries +-- This also includes ROLLUP or CUBE clauses +SELECT * FROM (SELECT user_id, value_1 FROM users_table GROUP BY GROUPING SETS ((user_id), (value_1))) s; +SELECT * FROM (SELECT user_id, value_1 FROM users_table GROUP BY ROLLUP (user_id, value_1)) s; +SELECT * FROM (SELECT user_id, value_1 FROM users_table GROUP BY CUBE (user_id, value_1)) s; + SET client_min_messages TO DEFAULT; DROP SCHEMA not_supported CASCADE;