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]