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]

Reply via email to