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]