Changeset: 1afbf38fb99a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1afbf38fb99a
Modified Files:
        sql/server/rel_statistics.c
Branch: properties
Log Message:

This optimizer has been backported


diffs (64 lines):

diff --git a/sql/server/rel_statistics.c b/sql/server/rel_statistics.c
--- a/sql/server/rel_statistics.c
+++ b/sql/server/rel_statistics.c
@@ -514,51 +514,6 @@ rel_prune_predicates(visitor *v, sql_rel
        return rel->exps;
 }
 
-static list*
-rel_simplify_count(visitor *v, sql_rel *rel)
-{
-       mvc *sql = v->sql;
-       int ncountstar = 0;
-
-       /* Convert count(no null) into count(*) */
-       for (node *n = rel->exps->h; n ; n = n->next) {
-               sql_exp *e = n->data;
-
-               if (exp_aggr_is_count(e) && !need_distinct(e)) {
-                       if (list_length(e->l) == 0) {
-                               ncountstar++;
-                       } else if (list_length(e->l) == 1 && 
!has_nil((sql_exp*)((list*)e->l)->h->data)) {
-                               sql_subfunc *cf = sql_bind_func(sql, "sys", 
"count", sql_bind_localtype("void"), NULL, F_AGGR);
-                               sql_exp *ne = exp_aggr(sql->sa, NULL, cf, 0, 0, 
e->card, 0);
-                               if (exp_name(e))
-                                       exp_prop_alias(sql->sa, ne, e);
-                               n->data = ne;
-                               ncountstar++;
-                               v->changes++;
-                       }
-               }
-       }
-       /* With multiple count(*), use exp_ref to reduce the number of calls to 
this aggregate */
-       if (ncountstar > 1) {
-               sql_exp *count_star = NULL;
-               for (node *n = rel->exps->h; n ; n = n->next) {
-                       sql_exp *e = n->data;
-
-                       if (exp_aggr_is_count(e) && !need_distinct(e) && 
list_length(e->l) == 0) {
-                               if (!count_star) {
-                                       count_star = e;
-                               } else {
-                                       sql_exp *ne = exp_ref(sql, count_star);
-                                       if (exp_name(e))
-                                               exp_prop_alias(sql->sa, ne, e);
-                                       n->data = ne;
-                               }
-                       }
-               }
-       }
-       return rel->exps;
-}
-
 sql_rel *
 rel_get_statistics(visitor *v, sql_rel *rel)
 {
@@ -620,8 +575,6 @@ rel_get_statistics(visitor *v, sql_rel *
                if (is_simple_project(rel->op) && !list_empty(rel->r))
                        rel->r = exps_exp_visitor_bottomup(v, rel, rel->r, 0, 
&rel_propagate_statistics, false);
                /* The following optimizations can only be applied after 
propagating the statistics to rel->exps */
-               if (is_groupby(rel->op) && rel->exps)
-                       rel->exps = rel_simplify_count(v, rel);
                if ((is_join(rel->op) || is_select(rel->op)) && rel->exps) {
                        int changes = v->changes;
                        rel->exps = rel_prune_predicates(v, rel);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to