Changeset: 598e090a4377 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/598e090a4377
Added Files:
        
sql/test/BugTracker-2022/Tests/push-aggr-down-removes-distinct-on-union-all.Bug-7318.test
Modified Files:
        sql/server/rel_optimize_proj.c
        sql/test/BugTracker-2022/Tests/All
Branch: Sep2022
Log Message:

Fixes rel optimizer bug 7318


diffs (52 lines):

diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c
--- a/sql/server/rel_optimize_proj.c
+++ b/sql/server/rel_optimize_proj.c
@@ -1835,7 +1835,7 @@ rel_push_aggr_down(visitor *v, sql_rel *
                node *n, *m;
                list *lgbe = NULL, *rgbe = NULL, *gbe = NULL, *exps = NULL;
 
-               if (u->op == op_project)
+               if (u->op == op_project && !need_distinct(u))
                        u = u->l;
 
                if (!u || !is_union(u->op) || need_distinct(u) || is_single(u) 
|| !u->exps || rel_is_ref(u))
diff --git a/sql/test/BugTracker-2022/Tests/All 
b/sql/test/BugTracker-2022/Tests/All
--- a/sql/test/BugTracker-2022/Tests/All
+++ b/sql/test/BugTracker-2022/Tests/All
@@ -12,3 +12,4 @@ dump-table-data.Bug-7282
 NOT_WIN32?cudf-grouped-aggr.Bug-7285
 create_func_with_case_and_in
 single_row_in_rel_order_by_column.Bug-7306
+push-aggr-down-removes-distinct-on-union-all.Bug-7318
diff --git 
a/sql/test/BugTracker-2022/Tests/push-aggr-down-removes-distinct-on-union-all.Bug-7318.test
 
b/sql/test/BugTracker-2022/Tests/push-aggr-down-removes-distinct-on-union-all.Bug-7318.test
new file mode 100644
--- /dev/null
+++ 
b/sql/test/BugTracker-2022/Tests/push-aggr-down-removes-distinct-on-union-all.Bug-7318.test
@@ -0,0 +1,27 @@
+statement ok
+create table foo (n int, m int)
+
+statement ok
+create table bar (n int, m int)
+
+statement ok
+insert into foo values (1,1), (2,1), (1,2), (3,1)
+
+statement ok
+insert into bar values (2,2), (3,2), (1,3), (3,3)
+
+statement ok
+create view fub as
+    select * from foo
+    union all
+    select * from bar
+
+query I nosort
+select count(distinct n) from fub
+----
+3
+
+query I nosort
+select count(*) from (select distinct n from fub) as subq
+----
+3
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to