Changeset: 7f4298bc94c6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7f4298bc94c6 Modified Files: sql/server/rel_optimize_proj.c Branch: balanced_union Log Message:
Implements push_join_down_munion optimizer WIP 3 diffs (31 lines): diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c --- a/sql/server/rel_optimize_proj.c +++ b/sql/server/rel_optimize_proj.c @@ -3799,7 +3799,26 @@ rel_push_join_down_munion(visitor *v, sq is_munion(r->op) && !need_distinct(r) && !is_single(r) && !is_semi(rel->op)) { /* join(a, munion(b,c,d)) -> munion(join(a,b), join(a,c), join(a,d)) */ - // TODO + for (node *n = ((list*)r->l)->h; n; n = n->next) { + sql_rel *pc = rel_dup(n->data); + if (!is_project(pc->op)) + pc = rel_project(v->sql->sa, pc, rel_projections(v->sql, pc, NULL, 1, 1)); + rel_rename_exps(v->sql, l->exps, pc->exps); + if (l != ol) { + pc = rel_project(v->sql->sa, pc, NULL); + pc->exps = exps_copy(v->sql, ol->exps); + set_processed(pc); + } + pc = rel_crossproduct(v->sql->sa, pc, rel_dup(or), rel->op); + pc->exps = exps_copy(v->sql, exps); + pc->attr = exps_copy(v->sql, attr); + set_processed(pc); + pc = rel_project(v->sql->sa, pc, rel_projections(v->sql, pc, NULL, 1, 1)); + n->data = pc; + } + v->changes++; + return rel_inplace_setop_n_ary(v->sql, rel, r->l, op_munion, + rel_projections(v->sql, rel, NULL, 1, 1)); } else if (!is_munion(l->op) && is_munion(r->op) && !need_distinct(r) && !is_single(r) && is_semi(rel->op) && je) { _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org