Changeset: 4aa86463b7cf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4aa86463b7cf
Modified Files:
        sql/server/rel_optimize_sel.c
Branch: Dec2025
Log Message:

only push down semijoins if not referenced


diffs (39 lines):

diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -2999,7 +2999,7 @@ rel_push_semijoin_down_or_up(visitor *v,
 {
        uint8_t cycle = *(uint8_t*) v->data;
 
-       if (rel->op == op_join && rel->exps && rel->l) {
+       if (rel->op == op_join && rel->exps && rel->l && !rel_is_ref(rel)) {
                sql_rel *l = rel->l, *r = rel->r;
 
                if (is_semi(l->op) && !rel_is_ref(l) && is_select(r->op) && 
!rel_is_ref(r)) {
@@ -3012,7 +3012,7 @@ rel_push_semijoin_down_or_up(visitor *v,
        }
        /* also case with 2 joins */
        /* join ( join ( semijoin(), table), select (table)); */
-       if (rel->op == op_join && rel->exps && rel->l) {
+       if (rel->op == op_join && rel->exps && rel->l && !rel_is_ref(rel)) {
                sql_rel *l = rel->l, *r = rel->r;
                sql_rel *ll;
 
@@ -3028,7 +3028,7 @@ rel_push_semijoin_down_or_up(visitor *v,
                }
        }
        /* first push down the expressions involving only A */
-       if (rel->op == op_semi && rel->exps && rel->l) {
+       if (rel->op == op_semi && rel->exps && rel->l && !rel_is_ref(rel)) {
                sql_rel *jl = rel->l, *ojl = jl;
 
                set_processed(jl);
@@ -3049,7 +3049,7 @@ rel_push_semijoin_down_or_up(visitor *v,
                if (ojl != jl)
                        set_processed(jl);
        }
-       if (rel->op == op_semi && rel->exps && rel->l) {
+       if (rel->op == op_semi && rel->exps && rel->l && !rel_is_ref(rel)) {
                operator_type op = rel->op, lop;
                node *n;
                sql_rel *l = rel->l, *ll = NULL, *lr = NULL;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to