Changeset: 715f6105d7f7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/715f6105d7f7
Modified Files:
        sql/backends/monet5/sql.c
Branch: Jul2021
Log Message:

My mistake, run mitosis on merge statements and small cleanup


diffs (79 lines):

diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -75,10 +75,10 @@ exp_is_point_select(sql_exp *e)
 }
 
 static int
-rel_no_mitosis(sql_rel *rel)
+rel_no_mitosis(mvc *sql, sql_rel *rel)
 {
-       int is_point = 0;
-
+       if (mvc_highwater(sql))
+               return 0;
        if (!rel || is_basetable(rel->op))
                return 1;
        /* use mitosis on order topn */
@@ -88,20 +88,17 @@ rel_no_mitosis(sql_rel *rel)
                        return 0;
        }
        if (is_topn(rel->op) || is_sample(rel->op) || 
is_simple_project(rel->op))
-               return rel_no_mitosis(rel->l);
-       if (is_modify(rel->op) && rel->card <= CARD_AGGR) {
-               if (is_delete(rel->op) || is_merge(rel->op))
+               return rel_no_mitosis(sql, rel->l);
+       if ((is_delete(rel->op) || is_truncate(rel->op)) && rel->card <= 
CARD_AGGR)
+               return 1;
+       if ((is_insert(rel->op) || is_update(rel->op)) && rel->card <= 
CARD_AGGR)
+               return rel_no_mitosis(sql, rel->r);
+       if (is_select(rel->op) && rel_is_table(rel->l) && 
!list_empty(rel->exps)) {
+               /* just one point expression makes this a point query */
+               if (exp_is_point_select(rel->exps->h->data))
                        return 1;
-               return rel_no_mitosis(rel->r);
-       }
-       if (is_select(rel->op) && rel_is_table(rel->l) && rel->exps) {
-               is_point = 0;
-               /* just one point expression makes this a point query */
-               if (rel->exps->h)
-                       if (exp_is_point_select(rel->exps->h->data))
-                               is_point = 1;
-       }
-       return is_point;
+       }
+       return 0;
 }
 
 static int
@@ -109,16 +106,14 @@ rel_need_distinct_query(sql_rel *rel)
 {
        int need_distinct = 0;
 
-       while (!need_distinct && rel && is_simple_project(rel->op))
+       while (rel && is_simple_project(rel->op))
                rel = rel->l;
-       if (!need_distinct && rel && is_groupby(rel->op) && rel->exps && 
!rel->r) {
+       if (rel && is_groupby(rel->op) && !list_empty(rel->exps) && 
list_empty(rel->r)) {
                for (node *n = rel->exps->h; n && !need_distinct; n = n->next) {
                        sql_exp *e = n->data;
-                       if (e->type == e_aggr) {
-
-                               if (need_distinct(e))
-                                       need_distinct = 1;
-                       }
+
+                       if (e->type == e_aggr && need_distinct(e))
+                               need_distinct = 1;
                }
        }
        return need_distinct;
@@ -140,7 +135,7 @@ sql_symbol2relation(backend *be, symbol 
                rel = rel_distribute(be->mvc, rel);
        if (rel)
                rel = rel_partition(be->mvc, rel);
-       if (rel && (rel_no_mitosis(rel) || rel_need_distinct_query(rel)))
+       if (rel && (rel_no_mitosis(be->mvc, rel) || 
rel_need_distinct_query(rel)))
                be->no_mitosis = 1;
        be->reloptimizer = GDKusec() - Tbegin;
        return rel;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to