Changeset: 60252b66c886 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/60252b66c886
Modified Files:
sql/server/rel_optimize_proj.c
Branch: pp_hashjoin
Log Message:
improved detection of pk based distinct, ie switch of the need_distinct as its
allready a fact
diffs (24 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
@@ -3811,13 +3811,19 @@ rel_distinct_project2groupby_(visitor *v
/* rewrite distinct project [ pk ] ( select ( table ) [ e op val ])
* into project [ pk ] ( select/semijoin ( table ) */
+ sql_rel *orel = rel;
+ if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
need_distinct(rel) &&
+ (l->op == op_project && l->l && !l->r) &&
list_check_prop_all(rel->exps, (prop_check_func)&exp_is_useless_rename))
+ rel = l;
+
if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
need_distinct(rel) &&
(l->op == op_select || l->op == op_semi) && exps_unique(v->sql,
rel, rel->exps, true) &&
(!have_semantics(l->exps) || !have_nil(rel->exps))) {
- set_nodistinct(rel);
+ set_nodistinct(orel);
v->changes++;
}
+ rel = orel;
/* rewrite distinct project ( join(p,f) [ p.pk = f.fk ] ) [ p.pk ]
* into project( (semi)join(p,f) [ p.pk = f.fk ] ) [ p.pk ] */
if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
need_distinct(rel) &&
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]