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 -- [email protected]
To unsubscribe send an email to [email protected]