aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/plan/planner.c5
-rw-r--r--src/test/regress/expected/groupingsets.out7
-rw-r--r--src/test/regress/sql/groupingsets.sql4
3 files changed, 16 insertions, 0 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index fcb57bf411b..f25eb9b02da 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -1756,6 +1756,11 @@ grouping_planner(PlannerInfo *root, double tuple_fraction)
if (parse->groupingSets)
{
+ if (!grouping_is_sortable(parse->groupClause))
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("could not implement GROUP BY"),
+ errdetail("Some of the datatypes do not support sorting, which is required for grouping sets.")));
use_hashed_grouping = false;
}
else
diff --git a/src/test/regress/expected/groupingsets.out b/src/test/regress/expected/groupingsets.out
index 260ccd52c87..86d188ae224 100644
--- a/src/test/regress/expected/groupingsets.out
+++ b/src/test/regress/expected/groupingsets.out
@@ -847,4 +847,11 @@ select sum(ten) from onek group by rollup(four::text), two order by 1;
2500
(6 rows)
+-- Check for sensible failure on unsortable data
+select usort, grouping(usort), count(*) from (values ('1'::xid),('2'::xid),('1'::xid)) v(usort) group by rollup(usort);
+ERROR: could not implement GROUP BY
+DETAIL: Some of the datatypes do not support sorting, which is required for grouping sets.
+select id, usort, grouping(id,usort), count(*) from (values (1,'1'::xid),(1,'2'::xid),(2,'1'::xid)) v(id,usort) group by grouping sets ((id), (usort));
+ERROR: could not implement GROUP BY
+DETAIL: Some of the datatypes do not support sorting, which is required for grouping sets.
-- end
diff --git a/src/test/regress/sql/groupingsets.sql b/src/test/regress/sql/groupingsets.sql
index 71cc0ec9007..891d21188bc 100644
--- a/src/test/regress/sql/groupingsets.sql
+++ b/src/test/regress/sql/groupingsets.sql
@@ -224,4 +224,8 @@ select array(select row(v.a,s1.*) from (select two,four, count(*) from onek grou
select sum(ten) from onek group by two, rollup(four::text) order by 1;
select sum(ten) from onek group by rollup(four::text), two order by 1;
+-- Check for sensible failure on unsortable data
+select usort, grouping(usort), count(*) from (values ('1'::xid),('2'::xid),('1'::xid)) v(usort) group by rollup(usort);
+select id, usort, grouping(id,usort), count(*) from (values (1,'1'::xid),(1,'2'::xid),(2,'1'::xid)) v(id,usort) group by grouping sets ((id), (usort));
+
-- end