Changeset: aa62ce5d5cf0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/aa62ce5d5cf0
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_unnest.c
sql/test/SQLancer/Tests/sqlancer14.test
Branch: default
Log Message:
Be carefull while packing, if an unnest rewriter returns error, then don't run
any other unnest rewriter
diffs (106 lines):
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -9793,8 +9793,10 @@ rel_optimize_select_and_joins_topdown(vi
static sql_rel *
rel_push_func_and_select_down(visitor *v, sql_rel *rel)
{
- rel = rel_push_func_down(v, rel);
- rel = rel_push_select_down(v, rel);
+ if (rel)
+ rel = rel_push_func_down(v, rel);
+ if (rel)
+ rel = rel_push_select_down(v, rel);
return rel;
}
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
@@ -3608,14 +3608,22 @@ static sql_rel *
rel_unnest_simplify(visitor *v, sql_rel *rel)
{
/* at rel_select.c explicit cross-products generate empty selects, if
these are not used, they can be removed at rewrite_simplify */
- rel = rewrite_basetable(v->sql, rel); /* add proper exps lists */
- rel = rewrite_empty_project(v, rel); /* remove empty project/groupby */
- rel = rewrite_simplify(v, rel);
- rel = rewrite_or_exp(v, rel);
- rel = rewrite_split_select_exps(v, rel); /* has to run before
rewrite_complex */
- rel = rewrite_aggregates(v, rel);
- rel = rewrite_outer2inner_union(v, rel);
- rel = rewrite_values(v, rel);
+ if (rel)
+ rel = rewrite_basetable(v->sql, rel); /* add proper exps
lists */
+ if (rel)
+ rel = rewrite_empty_project(v, rel); /* remove empty
project/groupby */
+ if (rel)
+ rel = rewrite_simplify(v, rel);
+ if (rel)
+ rel = rewrite_or_exp(v, rel);
+ if (rel)
+ rel = rewrite_split_select_exps(v, rel); /* has to run before
rewrite_complex */
+ if (rel)
+ rel = rewrite_aggregates(v, rel);
+ if (rel)
+ rel = rewrite_outer2inner_union(v, rel);
+ if (rel)
+ rel = rewrite_values(v, rel);
return rel;
}
@@ -3623,27 +3631,36 @@ static sql_rel *
rel_unnest_projects(visitor *v, sql_rel *rel)
{
/* both rewrite_values and rewrite_fix_count use 'used' property from
sql_rel, reset it, so make sure rewrite_reset_used is called first */
- rel = rewrite_reset_used(v, rel);
- rel = rewrite_remove_xp(v, rel); /* remove crossproducts with
project [ atom ] */
- rel = rewrite_groupings(v, rel); /* transform group combinations
into union of group relations */
+ if (rel)
+ rel = rewrite_reset_used(v, rel);
+ if (rel)
+ rel = rewrite_remove_xp(v, rel); /* remove crossproducts
with project [ atom ] */
+ if (rel)
+ rel = rewrite_groupings(v, rel); /* transform group
combinations into union of group relations */
return rel;
}
static sql_rel *
rel_unnest_comparison_rewriters(visitor *v, sql_rel *rel)
{
- rel = rewrite_join2semi(v, rel); /* where possible convert
anyequal functions into marks */
- rel = rewrite_compare_exp(v, rel); /* only allow for e_cmp in
selects and handling */
- rel = rewrite_remove_xp_project(v, rel); /* remove crossproducts
with project ( project [ atom ] ) [ etc ] */
- rel = rewrite_simplify(v, rel); /* as expressions got merged
before, lets try to simplify again */
+ if (rel)
+ rel = rewrite_join2semi(v, rel); /* where possible
convert anyequal functions into marks */
+ if (rel)
+ rel = rewrite_compare_exp(v, rel); /* only allow for e_cmp
in selects and handling */
+ if (rel)
+ rel = rewrite_remove_xp_project(v, rel); /* remove
crossproducts with project ( project [ atom ] ) [ etc ] */
+ if (rel)
+ rel = rewrite_simplify(v, rel); /* as expressions got
merged before, lets try to simplify again */
return rel;
}
static sql_exp *
rel_simplify_exp_and_rank(visitor *v, sql_rel *rel, sql_exp *e, int depth)
{
- e = rewrite_simplify_exp(v, rel, e, depth);
- e = rewrite_rank(v, rel, e, depth);
+ if (e)
+ e = rewrite_simplify_exp(v, rel, e, depth);
+ if (e)
+ e = rewrite_rank(v, rel, e, depth);
return e;
}
diff --git a/sql/test/SQLancer/Tests/sqlancer14.test
b/sql/test/SQLancer/Tests/sqlancer14.test
--- a/sql/test/SQLancer/Tests/sqlancer14.test
+++ b/sql/test/SQLancer/Tests/sqlancer14.test
@@ -287,3 +287,6 @@ True
statement ok
ROLLBACK
+
+statement error
+select 1 from (values (1),(2),(3)) x(x) where uuid
'55a279B4-f52a-835C-C43c-5E0bd20fFbAB'
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list