Changeset: ec4ffd479b15 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ec4ffd479b15
Modified Files:
sql/server/rel_optimizer.c
Branch: default
Log Message:
don't push up projects on subqueries with in or not in
diffs (32 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
@@ -6282,6 +6282,20 @@ rel_remove_join(visitor *v, sql_rel *rel
return rel;
}
+static int
+exps_has_setjoin(list *exps)
+{
+ if (!exps)
+ return 0;
+ for(node *n=exps->h; n; n = n->next) {
+ sql_exp *e = n->data;
+
+ if (e->type == e_cmp && (e->flag == mark_in || e->flag ==
mark_notin))
+ return 1;
+ }
+ return 0;
+}
+
/* Pushing projects up the tree. Done very early in the optimizer.
* Makes later steps easier.
*/
@@ -6306,6 +6320,7 @@ rel_push_project_up(visitor *v, sql_rel
/* Don't rewrite refs, non projections or constant or
order by projections */
if (!l || rel_is_ref(l) || is_topn(l->op) || is_sample(l->op) ||
+ (is_join(rel->op) && exps_has_setjoin(rel->exps)) ||
(is_join(rel->op) && (!r || rel_is_ref(r))) ||
(is_left(rel->op) && (rel->flag&MERGE_LEFT) /* can't push
projections above merge statments left joins */) ||
(is_select(rel->op) && l->op != op_project) ||
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list