Changeset: 2424f60e5ef5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2424f60e5ef5
Modified Files:
        sql/server/rel_optimizer.c
Branch: graph0
Log Message:

QRW: distinct_join_exps


diffs (56 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -615,6 +615,7 @@ order_join_expressions(mvc *sql, list *d
        return res;
 }
 
+// returns 0 if |exps| > 1
 static int
 find_join_rels(list **L, list **R, list *exps, list *rels)
 {
@@ -656,7 +657,7 @@ distinct_join_exps(list *aje, list *lrel
        for(n = lrels->h, m = rrels->h, j = 0; n && m; 
            n = n->next, m = m->next, j++) {
                if (n->data && m->data)
-               for(o = n->next, p = m->next, i = j+1; o && p; 
+               for(o = n->next, p = m->next, i = j+1; o && p;
                    o = o->next, p = p->next, i++) {
                        if (o->data == n->data && p->data == m->data)
                                used[i] = 1;
@@ -1045,7 +1046,7 @@ reorder_join(mvc *sql, sql_rel *rel)
        if (rel->op == op_join)
                rel->exps = push_up_join_exps(sql, rel);
 
-               exps = rel->exps;
+       exps = rel->exps;
        if (!exps) /* crosstable, ie order not important */
                return rel;
        rel->exps = NULL; /* should be all crosstables by now */
@@ -1118,9 +1119,12 @@ rel_join_order(mvc *sql, sql_rel *rel)
                rel->l = rel_join_order(sql, rel->l);
                rel->r = rel_join_order(sql, rel->r);
                break;
+       case op_graph_select:
+               rel->l = rel_join_order(sql, rel->l);
+               break;
        case op_graph_join:
-       case op_graph_select:
-               assert(0 && "Not implemented yet"); // TODO: not handled
+               // nop, jump to reorder_join
+               break;
        }
        if (is_join(rel->op) && rel->exps && !rel_is_ref(rel)) {
                rel = rewrite(sql, rel, &rel_remove_empty_select, &e_changes); 
@@ -4606,9 +4610,9 @@ rel_remove_empty_join(mvc *sql, sql_rel 
                        return rel_inplace_project(sql->sa, rel, rel_dup(l), 
rel->exps);
                }
        } else if ((is_project(rel->op) || is_topn(rel->op) || 
is_select(rel->op)
-                               || is_sample(rel->op)) && rel->l) {
+                               || is_sample(rel->op) || rel->op == 
op_graph_select) && rel->l) {
                rel->l = rel_remove_empty_join(sql, rel->l, changes);
-       } else if (is_join(rel->op)) {
+       } else if (is_join(rel->op) || rel->op == op_graph_join) {
                rel->l = rel_remove_empty_join(sql, rel->l, changes);
                rel->r = rel_remove_empty_join(sql, rel->r, changes);
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to