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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list