Changeset: 520499049a5b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/520499049a5b Modified Files: sql/server/rel_unnest.c sql/test/BugTracker-2021/Tests/All Branch: default Log Message:
Merged with Jul2021 diffs (233 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -3470,6 +3470,18 @@ rewrite_groupings(visitor *v, sql_rel *r if (list_empty(exps)) append(exps, exp_atom_bool(v->sql->sa, 1)); /* protection against empty projections */ nrel->exps = exps; + if (!list_empty(rel->r) && !list_empty(nrel->r)) { /* aliases on grouping columns, ugh */ + for (node *n = ((list*)nrel->r)->h ; n ; n = n->next) { + sql_exp *e = n->data; + const char *rname = exp_relname(e), *cname = exp_name(e); + if (rname && cname) { + n->data = exp_copy(v->sql, exps_bind_column2(rel->r, rname, cname, NULL)); + } else if (cname) { + n->data = exp_copy(v->sql, exps_bind_column(rel->r, cname, NULL, NULL, 1)); + } + } + list_hash_clear(nrel->r); + } set_processed(nrel); if (list_empty(pexps)) append(pexps, exp_atom_bool(v->sql->sa, 1)); /* protection against empty projections */ diff --git a/sql/test/BugTracker-2021/Tests/All b/sql/test/BugTracker-2021/Tests/All --- a/sql/test/BugTracker-2021/Tests/All +++ b/sql/test/BugTracker-2021/Tests/All @@ -30,3 +30,4 @@ replace-transaction-conflict.Bug-7168 merge-table-join.Bug-7172 truncate-restart.Bug-7173 remote-table-large.Bug-7178 +grouping-sets-aliases.Bug-7185 diff --git a/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test b/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test @@ -0,0 +1,198 @@ +statement ok +start transaction + +statement ok +create table students (course TEXT, type TEXT) + +statement ok rowcount 7 +insert into students (course, type) values ('CS', 'Bachelor'), ('CS', 'Bachelor'), ('CS', 'PhD'), ('Math', 'Masters'), ('CS', NULL), ('CS', NULL), ('Math', NULL) + +query TT nosort +select course, type from students group by grouping sets((course, type), (type)) order by 1, 2 +---- +NULL +NULL +NULL +Bachelor +NULL +Masters +NULL +PhD +CS +NULL +CS +Bachelor +CS +PhD +Math +NULL +Math +Masters + +query ITT nosort +select count(*), course, type from students group by grouping sets((course, type), (type)) order by 1, 2, 3 +---- +1 +NULL +Masters +1 +NULL +PhD +1 +CS +PhD +1 +Math +NULL +1 +Math +Masters +2 +NULL +Bachelor +2 +CS +NULL +2 +CS +Bachelor +3 +NULL +NULL + +query TITT nosort +select min(course), grouping(course), course, type from students group by grouping sets((course, type), (type)) order by 1, 2, 3, 4 +---- +CS +0 +CS +NULL +CS +0 +CS +Bachelor +CS +0 +CS +PhD +CS +1 +NULL +NULL +CS +1 +NULL +Bachelor +CS +1 +NULL +PhD +Math +0 +Math +NULL +Math +0 +Math +Masters +Math +1 +NULL +Masters + +query TT nosort +select course AS crs, type AS tp from students group by grouping sets((crs, tp), (tp)) order by 1, 2 +---- +NULL +NULL +NULL +Bachelor +NULL +Masters +NULL +PhD +CS +NULL +CS +Bachelor +CS +PhD +Math +NULL +Math +Masters + +query ITT nosort +select count(*), course AS crs, type AS tp from students group by grouping sets((crs, tp), (tp)) order by 1, 2, 3 +---- +1 +NULL +Masters +1 +NULL +PhD +1 +CS +PhD +1 +Math +NULL +1 +Math +Masters +2 +NULL +Bachelor +2 +CS +NULL +2 +CS +Bachelor +3 +NULL +NULL + +query TITT nosort +select min(course), grouping(course), course AS crs, type AS tp from students group by grouping sets((crs, tp), (tp)) order by 1, 2, 3, 4 +---- +CS +0 +CS +NULL +CS +0 +CS +Bachelor +CS +0 +CS +PhD +CS +1 +NULL +NULL +CS +1 +NULL +Bachelor +CS +1 +NULL +PhD +Math +0 +Math +NULL +Math +0 +Math +Masters +Math +1 +NULL +Masters + +statement ok +rollback + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list