Changeset: 2b71ca0f3432 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2b71ca0f3432
Branch: ppbench
Log Message:

merged with pphashjoin


diffs (116 lines):

diff --git a/sql/backends/monet5/rel_physical.c 
b/sql/backends/monet5/rel_physical.c
--- a/sql/backends/monet5/rel_physical.c
+++ b/sql/backends/monet5/rel_physical.c
@@ -1511,9 +1511,6 @@ rel_add_project(visitor *v, sql_rel *rel
        return rel;
 }
 
-#define rewrite_physical_used      (1 << 6)
-#define is_physical_done(X)        ((X & rewrite_physical_used) == 
rewrite_physical_used)
-
 static sql_rel *
 rel_rewrite_physical(visitor *v, sql_rel *rel)
 {
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -2464,11 +2464,12 @@ distinct_join_exps(list *aje, list *lrel
        return res;
 }
 
-static list *
+static void
 find_fk( mvc *sql, list *rels, list *exps)
 {
        node *djn;
-       list *sdje, *aje, *dje;
+       //list *sdje, *aje, *dje;
+       list *aje, *dje;
        list *lrels, *rrels;
 
        /* first find the distinct join expressions */
@@ -2573,8 +2574,8 @@ find_fk( mvc *sql, list *rels, list *exp
        }
 
        /* sort expressions on weighted number of reducing operators */
-       sdje = order_join_expressions(sql, dje, rels);
-       return sdje;
+       //sdje = order_join_expressions(sql, dje, rels);
+       //return sdje;
 }
 
 static int
@@ -2807,7 +2808,18 @@ order_joins(visitor *v, list *rels, list
        int direct = 1;
 
        /* find foreign keys and reorder the expressions on reducing quality */
-       sdje = find_fk(v->sql, rels, exps);
+       //sdje = find_fk(v->sql, rels, exps);
+
+       /* first find the distinct join expressions */
+       list *aje = list_select(exps, rels, (fcmp) &exp_is_join, (fdup)NULL);
+       /* add left/right relation */
+       list *lrels, *rrels, *dje;
+       if (find_join_rels(&lrels, &rrels, aje, rels) < 0)
+               dje = aje;
+       else
+               dje = distinct_join_exps(aje, lrels, rrels);
+       /* sort expressions on weighted number of reducing operators */
+       sdje = order_join_expressions(v->sql, dje, rels);
 
        for(djn = sdje->h; djn; djn = djn->next ) {
                sql_exp *e = djn->data;
@@ -3254,7 +3266,7 @@ reorder_join(visitor *v, sql_rel *rel)
                        /* try to use an join index also for outer joins */
                        get_inner_relations(v->sql, rel, rels);
                        int cnt = list_length(exps);
-                       rel->exps = find_fk(v->sql, rels, exps);
+                       rel->exps = exps;//find_fk(v->sql, rels, exps);
                        if (list_length(rel->exps) != cnt)
                                rel->exps = order_join_expressions(v->sql, 
exps, rels);
                }
@@ -3723,14 +3735,14 @@ bind_optimize_semi_and_anti(visitor *v, 
 static sql_rel *
 rel_semijoin_use_fk(visitor *v, sql_rel *rel)
 {
-       if (is_semi(rel->op) && rel->exps) {
+       if ((is_semi(rel->op) || is_join(rel->op)) && rel->exps) {
                list *exps = rel->exps;
                list *rels = sa_list(v->sql->sa);
 
                rel->exps = NULL;
                append(rels, rel->l);
                append(rels, rel->r);
-               (void) find_fk( v->sql, rels, exps);
+               find_fk( v->sql, rels, exps);
 
                rel->exps = exps;
        }
@@ -4634,7 +4646,7 @@ rel_optimize_select_and_joins_topdown_(v
        /* push_join_down introduces semijoins */
        uint8_t cycle = *(uint8_t*) v->data;
        if (cycle <= 0) {
-               rel = rel_semijoin_use_fk(v, rel);
+               rel = rel_semijoin_use_fk(v, rel); // also for inners
                rel = rel_push_join_down(v, rel);
        }
 
diff --git a/sql/server/rel_optimizer_private.h 
b/sql/server/rel_optimizer_private.h
--- a/sql/server/rel_optimizer_private.h
+++ b/sql/server/rel_optimizer_private.h
@@ -46,6 +46,7 @@ typedef struct sql_optimizer {
 #define rel_remote_func_used      (1 << 4)
 #define rewrite_gt_zero_used      (1 << 5)
 #define unnest_used                              (1 << 6)
+#define rewrite_physical_used     (1 << 7)
 
 #define is_rewrite_fix_count_used(X)    ((X & rewrite_fix_count_used) == 
rewrite_fix_count_used)
 #define is_rewrite_values_used(X)       ((X & rewrite_values_used) == 
rewrite_values_used)
@@ -54,6 +55,7 @@ typedef struct sql_optimizer {
 #define is_rel_remote_func_used(X)      ((X & rel_remote_func_used) == 
rel_remote_func_used)
 #define is_rewrite_gt_zero_used(X)      ((X & rewrite_gt_zero_used) == 
rewrite_gt_zero_used)
 #define is_unnest_used(X)                          ((X & unnest_used) == 
unnest_used)
+#define is_physical_done(X)                            ((X & 
rewrite_physical_used) == rewrite_physical_used)
 
 /* At the moment the following optimizers 'packs' can be disabled,
    later we could disable individual optimizers from the 'pack' */
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to