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

Reply via email to