Changeset: 21359a455af5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/21359a455af5
Added Files:
sql/test/BugTracker-2021/Tests/grouping-sets-aliases.Bug-7185.test
Modified Files:
sql/server/rel_unnest.c
sql/test/BugTracker-2021/Tests/All
Branch: Jul2021
Log Message:
Added test and fix for bug #7185. Grouping columns may contain aliases
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
@@ -29,3 +29,4 @@ shutdown-force.Bug-7167
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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list