Changeset: d17ab5825c84 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d17ab5825c84
Modified Files:
sql/server/rel_optimizer.c
Branch: Jan2014
Log Message:
fixed over eager rewriting of select distinct.
diffs (33 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
@@ -1953,7 +1953,7 @@ rel_distinct_project2groupby(int *change
if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
need_distinct(rel) &&
exps_card(rel->exps) <= CARD_ATOM) {
set_nodistinct(rel);
- rel->l = NULL;
+ rel->l = rel_topn(sql->sa, rel->l, append(sa_list(sql->sa),
exp_atom_wrd(sql->sa, 1)));
}
/* rewrite distinct project [ pk ] ( select ( table ) [ e op val ])
@@ -1963,8 +1963,8 @@ rel_distinct_project2groupby(int *change
set_nodistinct(rel);
/* rewrite distinct project [ gbe ] ( select ( groupby [ gbe ] [ gbe, e
] )[ e op val ])
* into project [ gbe ] ( select ( group etc ) */
- if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
need_distinct(rel) &&
- l->op == op_select) {
+ if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
+ need_distinct(rel) && l->op == op_select){
sql_rel *g = l->l;
if (is_groupby(g->op)) {
list *gbe = g->r;
@@ -1989,7 +1989,8 @@ rel_distinct_project2groupby(int *change
set_nodistinct(rel);
}
}
- if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
need_distinct(rel)) {
+ if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
+ need_distinct(rel) && exps_card(rel->exps) > CARD_ATOM) {
node *n;
list *exps = new_exp_list(sql->sa), *gbe =
new_exp_list(sql->sa);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list