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]