Changeset: 21b467469899 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=21b467469899 Modified Files: sql/server/rel_optimizer.c sql/test/SQLancer/Tests/sqlancer09.sql sql/test/SQLancer/Tests/sqlancer09.stable.out Branch: Oct2020 Log Message:
If a projection doesn't have a left relation, create a new projection at rel_push_func_down, so the code generation doesn't screw up diffs (86 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 @@ -1511,9 +1511,9 @@ rel_push_func_down(visitor *v, sql_rel * /* we need a full projection, group by's and unions cannot be extended * with more expressions */ - if (!is_simple_project(l->op)) + if (!is_simple_project(l->op) || !l->l) rel->l = l = rel_project(v->sql->sa, l, rel_projections(v->sql, l, NULL, 1, 1)); - if (is_joinop(rel->op) && !is_simple_project(r->op)) + if (is_joinop(rel->op) && (!is_simple_project(r->op) || !r->l)) rel->r = r = rel_project(v->sql->sa, r, rel_projections(v->sql, r, NULL, 1, 1)); nrel = rel_project(v->sql->sa, rel, rel_projections(v->sql, rel, NULL, 1, 1)); @@ -1537,9 +1537,9 @@ rel_push_func_down(visitor *v, sql_rel * sql_rel *l = pl->l, *r = pl->r; list *nexps = new_exp_list(v->sql->sa); - if (!is_simple_project(l->op)) + if (!is_simple_project(l->op) || !l->l) pl->l = l = rel_project(v->sql->sa, l, rel_projections(v->sql, l, NULL, 1, 1)); - if (is_joinop(rel->op) && !is_simple_project(r->op)) + if (is_joinop(rel->op) && (!is_simple_project(r->op) || !r->l)) pl->r = r = rel_project(v->sql->sa, r, rel_projections(v->sql, r, NULL, 1, 1)); for (node *n = rel->exps->h; n; n = n->next) { sql_exp *e = n->data; diff --git a/sql/test/SQLancer/Tests/sqlancer09.sql b/sql/test/SQLancer/Tests/sqlancer09.sql --- a/sql/test/SQLancer/Tests/sqlancer09.sql +++ b/sql/test/SQLancer/Tests/sqlancer09.sql @@ -228,12 +228,15 @@ nullif(0.322, 4.3)), 0.31), (abs(6363), -34)) with check option; create view v32(vc0, vc1) as (select distinct cast(((-4)*(-4)) as tinyint), coalesce(nullif(r'p', r'E]T'), sql_max(r'f)6_', r'.u'), cast(true as string(679)), case -3 when -5 then r'94' end) -group by substr(r'FALSE', 6318585747)); +group by substr(r'FALSE', 2)); select sum(all abs(interval '-27135172' second)) from v27 full outer join (select all scale_up(0.131, 12375.0) -from v32 cross join (values (round(0.23, 24055))) as sub0 +from v32 cross join (values (round(0.23, 10))) as sub0 where ((v32.vc0)=(0.32))) as sub0 on case 3 when case 21 when 12524 then -3 when r'1092027064' then 3692 else 18 end then case when true then true else true end when case when true then 0.33 end then (6363) not in (3, -3, v27.vc0, -3) end; + +create or replace view v27(vc0) as (values (4.3), (63)); +select 1 from v27 full outer join (select 1) as sub0 on case 3 when 0.33 then (2) in (v27.vc0, 9) end; ROLLBACK; diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.out b/sql/test/SQLancer/Tests/sqlancer09.stable.out --- a/sql/test/SQLancer/Tests/sqlancer09.stable.out +++ b/sql/test/SQLancer/Tests/sqlancer09.stable.out @@ -234,6 +234,34 @@ stdout of test 'sqlancer09` in directory % 1 # length [ 0 ] #ROLLBACK; +#START TRANSACTION; +#create view v27(vc0, vc1) as (values (sql_max(case when false then -4 when false then 96 when true then 19491 end, +#nullif(0.322, 4.3)), 0.31), +#(abs(6363), -34)) with check option; +#create view v32(vc0, vc1) as (select distinct cast(((-4)*(-4)) as tinyint), coalesce(nullif(r'p', r'E]T'), +#sql_max(r'f)6_', r'.u'), cast(true as string(679)), case -3 when -5 then r'94' end) +#group by substr(r'FALSE', 2)); +#select sum(all abs(interval '-27135172' second)) from v27 full outer join (select all scale_up(0.131, 12375.0) +#from v32 cross join (values (round(0.23, 10))) as sub0 +#where ((v32.vc0)=(0.32))) as sub0 on case 3 when +#case 21 when 12524 then -3 when r'1092027064' then 3692 else 18 end then case when true then true else true end +#when case when true then 0.33 end then (6363) not in (3, +#-3, v27.vc0, -3) end; +% .%21 # table_name +% %21 # name +% sec_interval # type +% 12 # length +[ 54270344.000 ] +#create or replace view v27(vc0) as (values (4.3), (63)); +#select 1 from v27 full outer join (select 1) as sub0 on case 3 when 0.33 then (2) in (v27.vc0, 9) end; +% .%12 # table_name +% %12 # name +% tinyint # type +% 1 # length +[ 1 ] +[ 1 ] +[ 1 ] +#ROLLBACK; # 14:35:03 > # 14:35:03 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list