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