Changeset: c6fc3bb20230 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c6fc3bb20230
Modified Files:
sql/server/rel_exp.c
sql/server/rel_unnest.c
Branch: default
Log Message:
fixing crashes on not propagated freevar/dependent info
diffs (51 lines):
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2217,6 +2217,16 @@ exp_rel_update_exps(mvc *sql, list *exps
return exps;
}
+static sql_exp *
+exp_rel_update_exp_(mvc *sql, sql_exp *e)
+{
+ if (exp_has_rel(e))
+ e = exp_rel_update_exp(sql, e);
+ else if (!exp_is_atom(e))
+ exp_rel_update_set_freevar(e);
+ return e;
+}
+
sql_exp *
exp_rel_update_exp(mvc *sql, sql_exp *e)
{
@@ -2241,12 +2251,12 @@ exp_rel_update_exp(mvc *sql, sql_exp *e)
if (exps_have_rel_exp(e->r))
e->r = exp_rel_update_exps(sql, e->r);
} else {
- if (exp_has_rel(e->l))
- e->l = exp_rel_update_exp(sql, e->l);
- if (exp_has_rel(e->r))
- e->r = exp_rel_update_exp(sql, e->r);
- if (e->f && exp_has_rel(e->f))
- e->f = exp_rel_update_exp(sql, e->f);
+ //if (exp_has_rel(e->l))
+ e->l = exp_rel_update_exp_(sql, e->l);
+ //if (exp_has_rel(e->r))
+ e->r = exp_rel_update_exp_(sql, e->r);
+ if (e->f /*&& exp_has_rel(e->f)*/)
+ e->f = exp_rel_update_exp_(sql, e->f);
}
return e;
case e_convert:
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
@@ -2683,6 +2683,8 @@ rewrite_anyequal(visitor *v, sql_rel *re
l = rel->l;
if (l && on_right && (!is_join(l->op)
|| (is_project(rel->op) && lsq->card <= CARD_ATOM && rsq->card <= CARD_ATOM)))
on_right = 0;
+ if (l && on_right &&
exp_has_freevar(sql, le))
+ set_dependent(l);
}
if (rsq) {
if (on_right) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list