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