Changeset: 795b4a189ea3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=795b4a189ea3
Modified Files:
        gdk/gdk_bat.c
        sql/backends/monet5/vaults/shp/shp.h
        sql/server/rel_optimizer.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

Merge with Jun2020 branch.


diffs (173 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2317,6 +2317,8 @@ BATassertProps(BAT *b)
                        BATloop(b, p, q) {
                                valp = BUNtail(bi, p);
                                bool isnil = cmpf(valp, nilp) == 0;
+                               assert(b->ttype != TYPE_flt || 
!isinf(*(flt*)valp));
+                               assert(b->ttype != TYPE_dbl || 
!isinf(*(dbl*)valp));
                                if (maxval && !isnil) {
                                        cmp = cmpf(maxval, valp);
                                        assert(cmp >= 0);
@@ -2396,6 +2398,8 @@ BATassertProps(BAT *b)
                                BUN prb;
                                valp = BUNtail(bi, p);
                                bool isnil = cmpf(valp, nilp) == 0;
+                               assert(b->ttype != TYPE_flt || 
!isinf(*(flt*)valp));
+                               assert(b->ttype != TYPE_dbl || 
!isinf(*(dbl*)valp));
                                if (maxval && !isnil) {
                                        cmp = cmpf(maxval, valp);
                                        assert(cmp >= 0);
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
@@ -5415,115 +5415,6 @@ rel_join2semijoin(visitor *v, sql_rel *r
        return rel;
 }
 
-typedef struct {
-       sql_rel *p; /* the found join's parent */
-       sql_rel *j; /* the found join relation itself */
-} found_join;
-
-static void
-rel_find_joins(mvc *sql, sql_rel *parent, sql_rel *rel, list *l, int depth)
-{
-       if (!rel || depth == 5) /* limit to 5 relations below in the tree */
-               return;
-
-       switch (rel->op) {
-               case op_basetable:
-               case op_table:
-               case op_ddl:
-               case op_truncate:
-                       break;
-               case op_join:
-               case op_left:
-               case op_right:
-               case op_full:
-               case op_semi:
-               case op_anti: {
-                       found_join *fl = SA_NEW(sql->sa, found_join);
-                       fl->p = parent;
-                       fl->j = rel;
-                       list_append(l, fl);
-
-                       if (rel->l)
-                               rel_find_joins(sql, rel, rel->l, l, depth + 1);
-                       if (rel->r)
-                               rel_find_joins(sql, rel, rel->r, l, depth + 1);
-               } break;
-               case op_union:
-               case op_inter:
-               case op_except: {
-                       if (rel->l)
-                               rel_find_joins(sql, rel, rel->l, l, depth + 1);
-                       if (rel->r)
-                               rel_find_joins(sql, rel, rel->r, l, depth + 1);
-               } break;
-               case op_groupby:
-               case op_project:
-               case op_select:
-               case op_topn:
-               case op_sample: {
-                       if (rel->l)
-                               rel_find_joins(sql, rel, rel->l, l, depth + 1);
-               } break;
-               case op_insert:
-               case op_update:
-               case op_delete: {
-                       if (rel->r)
-                               rel_find_joins(sql, rel, rel->r, l, depth + 1);
-               } break;
-       }
-}
-
-/* find identical joins in diferent branches of the relational plan and merge 
them together */
-static sql_rel *
-rel_merge_identical_joins(visitor *v, sql_rel *rel)
-{
-       if (is_joinop(rel->op) && rel->l && rel->r) {
-               list *l1 = sa_list(v->sql->sa), *l2 = sa_list(v->sql->sa);
-
-               rel_find_joins(v->sql, rel, rel->l, l1, 0);
-               rel_find_joins(v->sql, rel, rel->r, l2, 0);
-
-               if (list_length(l1) && list_length(l2)) { /* found joins on 
both */
-                       for (node *n1 = l1->h ; n1; n1 = n1->next) {
-                               found_join *f1 = (found_join*) n1->data;
-                               for (node *n2 = l2->h ; n2; n2 = n2->next) {
-                                       found_join *f2 = (found_join*) n2->data;
-                                       sql_rel *j1 = f1->j, *j2 = f2->j, *j1_l 
= j1->l, *j1_r = j1->r, *j2_l = j2->l, *j2_r = j2->r;
-                                       bool sides_equal = false;
-
-                                       if (j1 != j2) {
-                                               const char *j1_ln = 
rel_name(j1_l), *j1_rn = rel_name(j1_r), *j2_ln = rel_name(j2_l), *j2_rn = 
rel_name(j2_r);
-
-                                               /* So far it looks on identical 
relations and common basetable relations */
-                                               if ((j1_l == j2_l || 
(is_basetable(j1_l->op) && is_basetable(j2_l->op) && strcmp(j1_ln, j2_ln) == 0 
&& j1_l->l == j2_l->l)) &&
-                                                       (j1_r == j2_r || 
(is_basetable(j1_r->op) && is_basetable(j2_r->op) && strcmp(j1_rn, j2_rn) == 0 
&& j1_r->l == j2_r->l)))
-                                                       sides_equal = true;
-                                               else if ((j1_l == j2_r || 
(is_basetable(j1_l->op) && is_basetable(j2_r->op) && strcmp(j1_ln, j2_rn) == 0 
&& j1_l->l == j2_r->l)) &&
-                                                       (j1_r == j2_l || 
(is_basetable(j1_r->op) && is_basetable(j2_l->op) && strcmp(j1_rn, j2_ln) == 0 
&& j1_r->l == j2_l->l)))
-                                                       sides_equal = true;
-
-                                               /* the left and right sides are 
equal */
-                                               if (sides_equal && 
exp_match_list(j1->exps, j2->exps)) {
-                                                       sql_rel *p2 = f2->p;
-
-                                                       if (p2->l == j2) {/* 
replace j2's parent join with j1 */
-                                                               
rel_destroy(p2->l);
-                                                               p2->l = 
rel_dup(j1);
-                                                       } else {
-                                                               
rel_destroy(p2->r);
-                                                               p2->r = 
rel_dup(j1);
-                                                       }
-                                                       v->changes++;
-                                                       return rel;
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-       return rel;
-}
-
 static sql_rel *
 rel_push_select_down_union(visitor *v, sql_rel *rel)
 {
@@ -9493,8 +9384,6 @@ optimize_rel(mvc *sql, sql_rel *rel, int
 
                if (level <= 0)
                        rel = rel_visitor_bottomup(&v, rel, 
&rel_join_push_exps_down);
-
-               if (/* DISABLES CODE */ (0)) rel = rel_visitor_bottomup(&ev, 
rel, &rel_merge_identical_joins);
        }
 
        /* Important -> Re-write semijoins after rel_join_order */
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -880,19 +880,7 @@ push_up_project(mvc *sql, sql_rel *rel, 
                                }
                                if (r->l)
                                        e = exp_rewrite(sql, r->l, e, ad);
-                               if (e->type == e_atom && e->f) {
-                                       list *atoms = (list*)e->f;
-
-                                       if (list_length(atoms) > 1)
-                                               return sql_error(sql, 02, 
SQLSTATE(21000) "Cardinality violation, scalar value expected");
-                                       for (node *nn = atoms->h ; nn ; nn = 
nn->next) {
-                                               sql_exp *ee = (sql_exp *) 
nn->data;
-
-                                               exp_setname(sql->sa, ee, 
exp_relname(e), exp_name(e));
-                                               append(n->exps, ee);
-                                       }
-                               } else
-                                       append(n->exps, e);
+                               append(n->exps, e);
                        }
                        if (r->r) {
                                list *exps = r->r, *oexps = n->r = 
sa_list(sql->sa);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to