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

Reply via email to