Changeset: 417a2c4f0383 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/417a2c4f0383
Modified Files:
sql/server/rel_optimize_proj.c
sql/server/rel_statistics.c
Branch: default
Log Message:
when rewriting groupby into project (when group by exps values are unique)
output the same number of expressions (ie not both group by exps and result
list).
when reducing group by expression list, use the least expensive unique group by
expression.
diffs (31 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
@@ -2363,8 +2363,10 @@ rel_reduce_groupby_exps(visitor *v, sql_
for(j = 0; j < i; j++)
if (c->t == tbls[j] && bts[j] == bt)
break;
- if (c->unique == 2 || mvc_is_unique(v->sql, c))
- unique[j] = e;
+ if (c->unique == 2 || mvc_is_unique(v->sql, c))
{
+ if (!unique[j] ||
exp_subtype(e)->type->localtype < exp_subtype(unique[j])->type->localtype)
+ unique[j] = e;
+ }
table_id[k] = j;
tbls[j] = c->t;
bts[j] = bt;
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
@@ -1512,9 +1512,11 @@ rel_groupby_order(visitor *v, sql_rel *r
}
if (!found) {
/* no need to groupby on unique values */
+ list *exps = rel_projections(v->sql, rel, NULL, 0, 1);
rel->exps= list_merge(rel->r, rel->exps, (fdup)NULL);
rel->op = op_project;
rel->r = NULL;
+ rel = rel_project(v->sql->sa, rel, exps);
return rel;
}
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]