Changeset: 729b9d6aca6b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/729b9d6aca6b Modified Files: sql/server/rel_optimizer.c Branch: Jan2022 Log Message:
Make sure ordering expressions are added to union expression list if missing diffs (65 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 @@ -1969,10 +1969,7 @@ rel_push_topn_and_sample_down(visitor *v if (r) rp = r->l; if (r && r->exps && is_simple_project(r->op) && !rel_is_ref(r) && !list_empty(r->r) && r->l && is_union(rp->op)) { - sql_rel *u = rp, *ou = u, *x; - sql_rel *ul = u->l; - sql_rel *ur = u->r; - int add_r = 0; + sql_rel *u = rp, *ou = u, *x, *ul = u->l, *ur = u->r; list *rcopy = NULL; /* only push topn/sample once */ @@ -1987,14 +1984,11 @@ rel_push_topn_and_sample_down(visitor *v if (x && x->op == rel->op) return rel; - if (list_length(ul->exps) > list_length(r->exps)) { - add_r = 1; - rcopy = exps_copy(v->sql, r->r); - for (node *n = rcopy->h ; n ; n = n->next) { - sql_exp *e = n->data; - set_descending(e); - set_nulls_first(e); - } + rcopy = exps_copy(v->sql, r->r); + for (node *n = rcopy->h ; n ; n = n->next) { + sql_exp *e = n->data; + set_descending(e); /* remove ordering properties for projected columns */ + set_nulls_first(e); } ul = rel_dup(ul); ur = rel_dup(ur); @@ -2011,8 +2005,7 @@ rel_push_topn_and_sample_down(visitor *v ul = rel_project(v->sql->sa, ul, NULL); ul->exps = exps_copy(v->sql, r->exps); /* possibly add order by column */ - if (add_r) - ul->exps = list_distinct(list_merge(ul->exps, exps_copy(v->sql, rcopy), NULL), (fcmp) exp_equal, (fdup) NULL); + ul->exps = list_distinct(list_merge(ul->exps, exps_copy(v->sql, rcopy), NULL), (fcmp) exp_equal, (fdup) NULL); ul->nrcols = list_length(ul->exps); ul->r = exps_copy(v->sql, r->r); ul = func(v->sql->sa, ul, sum_limit_offset(v->sql, rel)); @@ -2020,8 +2013,7 @@ rel_push_topn_and_sample_down(visitor *v ur = rel_project(v->sql->sa, ur, NULL); ur->exps = exps_copy(v->sql, r->exps); /* possibly add order by column */ - if (add_r) - ur->exps = list_distinct(list_merge(ur->exps, exps_copy(v->sql, rcopy), NULL), (fcmp) exp_equal, (fdup) NULL); + ur->exps = list_distinct(list_merge(ur->exps, exps_copy(v->sql, rcopy), NULL), (fcmp) exp_equal, (fdup) NULL); ur->nrcols = list_length(ur->exps); ur->r = exps_copy(v->sql, r->r); ur = func(v->sql->sa, ur, sum_limit_offset(v->sql, rel)); @@ -2031,8 +2023,7 @@ rel_push_topn_and_sample_down(visitor *v u->nrcols = list_length(u->exps); set_processed(u); /* possibly add order by column */ - if (add_r) - u->exps = list_distinct(list_merge(u->exps, rcopy, NULL), (fcmp) exp_equal, (fdup) NULL); + u->exps = list_distinct(list_merge(u->exps, rcopy, NULL), (fcmp) exp_equal, (fdup) NULL); if (need_distinct(r)) { set_distinct(ul); set_distinct(ur); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list