Changeset: cc66f0cbc375 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cc66f0cbc375
Modified Files:
sql/src/backends/monet5/sql.mx
Branch: default
Log Message:
Patch to avoid mitosis in count distinct
Distinct operations should be done at one node. Mitosis is avoided
because it my rebuilt the original at great expense.
diffs (46 lines):
diff -r 5409c3557055 -r cc66f0cbc375 sql/src/backends/monet5/sql.mx
--- a/sql/src/backends/monet5/sql.mx Sat Nov 13 10:32:53 2010 +0100
+++ b/sql/src/backends/monet5/sql.mx Sun Nov 14 00:41:03 2010 +0100
@@ -1384,6 +1384,32 @@
return is_point;
}
+static int
+rel_need_distinct_query( sql_rel *rel)
+{
+ int need_distinct = 0;
+
+ while (!need_distinct && rel && is_project(rel->op) &&
!is_groupby(rel->op))
+ rel = rel->l;
+ if (!need_distinct && rel && is_groupby(rel->op) && rel->exps) {
+ node *n, *m;
+ for (n=rel->exps->h; n && !need_distinct; n = n->next) {
+ sql_exp *e = n->data;
+ if (e->type == e_aggr) {
+ list *l = e->l;
+
+ if (l) for(m = l->h; m && !need_distinct; m =
m->next){
+ sql_exp *a = m->data;
+
+ if (!need_distinct(a))
+ need_distinct = 1;
+ }
+ }
+ }
+ }
+ return need_distinct;
+}
+
stmt *
sql_symbol2stmt(mvc *c, symbol *sym)
@@ -1411,6 +1437,9 @@
int pq;
r = rel_optimizer(c, r);
pq = rel_is_point_query(r);
+ if (!pq)
+ pq = rel_need_distinct_query(r);
+
if (c->emode == m_plan) {
rel_print(c, r, 0);
} else {
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list