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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list