Changeset: 3d9b07dc6d6e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3d9b07dc6d6e
Modified Files:
        sql/server/rel_optimize_proj.c
        sql/test/rel-optimizers/Tests/merge-unions.test
Branch: Mar2025
Log Message:

#7647 Merge unions optimizer does not apply in cases of an in-between group by


diffs (64 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
@@ -3288,19 +3288,13 @@ rel_merge_unions(visitor *v, sql_rel *re
                list *l = rel->l;
                for(node *n = l->h; n; ) {
                        node *next = n->next;
-                       sql_rel *oc = n->data;
-                       sql_rel *c = oc;
-
-                       /* account for any group-bys pushed down between 
stacked munions */
-                       if (oc->op == op_groupby)
-                               c = oc->l;
-
+                       sql_rel *c = n->data;
                        if (is_munion(c->op)) {
                                c = rel_dup(c);
                                list_remove_node(l, NULL, n);
                                l = list_merge(l, c->l, (fdup)NULL);
                                c->l = NULL;
-                               rel_destroy(oc);
+                               rel_destroy(c);
                                if (!next)
                                        next = l->h;
                                v->changes++;
diff --git a/sql/test/rel-optimizers/Tests/merge-unions.test 
b/sql/test/rel-optimizers/Tests/merge-unions.test
--- a/sql/test/rel-optimizers/Tests/merge-unions.test
+++ b/sql/test/rel-optimizers/Tests/merge-unions.test
@@ -248,17 +248,25 @@ project (
 | group by (
 | | munion (
 | | | group by (
-| | | | table("sys"."f1") [ "f1"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
-| | | group by (
-| | | | table("sys"."f2") [ "f2"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
+| | | | munion (
+| | | | | group by (
+| | | | | | table("sys"."f1") [ "f1"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
+| | | | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
+| | | | | group by (
+| | | | | | table("sys"."f2") [ "f2"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
+| | | | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ]
+| | | | ) [ "f_merge_rec"."n" NOT NULL, "%1"."%1" NOT NULL ]
+| | | ) [ "f_merge_rec"."n" NOT NULL ] [ "f_merge_rec"."n" NOT NULL, 
"sys"."sum" no nil ("%1"."%1" NOT NULL) NOT NULL as "%1"."%1" ],
 | | | group by (
-| | | | table("sys"."f3") [ "f3"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
-| | | group by (
-| | | | table("sys"."f4") [ "f4"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
-| | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ]
+| | | | munion (
+| | | | | group by (
+| | | | | | table("sys"."f3") [ "f3"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
+| | | | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ],
+| | | | | group by (
+| | | | | | table("sys"."f4") [ "f4"."n" NOT NULL UNIQUE as "f_merge_rec"."n" ]
+| | | | | ) [ "f_merge_rec"."n" NOT NULL UNIQUE ] [ "f_merge_rec"."n" NOT NULL 
UNIQUE, "sys"."count" no nil ("f_merge_rec"."n" NOT NULL UNIQUE) NOT NULL as 
"%1"."%1" ]
+| | | | ) [ "f_merge_rec"."n" NOT NULL, "%1"."%1" NOT NULL ]
+| | | ) [ "f_merge_rec"."n" NOT NULL ] [ "f_merge_rec"."n" NOT NULL, 
"sys"."sum" no nil ("%1"."%1" NOT NULL) NOT NULL as "%1"."%1" ]
 | | ) [ "f_merge_rec"."n" NOT NULL, "%1"."%1" NOT NULL ]
 | ) [ "f_merge_rec"."n" NOT NULL ] [ "f_merge_rec"."n" NOT NULL, "sys"."sum" 
no nil ("%1"."%1" NOT NULL) NOT NULL as "%1"."%1" ]
 ) [ "f_merge_rec"."n" NOT NULL UNIQUE, "%1"."%1" NOT NULL ]
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to