Changeset: b6bb4fb088f2 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b6bb4fb088f2 Modified Files: sql/server/rel_optimizer.c sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out Branch: Dec2016 Log Message:
fixed bug 6254, ie make sure we push left outer down if allowed. fixed problem in apply renames, only rename on the side which may have a conflict (ie uses the apply relation/expressions). diffs (110 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 @@ -8149,7 +8149,8 @@ rel_find_conflicts(mvc *sql, sql_rel *re case op_project: if (rel->l) exps_find_conflicts(sql, rel->exps, exps, conflicts); - rel->l = rel_find_conflicts(sql, rel->l, exps, conflicts); + if (rel->l && rel_uses_exps(rel->l, exps)) + rel->l = rel_find_conflicts(sql, rel->l, exps, conflicts); /* if project produces given names, then we have a conflict */ if (rel->l) exps_mark_conflicts(sql, rel->exps, conflicts, 0); @@ -8173,7 +8174,7 @@ rel_find_conflicts(mvc *sql, sql_rel *re case op_union: case op_inter: - case op_except: + case op_except: exps_find_conflicts(sql, rel->exps, exps, conflicts); rel->l = rel_find_conflicts(sql, rel->l, exps, conflicts); if (!is_semi(rel->op)) @@ -8358,7 +8359,7 @@ rel_apply_rewrite(int *changes, mvc *sql return l; } } - if (rel->flag == APPLY_LOJ && (r->op == op_select || is_join(r->op))) { + if (rel->flag == APPLY_LOJ && ((r->op == op_select && exps_uses_exps(r->exps, rel->exps)) || is_join(r->op))) { sql_rel *nr, *ns; nr = rel_project(sql->sa, rel_dup(r), diff --git a/sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out b/sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out --- a/sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out +++ b/sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out @@ -23,13 +23,68 @@ stdout of test 'crash_correlated_subquer Ready. # SQL catalog created, loading sql scripts once -# 14:28:48 > -# 14:28:48 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-6451" "--port=33692" -# 14:28:48 > +# 10:01:40 > +# 10:01:40 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-24581" "--port=30412" +# 10:01:40 > +#CREATE VIEW sys.view_stats AS +#SELECT s.name AS schema_nm, s.id AS schema_id, t.name AS table_nm, t.id AS table_id, t.system AS is_system_view +#, (SELECT CAST(COUNT(*) as int) FROM sys.columns c WHERE c.table_id = t.id) AS "# columns" +# FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.id +#WHERE query IS NOT NULL +#; --ORDER BY s.name, t.name; +#SELECT * FROM sys.view_stats; +% .view_stats, .view_stats, .view_stats, .view_stats, .view_stats, .view_stats # table_name +% schema_nm, schema_id, table_nm, table_id, is_system_view, "# columns" # name +% varchar, int, varchar, int, boolean, int # type +% 3, 4, 17, 4, 5, 2 # length +[ "sys", 2000, "tables", 5956, true, 9 ] +[ "sys", 2000, "columns", 5966, true, 10 ] +[ "sys", 2000, "users", 5988, true, 3 ] +[ "sys", 2000, "querylog_catalog", 6221, true, 8 ] +[ "sys", 2000, "querylog_calls", 6232, true, 9 ] +[ "sys", 2000, "querylog_history", 6250, true, 16 ] +[ "sys", 2000, "tracelog", 6289, true, 13 ] +[ "sys", 2000, "sessions", 6432, true, 6 ] +[ "sys", 2000, "optimizers", 6499, true, 3 ] +[ "sys", 2000, "environment", 6507, true, 2 ] +[ "sys", 2000, "queue", 6557, true, 8 ] +[ "sys", 2000, "rejects", 6587, true, 4 ] +[ "sys", 2000, "geometry_columns", 6914, true, 7 ] +[ "sys", 2000, "storage", 7743, true, 17 ] +[ "sys", 2000, "storagemodel", 7875, true, 13 ] +[ "sys", 2000, "tablestoragemodel", 7885, true, 8 ] +[ "sys", 2000, "view_stats", 8548, false, 6 ] +#SELECT * FROM sys.view_stats WHERE is_system_view; +% .view_stats, .view_stats, .view_stats, .view_stats, .view_stats, .view_stats # table_name +% schema_nm, schema_id, table_nm, table_id, is_system_view, "# columns" # name +% varchar, int, varchar, int, boolean, int # type +% 3, 4, 17, 4, 5, 2 # length +[ "sys", 2000, "tables", 5956, true, 9 ] +[ "sys", 2000, "columns", 5966, true, 10 ] +[ "sys", 2000, "users", 5988, true, 3 ] +[ "sys", 2000, "querylog_catalog", 6221, true, 8 ] +[ "sys", 2000, "querylog_calls", 6232, true, 9 ] +[ "sys", 2000, "querylog_history", 6250, true, 16 ] +[ "sys", 2000, "tracelog", 6289, true, 13 ] +[ "sys", 2000, "sessions", 6432, true, 6 ] +[ "sys", 2000, "optimizers", 6499, true, 3 ] +[ "sys", 2000, "environment", 6507, true, 2 ] +[ "sys", 2000, "queue", 6557, true, 8 ] +[ "sys", 2000, "rejects", 6587, true, 4 ] +[ "sys", 2000, "geometry_columns", 6914, true, 7 ] +[ "sys", 2000, "storage", 7743, true, 17 ] +[ "sys", 2000, "storagemodel", 7875, true, 13 ] +[ "sys", 2000, "tablestoragemodel", 7885, true, 8 ] +#SELECT * FROM sys.view_stats WHERE NOT is_system_view; +% .view_stats, .view_stats, .view_stats, .view_stats, .view_stats, .view_stats # table_name +% schema_nm, schema_id, table_nm, table_id, is_system_view, "# columns" # name +% varchar, int, varchar, int, boolean, int # type +% 3, 4, 10, 4, 5, 1 # length +[ "sys", 2000, "view_stats", 8548, false, 6 ] +#DROP VIEW sys.view_stats; +# 10:01:40 > +# 10:01:40 > "Done." +# 10:01:40 > -# 14:28:49 > -# 14:28:49 > "Done." -# 14:28:49 > - _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list