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]