Changeset: c239caad1f38 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c239caad1f38
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_rewriter.c
        sql/server/rel_rewriter.h
        sql/server/rel_unnest.c
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test
Branch: default
Log Message:

Backed out changeset 4fc1d0a0ac3b I forgot to create a new branch.


diffs (221 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
@@ -5544,7 +5544,9 @@ rel_push_project_down(visitor *v, sql_re
                        }
                        return rel;
                } else if (list_check_prop_all(rel->exps, 
(prop_check_func)&exp_is_useless_rename)) {
-                       if ((is_project(l->op) && list_length(l->exps) == 
list_length(rel->exps)) || (v->parent && is_project(v->parent->op))) {
+                       if ((is_project(l->op) && list_length(l->exps) == 
list_length(rel->exps)) ||
+                               ((v->parent && is_project(v->parent->op)) &&
+                                (is_set(l->op) || is_select(l->op) || 
is_join(l->op) || is_semi(l->op) || is_topn(l->op) || is_sample(l->op)))) {
                                rel->l = NULL;
                                rel_destroy(rel);
                                v->changes++;
@@ -8724,6 +8726,14 @@ rel_split_outerjoin(visitor *v, sql_rel 
        return rel;
 }
 
+/* rewrite sqltype into backend types */
+static sql_rel *
+rel_rewrite_types(visitor *v, sql_rel *rel)
+{
+       (void)v;
+       return rel;
+}
+
 static sql_exp *
 exp_indexcol(mvc *sql, sql_exp *e, const char *tname, const char *cname, int 
de, bit unique)
 {
@@ -9668,6 +9678,8 @@ optimize_rel(mvc *sql, sql_rel *rel, int
        if (gp.cnt[op_project])
                rel = rel_visitor_bottomup(&v, rel, &rel_project_cse);
 
+       rel = rel_visitor_bottomup(&v, rel, &rel_rewrite_types);
+
        if ((gp.cnt[op_left] || gp.cnt[op_right] || gp.cnt[op_full]) && /* 
DISABLES CODE */ (0))
                rel = rel_visitor_topdown(&v, rel, &rel_split_outerjoin);
 
@@ -9710,8 +9722,7 @@ optimize_rel(mvc *sql, sql_rel *rel, int
                        rel = rel_join_order(&v, rel);
                rel = rel_visitor_bottomup(&v, rel, &rel_push_join_down_union);
                /* rel_join_order may introduce empty selects */
-               if (gp.cnt[op_select])
-                       rel = rel_visitor_bottomup(&ev, rel, 
&rel_remove_empty_select);
+               rel = rel_visitor_bottomup(&ev, rel, &rel_remove_empty_select);
 
                if (level <= 0)
                        rel = rel_visitor_bottomup(&v, rel, 
&rel_join_push_exps_down);
@@ -9722,8 +9733,7 @@ optimize_rel(mvc *sql, sql_rel *rel, int
                rel = rel_visitor_topdown(&v, rel, &rel_push_count_down);
                if (level <= 0) {
                        rel = rel_visitor_topdown(&v, rel, 
&rel_push_select_down);
-                       if (gp.cnt[op_select])
-                               rel = rel_visitor_bottomup(&ev, rel, 
&rel_remove_empty_select);
+                       rel = rel_visitor_bottomup(&ev, rel, 
&rel_remove_empty_select);
                        rel = rel_visitor_topdown(&v, rel, &rel_push_join_down);
                }
 
@@ -9750,8 +9760,7 @@ optimize_rel(mvc *sql, sql_rel *rel, int
           because pushing down select expressions makes rel_join_order more 
difficult */
        if (gp.cnt[op_select] || gp.cnt[op_join] || gp.cnt[op_semi] || 
gp.cnt[op_anti]) {
                rel = rel_visitor_topdown(&v, rel, &rel_push_select_down);
-               if (gp.cnt[op_select])
-                       rel = rel_visitor_bottomup(&ev, rel, 
&rel_remove_empty_select);
+               rel = rel_visitor_bottomup(&ev, rel, &rel_remove_empty_select);
        }
 
        if (gp.cnt[op_join] || gp.cnt[op_left] || gp.cnt[op_right] || 
gp.cnt[op_full] || gp.cnt[op_semi] || gp.cnt[op_anti]) {
@@ -9771,18 +9780,14 @@ optimize_rel(mvc *sql, sql_rel *rel, int
                rel = rel_visitor_topdown(&v, rel, 
&rel_push_project_down_union);
 
        /* Remove unused expressions */
-       if (level <= 0 || v.changes) {
-               if (level > 0)
-                       rel = rel_exp_visitor_bottomup(&v, rel, 
&reset_exp_used, false);
+       if (level <= 0)
                rel = rel_dce(sql, rel);
-       }
 
        if (gp.cnt[op_join] || gp.cnt[op_left] || gp.cnt[op_right] || 
gp.cnt[op_full] ||
            gp.cnt[op_semi] || gp.cnt[op_anti] || gp.cnt[op_select]) {
                rel = rel_visitor_bottomup(&v, rel, &rel_push_func_down);
                rel = rel_visitor_topdown(&v, rel, &rel_push_select_down);
-               if (gp.cnt[op_select])
-                       rel = rel_visitor_bottomup(&ev, rel, 
&rel_remove_empty_select);
+               rel = rel_visitor_bottomup(&ev, rel, &rel_remove_empty_select);
        }
 
        if (gp.cnt[op_topn] || gp.cnt[op_sample])
diff --git a/sql/server/rel_rewriter.c b/sql/server/rel_rewriter.c
--- a/sql/server/rel_rewriter.c
+++ b/sql/server/rel_rewriter.c
@@ -368,14 +368,3 @@ rewrite_reset_used(visitor *v, sql_rel *
        rel->used = 0;
        return rel;
 }
-
-sql_exp *
-reset_exp_used(visitor *v, sql_rel *rel, sql_exp *e, int depth)
-{
-       (void) v;
-       (void) rel;
-       (void) depth;
-
-       e->used = 0;
-       return e;
-}
diff --git a/sql/server/rel_rewriter.h b/sql/server/rel_rewriter.h
--- a/sql/server/rel_rewriter.h
+++ b/sql/server/rel_rewriter.h
@@ -24,6 +24,5 @@ extern sql_rel *rel_remove_empty_select(
 extern sql_exp *exp_push_down(mvc *sql, sql_exp *e, sql_rel *f, sql_rel *t);
 
 extern sql_rel *rewrite_reset_used(visitor *v, sql_rel *rel);
-extern sql_exp *reset_exp_used(visitor *v, sql_rel *rel, sql_exp *e, int 
depth);
 
 #endif /*_REL_REWRITER_H_*/
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3443,6 +3443,16 @@ rewrite_values(visitor *v, sql_rel *rel)
        return rel;
 }
 
+static sql_exp *
+reset_exp_used(visitor *v, sql_rel *rel, sql_exp *e, int depth)
+{
+       (void) v;
+       (void) rel;
+       (void) depth;
+
+       e->used = 0;
+       return e;
+}
 
 sql_rel *
 rel_unnest(mvc *sql, sql_rel *rel)
diff --git 
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test
 
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test
--- 
a/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test
+++ 
b/sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test
@@ -14,7 +14,7 @@ query T nosort
    plan select id       from fk left outer join pk1 on fk.fk1 = pk1.pk1 left 
outer join pk2 on fk.fk2 = pk2.pk2 order by id
 ----
 project (
-| table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL  ] COUNT 
+| table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT 
 ) [ "fk"."id" NOT NULL HASHCOL  ] [ "fk"."id" ASC NOT NULL HASHCOL  ]
 
 query T nosort
@@ -22,7 +22,7 @@ query T nosort
 ----
 project (
 | left outer join (
-| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey" ] COUNT ,
+| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT ,
 | | table("sys"."pk1") [ "pk1"."v1", "pk1"."%TID%" NOT NULL ] COUNT 
 | ) [ "fk"."%fk_fk1_fkey" NOT NULL = "pk1"."%TID%" NOT NULL JOINIDX 
"sys"."fk"."fk_fk1_fkey" ]
 ) [ "fk"."id" NOT NULL HASHCOL , "pk1"."v1" ] [ "fk"."id" ASC NOT NULL HASHCOL 
 ]
@@ -53,7 +53,7 @@ query T nosort
    plan select id       from pk2 right outer join (pk1 right outer join fk on 
fk.fk1 = pk1.pk1) on fk.fk2 = pk2.pk2 order by id
 ----
 project (
-| table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL  ] COUNT 
+| table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT 
 ) [ "fk"."id" NOT NULL HASHCOL  ] [ "fk"."id" ASC NOT NULL HASHCOL  ]
 
 query T nosort
@@ -62,7 +62,7 @@ query T nosort
 project (
 | right outer join (
 | | table("sys"."pk1") [ "pk1"."v1", "pk1"."%TID%" NOT NULL ] COUNT ,
-| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey" ] COUNT 
+| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT 
 | ) [ "fk"."%fk_fk1_fkey" NOT NULL = "pk1"."%TID%" NOT NULL JOINIDX 
"sys"."fk"."fk_fk1_fkey" ]
 ) [ "fk"."id" NOT NULL HASHCOL , "pk1"."v1" ] [ "fk"."id" ASC NOT NULL HASHCOL 
 ]
 
@@ -92,7 +92,7 @@ query T nosort
    plan select id       from pk2 full outer join (pk1 full outer join fk on 
fk.fk1 = pk1.pk1) on fk.fk2 = pk2.pk2 order by id
 ----
 project (
-| table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL  ] COUNT 
+| table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT 
 ) [ "fk"."id" HASHCOL  ] [ "fk"."id" ASC HASHCOL  ]
 
 query T nosort
@@ -101,7 +101,7 @@ query T nosort
 project (
 | full outer join (
 | | table("sys"."pk1") [ "pk1"."v1", "pk1"."%TID%" NOT NULL ] COUNT ,
-| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey" ] COUNT 
+| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT 
 | ) [ "fk"."%fk_fk1_fkey" NOT NULL = "pk1"."%TID%" NOT NULL JOINIDX 
"sys"."fk"."fk_fk1_fkey" ]
 ) [ "fk"."id" HASHCOL , "pk1"."v1" ] [ "fk"."id" ASC HASHCOL  ]
 
@@ -131,7 +131,7 @@ query T nosort
    plan select id       from pk2 join (pk1 join fk on fk.fk1 = pk1.pk1) on 
fk.fk2 = pk2.pk2 order by id
 ----
 project (
-| table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL  ] COUNT 
+| table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT 
 ) [ "fk"."id" NOT NULL HASHCOL  ] [ "fk"."id" ASC NOT NULL HASHCOL  ]
 
 query T nosort
@@ -139,7 +139,7 @@ query T nosort
 ----
 project (
 | join (
-| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey" ] COUNT ,
+| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT ,
 | | table("sys"."pk1") [ "pk1"."v1", "pk1"."%TID%" NOT NULL ] COUNT 
 | ) [ "fk"."%fk_fk1_fkey" NOT NULL = "pk1"."%TID%" NOT NULL JOINIDX 
"sys"."fk"."fk_fk1_fkey" ]
 ) [ "fk"."id" NOT NULL HASHCOL , "pk1"."v1" ] [ "fk"."id" ASC NOT NULL HASHCOL 
 ]
@@ -149,7 +149,7 @@ query T nosort
 ----
 project (
 | join (
-| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk2_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk2_fkey" ] COUNT ,
+| | table("sys"."fk") [ "fk"."id" NOT NULL HASHCOL , "fk"."%fk_fk1_fkey" NOT 
NULL JOINIDX "sys"."fk"."fk_fk1_fkey", "fk"."%fk_fk2_fkey" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ] COUNT ,
 | | table("sys"."pk2") [ "pk2"."v2", "pk2"."%TID%" NOT NULL ] COUNT 
 | ) [ "fk"."%fk_fk2_fkey" NOT NULL = "pk2"."%TID%" NOT NULL JOINIDX 
"sys"."fk"."fk_fk2_fkey" ]
 ) [ "fk"."id" NOT NULL HASHCOL , "pk2"."v2" ] [ "fk"."id" ASC NOT NULL HASHCOL 
 ]
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to