Changeset: dc820ea55775 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/dc820ea55775
Modified Files:
        sql/server/rel_unnest.c
        sql/test/BugTracker-2024/Tests/SQLunionfunc-Bug-7473.test
Branch: Dec2023
Log Message:

bind variables after push_up_table.
This solves bug #7473


diffs (91 lines):

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
@@ -1591,6 +1591,8 @@ push_up_table(mvc *sql, sql_rel *rel, li
                                        id = exp_ref(sql, id);
                                } else {
                                        l->l = rel_dup(d);
+                                       if (is_project(l->op))
+                                               rel_bind_vars(sql, l, l->exps);
                                }
                        } else {
                                tf->l = rel_dup(d);
@@ -4257,23 +4259,58 @@ rel_simplify_exp_and_rank(visitor *v, sq
        return e;
 }
 
+static inline sql_rel *
+run_exp_rewriter(visitor *v, sql_rel *rel, exp_rewrite_fptr rewriter, bool 
direction, const char *name)
+{
+       (void)name;
+       /*
+#ifndef NDEBUG
+       int changes = v->changes;
+       lng clk = GDKusec();
+       rel = rel_exp_visitor_bottomup(v, rel, rewriter, direction);
+       printf("%s %d " LLFMT "\n", name, (v->changes - changes), (GDKusec() - 
clk));
+       return rel;
+#else
+*/
+       return rel_exp_visitor_bottomup(v, rel, rewriter, direction);
+//#endif
+}
+
+static inline sql_rel *
+run_rel_rewriter(visitor *v, sql_rel *rel, rel_rewrite_fptr rewriter, const 
char *name)
+{
+       (void)name;
+       /*
+#ifndef NDEBUG
+       int changes = v->changes;
+       lng clk = GDKusec();
+       rel = rel_visitor_bottomup(v, rel, rewriter);
+       printf("%s %d " LLFMT "\n", name, (v->changes - changes), (GDKusec() - 
clk));
+       return rel;
+#else
+*/
+       return rel_visitor_bottomup(v, rel, rewriter);
+//#endif
+}
+
 sql_rel *
 rel_unnest(mvc *sql, sql_rel *rel)
 {
        visitor v = { .sql = sql };
 
-       rel = rel_exp_visitor_bottomup(&v, rel, &rel_simplify_exp_and_rank, 
false);
-       rel = rel_visitor_bottomup(&v, rel, &rel_unnest_simplify);
-
-       rel = rel_exp_visitor_bottomup(&v, rel, &rewrite_complex, true);
-       rel = rel_exp_visitor_bottomup(&v, rel, &rewrite_ifthenelse, false);    
/* add isnull handling */
-       rel = rel_exp_visitor_bottomup(&v, rel, &rewrite_exp_rel, true);
-
-       rel = rel_visitor_bottomup(&v, rel, &rel_unnest_comparison_rewriters);
-       rel = rel_visitor_bottomup(&v, rel, &_rel_unnest);
-       rel = rel_visitor_bottomup(&v, rel, &rewrite_fix_count);        /* fix 
count inside a left join (adds a project (if (cnt IS null) then (0) else (cnt)) 
*/
-       rel = rel_visitor_bottomup(&v, rel, &rel_unnest_projects);
-       rel = rel_exp_visitor_bottomup(&v, rel, 
&exp_reset_card_and_freevar_set_physical_type, false);
+       rel = run_exp_rewriter(&v, rel, &rel_simplify_exp_and_rank, false, 
"simplify_exp_and_rank");
+       rel = run_rel_rewriter(&v, rel, &rel_unnest_simplify, 
"unnest_simplify");
+//if (0) {
+       rel = run_exp_rewriter(&v, rel, &rewrite_complex, true, 
"rewrite_complex");
+       rel = run_exp_rewriter(&v, rel, &rewrite_ifthenelse, false, 
"rewrite_ifthenelse"); /* add isnull handling */
+       rel = run_exp_rewriter(&v, rel, &rewrite_exp_rel, true, 
"rewrite_exp_rel");
+
+       rel = run_rel_rewriter(&v, rel, &rel_unnest_comparison_rewriters, 
"unnest_comparison_rewriters");
+       rel = run_rel_rewriter(&v, rel, &_rel_unnest, "unnest");
+       rel = run_rel_rewriter(&v, rel, &rewrite_fix_count, "fix_count");       
/* fix count inside a left join (adds a project (if (cnt IS null) then (0) else 
(cnt)) */
+       rel = run_rel_rewriter(&v, rel, &rel_unnest_projects, 
"unnest_projects");
+//}
+       rel = run_exp_rewriter(&v, rel, 
&exp_reset_card_and_freevar_set_physical_type, false, 
"exp_reset_card_and_freevar_set_physical_type");
        rel = rel_visitor_topdown(&v, rel, &rel_set_type);
        return rel;
 }
diff --git a/sql/test/BugTracker-2024/Tests/SQLunionfunc-Bug-7473.test 
b/sql/test/BugTracker-2024/Tests/SQLunionfunc-Bug-7473.test
--- a/sql/test/BugTracker-2024/Tests/SQLunionfunc-Bug-7473.test
+++ b/sql/test/BugTracker-2024/Tests/SQLunionfunc-Bug-7473.test
@@ -1,4 +1,3 @@
-skipif knownfail
 query I nosort
 SELECT ( WITH x ( x ) AS ( SELECT 1 ) SELECT ( WITH x ( x ) AS ( SELECT 
DISTINCT SUM ( 1 ) ) SELECT ( SELECT ( NULLIF ( 9.000000 , 0 ) ) FROM 
GENERATE_SERIES ( 1 , x ) ) FROM x ) FROM x )
 ----
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to