Changeset: 5a8fc5a70490 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5a8fc5a70490
Modified Files:
        sql/server/rel_optimizer.c
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.sql
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.stable.out
Branch: octbugs
Log Message:

Don't create identical groupings


diffs (52 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -6102,10 +6102,12 @@ rel_groupby_distinct(visitor *v, sql_rel
                list_append(exps, darg);
                darg = exp_ref(v->sql, darg);
                arg->h->data = darg;
-               l = rel->l = rel_groupby(v->sql, rel->l, gbe);
-               l->exps = exps;
-               set_processed(l);
-               rel->r = ngbe;
+               if (!exp_match_list(ngbe, gbe)) { /* if the grouping columns 
match don't create an extra grouping */
+                       l = rel->l = rel_groupby(v->sql, rel->l, gbe);
+                       l->exps = exps;
+                       set_processed(l);
+                       rel->r = ngbe;
+               }
                rel->exps = nexps;
                set_nodistinct(distinct);
                append(nexps, distinct);
diff --git 
a/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.sql
 
b/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.sql
--- 
a/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.sql
+++ 
b/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.sql
@@ -1,3 +1,4 @@
 CREATE TABLE tab0(col0 INTEGER, col1 INTEGER, col2 INTEGER);
 SELECT - col0 AS col1 FROM tab0 AS cor0 WHERE NOT + col0 IS NOT NULL GROUP BY 
col1, col0 HAVING NOT - col1 + + AVG ( DISTINCT col0 ) IS NULL;
+PLAN SELECT - col0 AS col1 FROM tab0 AS cor0 WHERE NOT + col0 IS NOT NULL 
GROUP BY col1, col0 HAVING NOT - col1 + + AVG ( DISTINCT col0 ) IS NULL;
 DROP TABLE tab0;
diff --git 
a/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.stable.out
 
b/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.stable.out
--- 
a/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.stable.out
+++ 
b/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-having-avg.Bug-6428.stable.out
@@ -29,6 +29,20 @@ stdout of test 'sqlitelogictest-aggregat
 % col1 # name
 % int # type
 % 1 # length
+#PLAN SELECT - col0 AS col1 FROM tab0 AS cor0 WHERE NOT + col0 IS NOT NULL 
GROUP BY col1, col0 HAVING NOT - col1 + + AVG ( DISTINCT col0 ) IS NULL;
+% .plan # table_name
+% rel # name
+% clob # type
+% 116 # length
+project (
+| select (
+| | group by (
+| | | select (
+| | | | table(sys.tab0) [ "tab0"."col0" as "cor0"."col0", "tab0"."col1" as 
"cor0"."col1" ] COUNT 
+| | | ) [ "cor0"."col0" * = int "NULL" ]
+| | ) [ "cor0"."col1", "cor0"."col0" ] [ "cor0"."col1", "cor0"."col0", sys.avg 
no nil ("cor0"."col0") as "%1"."%1" ]
+| ) [ sys.sql_add(double[sys.sql_neg("cor0"."col1")], "%1"."%1") ! * = double 
"NULL" ]
+) [ sys.sql_neg("cor0"."col0") as "col1" ]
 #DROP TABLE tab0;
 
 # 13:10:16 >  
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to