Changeset: 328df4f65468 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/328df4f65468
Modified Files:
sql/server/rel_optimize_sel.c
sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.test
sql/test/BugTracker-2025/Tests/7616_join_reordering_3.test
sql/test/SQLancer/Tests/sqlancer17.test
sql/test/miscellaneous/Tests/rel_push_count_down.test
Branch: pp_hashjoin
Log Message:
merged with default
diffs (130 lines):
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
@@ -159,7 +159,7 @@ rel_remove_redundant_join_(visitor *v, s
}
if (found) {
rel_destroy(v->sql, rel);
- return nrel;
+ rel = nrel;
} else {
rel_destroy(v->sql, nrel);
}
@@ -205,6 +205,16 @@ rel_remove_redundant_join_(visitor *v, s
}
}
}
+ if (is_join(rel->op) && !is_full(rel->op) && !is_right(rel->op) &&
list_empty(rel->exps) && list_empty(rel->attr)) {
+ /* inner or left */
+ sql_rel *l = rel->l, *r = rel->r;
+ if (is_simple_project(r->op) && !r->l && !r->r &&
exps_card(r->exps) <= CARD_AGGR && !rel_is_ref(l) && !is_dynamic(r)) {
+ sql_rel *nrel = rel_project(v->sql->sa, rel_dup(l),
list_merge(rel_projections(v->sql, l, NULL, 0, 1), exps_copy(v->sql, r->exps),
NULL));
+ rel_destroy(v->sql, rel);
+ rel = nrel;
+ }
+ return rel;
+ }
return rel;
}
diff --git a/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.test
b/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.test
--- a/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.test
+++ b/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.test
@@ -13,13 +13,12 @@ EXPLAIN SHOW DETAILS
SELECT a as d, MIN(b), (2 * (MIN(b) / (SELECT 2))) as f FROM dbg GROUP BY d
----
project (
-| left outer join (
+| project (
| | group by (
| | | table("sys"."dbg") [ "dbg"."a" NOT NULL UNIQUE, "dbg"."b" NOT NULL
UNIQUE ]
-| | ) [ "dbg"."a" NOT NULL UNIQUE as "d" ] [ "d" NOT NULL UNIQUE, "sys"."min"
no nil ("dbg"."b" NOT NULL UNIQUE) NOT NULL as "%1"."%1" ],
-| | [ tinyint(2) "2" as "%3"."%3" ]
-| ) [ ]
-) [ "d" NOT NULL, "%1"."%1" NOT NULL, "sys"."sql_mul"(tinyint(2) "2",
"sys"."sql_div"("%1"."%1" NOT NULL, "%3"."%3")) as "f" ]
+| | ) [ "dbg"."a" NOT NULL UNIQUE as "d" ] [ "d" NOT NULL UNIQUE, "sys"."min"
no nil ("dbg"."b" NOT NULL UNIQUE) NOT NULL as "%1"."%1" ]
+| ) [ "d" NOT NULL UNIQUE, "%1"."%1" NOT NULL, tinyint(2) "2" as "%3"."%3" ]
+) [ "d" NOT NULL UNIQUE, "%1"."%1" NOT NULL, "sys"."sql_mul"(tinyint(2) "2",
"sys"."sql_div"("%1"."%1" NOT NULL, "%3"."%3" NOT NULL) NOT NULL) NOT NULL as
"f" ]
statement ok
set optimizer = 'sequential_pipe'
@@ -52,13 +51,12 @@ EXPLAIN SHOW DETAILS
SELECT a as d, MIN(b) as e, (2 * (MIN(b) / (SELECT 2))) as f FROM dbg GROUP BY
d
----
project (
-| left outer join (
+| project (
| | group by (
| | | table("sys"."dbg") [ "dbg"."a" NOT NULL UNIQUE, "dbg"."b" NOT NULL
UNIQUE ]
-| | ) [ "dbg"."a" NOT NULL UNIQUE as "d" ] [ "d" NOT NULL UNIQUE, "sys"."min"
no nil ("dbg"."b" NOT NULL UNIQUE) NOT NULL as "%1"."%1" ],
-| | [ tinyint(2) "2" as "%3"."%3" ]
-| ) [ ]
-) [ "d" NOT NULL, "%1"."%1" NOT NULL as "e", "sys"."sql_mul"(tinyint(2) "2",
"sys"."sql_div"("%1"."%1" NOT NULL, "%3"."%3")) as "f" ]
+| | ) [ "dbg"."a" NOT NULL UNIQUE as "d" ] [ "d" NOT NULL UNIQUE, "sys"."min"
no nil ("dbg"."b" NOT NULL UNIQUE) NOT NULL as "%1"."%1" ]
+| ) [ "d" NOT NULL UNIQUE, "%1"."%1" NOT NULL, tinyint(2) "2" as "%3"."%3" ]
+) [ "d" NOT NULL UNIQUE, "%1"."%1" NOT NULL as "e", "sys"."sql_mul"(tinyint(2)
"2", "sys"."sql_div"("%1"."%1" NOT NULL, "%3"."%3" NOT NULL) NOT NULL) NOT NULL
as "f" ]
statement ok
set optimizer = 'sequential_pipe'
diff --git a/sql/test/BugTracker-2025/Tests/7616_join_reordering_3.test
b/sql/test/BugTracker-2025/Tests/7616_join_reordering_3.test
--- a/sql/test/BugTracker-2025/Tests/7616_join_reordering_3.test
+++ b/sql/test/BugTracker-2025/Tests/7616_join_reordering_3.test
@@ -11,14 +11,11 @@ EXPLAIN SHOW DETAILS SELECT a1, p FROM (
project (
| project (
| | join (
-| | | join (
-| | | | project (
-| | | | | table("sys"."x") [ "x"."a1" NOT NULL UNIQUE, "x"."a3" NOT NULL
UNIQUE, "x"."p" NOT NULL UNIQUE ]
-| | | | ) [ "x"."a1" NOT NULL UNIQUE as "foo_x0"."a1", "x"."a3" NOT NULL
UNIQUE as "foo_x0"."a2", "x"."p" NOT NULL UNIQUE as "foo_x0"."p" ],
-| | | | [ [ varchar(3) "bar" ] as "foo_x1"."a1" ]
-| | | ) [ ("foo_x0"."a2" NOT NULL UNIQUE) FILTER
"sys"."contains"(varchar["foo_x1"."a1" NOT NULL] NOT NULL, boolean(1) "true") ],
-| | | table("sys"."y") [ "y"."a1" NOT NULL UNIQUE, "y"."p" NOT NULL UNIQUE ]
-| | ) [ ("y"."a1" NOT NULL UNIQUE) = ("foo_x0"."a1" NOT NULL) ]
-| ) [ "y"."a1" NOT NULL as "foo_x4"."a1", "sys"."sql_mul"("y"."p" NOT NULL,
"foo_x0"."p" NOT NULL) NOT NULL as "foo_x4"."p" ]
-) [ "foo_x4"."a1" NOT NULL, "foo_x4"."p" NOT NULL ]
+| | | table("sys"."y") [ "y"."a1" NOT NULL UNIQUE, "y"."p" NOT NULL UNIQUE ],
+| | | select (
+| | | | table("sys"."x") [ "x"."a1" NOT NULL UNIQUE, "x"."a3" NOT NULL UNIQUE,
"x"."p" NOT NULL UNIQUE ]
+| | | ) [ ("x"."a3" NOT NULL UNIQUE) FILTER "sys"."contains"(varchar[ [
varchar(3) "bar" ]] NOT NULL, boolean(1) "true") ]
+| | ) [ ("y"."a1" NOT NULL UNIQUE) = ("x"."a1" NOT NULL UNIQUE) ]
+| ) [ "y"."a1" NOT NULL UNIQUE as "foo_x4"."a1", "sys"."sql_mul"("y"."p" NOT
NULL, "x"."p" NOT NULL) NOT NULL as "foo_x4"."p" ]
+) [ "foo_x4"."a1" NOT NULL UNIQUE, "foo_x4"."p" NOT NULL ]
diff --git a/sql/test/SQLancer/Tests/sqlancer17.test
b/sql/test/SQLancer/Tests/sqlancer17.test
--- a/sql/test/SQLancer/Tests/sqlancer17.test
+++ b/sql/test/SQLancer/Tests/sqlancer17.test
@@ -637,15 +637,7 @@ EXPLAIN SHOW DETAILS SELECT 1 FROM rt0 C
least(3, sub0.c1) FROM vx JOIN (SELECT 4, vy.vc0 FROM vy) AS sub0(c1,c2) ON
TRUE) AS sub0(c0,c2)
----
project (
-| crossproduct (
-| | table("sys"."rt0") [ "rt0"."%TID%" NOT NULL UNIQUE ],
-| | project (
-| | | crossproduct (
-| | | | [ varchar(1) "a" as "%2"."%2" ],
-| | | | [ tinyint(2) "2" as "%4"."%4" ]
-| | | ) [ ]
-| | ) [ "sys"."casewhen"("%4"."%4" NOT NULL, tinyint(3) "4", varchar(1) "c",
varchar(1) NULL) as "sub0"."c0" ]
-| ) [ ]
+| table("sys"."rt0") [ "rt0"."%TID%" NOT NULL UNIQUE ]
) [ tinyint(1) "1" ]
query I nosort
diff --git a/sql/test/miscellaneous/Tests/rel_push_count_down.test
b/sql/test/miscellaneous/Tests/rel_push_count_down.test
--- a/sql/test/miscellaneous/Tests/rel_push_count_down.test
+++ b/sql/test/miscellaneous/Tests/rel_push_count_down.test
@@ -13,10 +13,9 @@ explain show details select count(*) fro
----
project (
| project (
-| | crossproduct (
-| | | [ "sys"."cnt"(varchar "sys", varchar "another_t") NOT NULL as "%2"."%2"
],
-| | | [ "sys"."cnt"(varchar "sys", varchar "another_t") NOT NULL as "%3"."%3"
]
-| | ) [ ]
+| | project (
+| | | [ "sys"."cnt"(varchar "sys", varchar "another_t") NOT NULL as "%2"."%2"
]
+| | ) [ "%2"."%2" NOT NULL, "sys"."cnt"(varchar "sys", varchar "another_t")
NOT NULL as "%3"."%3" ]
| ) [ bigint(63)["sys"."sql_mul"("%2"."%2" NOT NULL, "%3"."%3" NOT NULL) NOT
NULL] NOT NULL as "%1"."%1" ]
) [ "%1"."%1" NOT NULL ]
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]