Changeset: 8ad37f00d17a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8ad37f00d17a
Modified Files:
        sql/server/rel_rel.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

more unnest fixing.
in anyequal mark left side as freevar when pushing it down, corrected by the 
rel_bind_var


diffs (57 lines):

diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -994,7 +994,7 @@ rel_relational_func(sql_allocator *sa, s
        if(!rel)
                return NULL;
 
-       rel->flag = 1;
+       rel->flag = TABLE_PROD_FUNC;
        rel->l = l;
        rel->op = op_table;
        rel->exps = exps;
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
@@ -1812,6 +1812,7 @@ push_up_select2(visitor *v, sql_rel *rel
                rel_destroy(l);
                rel_bind_vars(v->sql, nl, nl->exps);
                v->changes++;
+               nl->l = push_up_select2(v, nl->l);
                return nl;
        }
        if (is_single(rel) && is_innerjoin(rel->op) && l && is_select(l->op) && 
exps_have_freevar(v->sql, l->exps) && !rel_is_ref(l)) {
@@ -1824,6 +1825,7 @@ push_up_select2(visitor *v, sql_rel *rel
                rel_destroy(l);
                rel_bind_vars(v->sql, rel, rel->exps);
                v->changes++;
+               rel = push_up_select2(v, rel);
                return rel;
        }
        if (!is_single(rel) && is_innerjoin(rel->op) && r && is_select(r->op) 
&& exps_have_freevar(v->sql, r->exps) && !rel_is_ref(r)) {
@@ -1856,6 +1858,7 @@ push_up_select2(visitor *v, sql_rel *rel
                rel_destroy(l);
                rel_bind_vars(v->sql, nl, nl->exps);
                v->changes++;
+               nl->l = push_up_select2(v, nl->l);
                return nl;
        }
        if (is_left(rel->op) && r && is_select(r->op) && 
exps_have_freevar(v->sql, r->exps) && !rel_is_ref(r)) {
@@ -1878,6 +1881,7 @@ push_up_select2(visitor *v, sql_rel *rel
                rel_destroy(r);
                rel_bind_vars(v->sql, nr, nr->exps);
                v->changes++;
+               nr->l = push_up_select2(v, nr->l);
                return nr;
        }
        if (is_right(rel->op) && l && is_select(l->op) && 
exps_have_freevar(v->sql, l->exps) && !rel_is_ref(l)) {
@@ -2931,7 +2935,8 @@ rewrite_anyequal(visitor *v, sql_rel *re
                                        return sql_error(sql, 02, 
SQLSTATE(42000) "Tuple matching at projections not implemented in the backend 
yet");
                                } else {
                                        sql_exp *inexp = 
exp_compare(v->sql->sa, le, re, is_anyequal(sf)?mark_in:mark_notin);
-                                       rel_bind_var(sql, rel, inexp);
+                                       le->freevar = 1;
+                                       rel_bind_var(sql, join, inexp);
                                        append(join->exps, inexp);
                                }
                                v->changes++;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to