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

Reply via email to