Changeset: 14232afcf21d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/14232afcf21d
Modified Files:
sql/server/rel_unnest.c
Branch: default
Log Message:
don't rewrite case if the condition has a relation
diffs (38 lines):
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
@@ -3211,9 +3211,9 @@ rewrite_ifthenelse(visitor *v, sql_rel *
sql_exp *cond = l->h->data;
sql_exp *then_exp = l->h->next->data;
sql_exp *else_exp = l->h->next->next->data;
- sql_exp *not_cond, *cond_is_null;
-
- if (exp_has_rel(then_exp) || exp_has_rel(else_exp)) {
+ sql_exp *not_cond;//, *cond_is_null;
+
+ if (!exp_has_rel(cond) && (exp_has_rel(then_exp) ||
exp_has_rel(else_exp))) {
bool single = false;
//return sql_error(v->sql, 10, SQLSTATE(42000) "time to
rewrite into union\n");
// union(
@@ -3249,13 +3249,19 @@ rewrite_ifthenelse(visitor *v, sql_rel *
rsq = rel_project(v->sql->sa, rsq,
append(sa_list(v->sql->sa), else_exp));
cond = exp_copy(v->sql, cond);
exp_set_freevar(v->sql, cond, rsq);
- not_cond = exp_compare(v->sql->sa, cond,
exp_atom_bool(v->sql->sa, 0), cmp_equal);
+ //not_cond = exp_compare(v->sql->sa, cond,
exp_atom_bool(v->sql->sa, 0), cmp_equal);
+ not_cond = exp_compare(v->sql->sa, cond,
exp_atom_bool(v->sql->sa, 1), cmp_notequal);
+ set_semantics(not_cond); /* also compare nulls */
+
+ /*
cond = exp_copy(v->sql, cond);
cond_is_null = exp_compare(v->sql->sa, cond,
exp_atom(v->sql->sa, atom_general(v->sql->sa, exp_subtype(cond), NULL)),
cmp_equal);
set_has_no_nil(cond_is_null);
set_semantics(cond_is_null);
+ */
set_processed(rsq);
- rsq = rel_select(v->sql->sa, rsq, exp_or(v->sql->sa,
list_append(new_exp_list(v->sql->sa), not_cond),
list_append(new_exp_list(v->sql->sa), cond_is_null), 0));
+ //rsq = rel_select(v->sql->sa, rsq, exp_or(v->sql->sa,
list_append(new_exp_list(v->sql->sa), not_cond),
list_append(new_exp_list(v->sql->sa), cond_is_null), 0));
+ rsq = rel_select(v->sql->sa, rsq, not_cond);
usq = rel_setop(v->sql->sa, lsq, rsq, op_union);
rel_setop_set_exps(v->sql, usq,
append(sa_list(v->sql->sa), exp_ref(v->sql, e)), false);
if (single)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list