Changeset: 5070ec27cf06 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5070ec27cf06
Modified Files:
        sql/server/rel_optimize_proj.c
Branch: label
Log Message:

add v1 of merge_unions


diffs (43 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
@@ -3461,6 +3461,31 @@ rel_push_project_down_union(visitor *v, 
        return rel;
 }
 
+static inline sql_rel *
+rel_merge_unions(visitor *v, sql_rel *rel)
+{
+       (void)v;
+       if (rel && is_munion(rel->op)) {
+               list *l = rel->l;
+               for(node *n = l->h; n; ) {
+                       node *next = n->next;
+                       sql_rel *i = n->data;
+                       if (is_munion(i->op)) {
+                               i = rel_dup(i);
+                               list_remove_node(l, NULL, n);
+                               l = list_merge(l, i->l, (fdup)NULL);
+                               i->l = NULL;
+                               rel_destroy(i);
+                               if (!next)
+                                       next = l->h;
+                       }
+                       n = next;
+               }
+               rel->l = l;
+       }
+       return rel;
+}
+
 /*
  * Push (semi)joins down unions, this is basically for merge tables, where
  * we know that the fk-indices are split over two clustered merge tables.
@@ -3879,6 +3904,7 @@ static sql_rel *
 rel_optimize_unions_topdown_(visitor *v, sql_rel *rel)
 {
        rel = rel_push_project_down_union(v, rel);
+       rel = rel_merge_unions(v, rel);
        rel = rel_push_join_down_munion(v, rel);
        return rel;
 }
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to