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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list