Changeset: 06f69a29ee02 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset&node=06f69a29ee02 Modified Files: sql/server/rel_optimizer.c Branch: default Log Message:
Sample relation is a top relation too diffs (64 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 @@ -6475,10 +6475,10 @@ 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) || + if (!l || rel_is_ref(l) || is_topn(l->op) || is_sample(l->op) || (is_join(rel->op) && (!r || rel_is_ref(r))) || (is_select(rel->op) && l->op != op_project) || - (is_join(rel->op) && ((l->op != op_project && r->op != op_project) || is_topn(r->op))) || + (is_join(rel->op) && ((l->op != op_project && r->op != op_project) || is_topn(r->op) || is_sample(r->op))) || ((l->op == op_project && (!l->l || l->r || project_unsafe(l,is_select(rel->op)))) || (is_join(rel->op) && (r->op == op_project && (!r->l || r->r || project_unsafe(r,0)))))) return rel; @@ -8010,7 +8010,7 @@ rel_split_project(visitor *v, sql_rel *r rel->l = nrel; /* recursively split all functions and add those to the projection list */ split_exps(v->sql, rel->exps, nrel); - if (nrel->l && !(nrel->l = rel_split_project(v, nrel->l, is_topn(rel->op)?top:0))) + if (nrel->l && !(nrel->l = rel_split_project(v, nrel->l, (is_topn(rel->op)||is_sample(rel->op))?top:0))) return NULL; return rel; } else if (funcs && !top && !rel->r) { @@ -8034,12 +8034,12 @@ rel_split_project(visitor *v, sql_rel *r if (is_set(rel->op) || is_basetable(rel->op)) return rel; if (rel->l) { - rel->l = rel_split_project(v, rel->l, (is_topn(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0); + rel->l = rel_split_project(v, rel->l, (is_topn(rel->op)||is_sample(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0); if (!rel->l) return NULL; } if ((is_join(rel->op) || is_semi(rel->op)) && rel->r) { - rel->r = rel_split_project(v, rel->r, (is_topn(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0); + rel->r = rel_split_project(v, rel->r, (is_topn(rel->op)||is_sample(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0); if (!rel->r) return NULL; } @@ -8131,7 +8131,7 @@ rel_split_select(visitor *v, sql_rel *re rel->l = nrel; /* recursively split all functions and add those to the projection list */ select_split_exps(v->sql, rel->exps, nrel); - if (nrel->l && !(nrel->l = rel_split_project(v, nrel->l, is_topn(rel->op)?top:0))) + if (nrel->l && !(nrel->l = rel_split_project(v, nrel->l, (is_topn(rel->op)||is_sample(rel->op))?top:0))) return NULL; return rel; } else if (funcs && !top && !rel->r) { @@ -8155,12 +8155,12 @@ rel_split_select(visitor *v, sql_rel *re if (is_set(rel->op) || is_basetable(rel->op)) return rel; if (rel->l) { - rel->l = rel_split_select(v, rel->l, (is_topn(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0); + rel->l = rel_split_select(v, rel->l, (is_topn(rel->op)||is_sample(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0); if (!rel->l) return NULL; } if ((is_join(rel->op) || is_semi(rel->op)) && rel->r) { - rel->r = rel_split_select(v, rel->r, (is_topn(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0); + rel->r = rel_split_select(v, rel->r, (is_topn(rel->op)||is_sample(rel->op)||is_ddl(rel->op)||is_modify(rel->op))?top:0); if (!rel->r) return NULL; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list