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]

Reply via email to