Changeset: 3dbdfdea3b2d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3dbdfdea3b2d
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
Branch: default
Log Message:

fix crash in join with or and incorrect expressions (fixes bug 3909)
remove single 'TRUE' expressions, ie removes lots of unneeded crossproducts.


diffs (59 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -666,8 +666,9 @@ exp_bin(mvc *sql, sql_exp *e, stmt *left
                        }
                        return stmt_tunion(sql->sa, sel1, sel2);
                }
-               if (e->flag == cmp_or && right)  /* join */
+               if (e->flag == cmp_or && right) {  /* join */
                        assert(0);
+               }
 
                /* mark use of join indices */
                if (right && find_prop(e->p, PROP_JOINIDX) != NULL) 
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
@@ -5956,6 +5956,16 @@ rel_simplify_predicates(int *changes, mv
                                if (flag)
                                        break;
                        }
+                       if (is_atom(e->type) && !e->l && !e->r) { /* numbered 
variable */
+                               atom *a = sql->args[e->flag];
+                               int flag = a->data.val.bval;
+
+                               /* remove simple select true expressions */
+                               if (flag) {
+                                       sql->caching = 0;
+                                       break;
+                               }
+                       }
                        if (e->type == e_cmp && get_cmp(e) == cmp_equal) {
                                sql_exp *l = e->l;
                                sql_exp *r = e->r;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -3133,13 +3133,16 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
 
                        lr = rel_select_copy(sql->sa, lr, sa_list(sql->sa));
                        lr = rel_logical_exp(sql, lr, lo, f);
-                       lexps = lr?lr->exps:NULL;
-                       lr = lr->l;
-
+                       if (lr) {
+                               lexps = lr->exps;
+                               lr = lr->l;
+                       }
                        rr = rel_select_copy(sql->sa, rr, sa_list(sql->sa));
                        rr = rel_logical_exp(sql, rr, ro, f);
-                       rexps = rr?rr->exps:NULL;
-                       rr = rr->l;
+                       if (rr) {       
+                               rexps = rr->exps;
+                               rr = rr->l;
+                       }
                        sql->pushdown = pushdown;
                } else {
                        lr = rel_logical_exp(sql, lr, lo, f);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to