Changeset: 83a46782bdb4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/83a46782bdb4
Modified Files:
        sql/server/rel_optimize_proj.c
        sql/test/Tests/keys.test
Branch: default
Log Message:

small optimize improvement


diffs (60 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
@@ -2845,21 +2845,32 @@ rel_simplify_count(visitor *v, sql_rel *
                /* With multiple count(*), use exp_ref to reduce the number of 
calls to this aggregate */
                if (ncountstar > 1) {
                        sql_exp *count_star = NULL;
+                       sql_rel *nrel = rel_project(v->sql->sa, rel, NULL);
+                       list *aexps = sa_list(v->sql->sa), *nexps = 
sa_list(v->sql->sa);
+                       nrel->exps = nexps;
                        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;
+                                               append(aexps, e);
+                                               append(nexps, exp_ref(sql, e));
                                        } else {
                                                sql_exp *ne = exp_ref(sql, 
count_star);
+
                                                if (exp_name(e))
                                                        exp_prop_alias(sql->sa, 
ne, e);
-                                               n->data = ne;
                                                v->changes++;
+                                               append(nexps, ne);
                                        }
+                               } else {
+                                       append(aexps, e);
+                                       append(nexps, exp_ref(sql, e));
                                }
                        }
+                       rel->exps = aexps;
+                       return nrel;
                }
        }
        return rel;
diff --git a/sql/test/Tests/keys.test b/sql/test/Tests/keys.test
--- a/sql/test/Tests/keys.test
+++ b/sql/test/Tests/keys.test
@@ -307,10 +307,10 @@ query T nosort
 PLAN select count(a) as x, count(*) as y from dummyme
 ----
 project (
-| group by (
-| | table("sys"."dummyme") [ "dummyme"."%TID%" NOT NULL UNIQUE ]
-| ) [  ] [ "sys"."count"() NOT NULL UNIQUE as "%1"."%1", "%1"."%1" NOT NULL as 
"%2"."%2" ]
-) [ "%1"."%1" NOT NULL UNIQUE as "x", "%2"."%2" NOT NULL UNIQUE as "y" ]
+| project (
+| |  [ "sys"."cnt"(clob "sys", clob "dummyme") NOT NULL as "%1"."%1" ]
+| ) [ "%1"."%1" NOT NULL, "%1"."%1" NOT NULL as "%2"."%2" ]
+) [ "%1"."%1" NOT NULL as "x", "%2"."%2" NOT NULL as "y" ]
 
 query II nosort
 select count(a) as x, count(*) as y from dummyme
@@ -320,3 +320,4 @@ 3
 
 statement ok
 ROLLBACK
+
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to