Changeset: 11d3f414703a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/11d3f414703a
Modified Files:
        gdk/gdk_calc.c
        sql/server/rel_optimize_sel.c
        sql/test/BugTracker-2025/Tests/7616_join_reordering_3.test
Branch: nested
Log Message:

merged with default


diffs (142 lines):

diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -4682,7 +4682,7 @@ BATcalcifthenelse_intern(BATiter *bi,
                                        if (src[i] && !is_bit_nil(src[i])) {
                                                ((oid *) dst)[i] = col1 ? ((oid 
*) col1)[k] : seq1;
                                        } else {
-                                               ((oid *) dst)[i] = col2 ? ((oid 
*) col2)[k] : seq2;
+                                               ((oid *) dst)[i] = col2 ? ((oid 
*) col2)[l] : seq2;
                                        }
                                        k += incr1;
                                        l += incr2;
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
@@ -12,13 +12,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'
@@ -50,13 +49,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
@@ -10,14 +10,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"("foo_x1"."a1" 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
@@ -635,15 +635,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
@@ -12,10 +12,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]

Reply via email to