Changeset: 7e4e36ee55f0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e4e36ee55f0
Modified Files:
        sql/server/rel_optimizer.c
Branch: default
Log Message:

cleaner solutions for bug 3725 (ie push up projections in outerjoins)


diffs (33 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -4952,9 +4952,6 @@ rel_push_project_up(int *changes, mvc *s
                if (!l || rel_is_ref(l) || 
                   (is_join(rel->op) && (!r || rel_is_ref(r))) ||
                   (is_select(rel->op) && l->op != op_project) ||
-                  /* we cannot rewrite projection from outer joins */
-                  ((is_left(rel->op) || is_full(rel->op)) && r->op == 
op_project) ||
-                  ((is_right(rel->op) || is_full(rel->op)) && l->op == 
op_project) ||
                   (is_join(rel->op) && l->op != op_project && r->op != 
op_project) ||
                  ((l->op == op_project && (!l->l || l->r || 
project_unsafe(l))) ||
                   (is_join(rel->op) && (is_subquery(r) ||
@@ -4971,7 +4968,8 @@ rel_push_project_up(int *changes, mvc *s
                        for (n = l->exps->h; n; n = n->next) { 
                                sql_exp *e = n->data;
 
-                               if (is_column(e->type) && exp_is_atom(e)) {
+                               /* we cannot rewrite projection with atomic 
values from outer joins */
+                               if (is_column(e->type) && exp_is_atom(e) && 
!(is_right(rel->op) || is_full(rel->op))) {
                                        list_append(exps, e);
                                } else if (e->type == e_column /*||
                                           e->type == e_func ||
@@ -4994,7 +4992,8 @@ rel_push_project_up(int *changes, mvc *s
                        for (n = r->exps->h; n; n = n->next) { 
                                sql_exp *e = n->data;
 
-                               if (is_column(e->type) && exp_is_atom(e)) {
+                               /* we cannot rewrite projection with atomic 
values from outer joins */
+                               if (is_column(e->type) && exp_is_atom(e) && 
!(is_left(rel->op) || is_full(rel->op))) {
                                        list_append(exps, e);
                                } else if (e->type == e_column /*||
                                           e->type == e_func ||
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to