Loading mysql-test/r/view.result +22 −1 Original line number Diff line number Diff line drop table if exists t1,t2,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; drop table if exists t1,t2,t3,t4,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; drop view if exists t1,t2,`t1a``b`,v1,v2,v3,v4,v5,v6; drop database if exists mysqltest; use test; Loading Loading @@ -2323,3 +2323,24 @@ id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where DROP VIEW v1,v2; DROP TABLE t1,t2,t3; create table t1 (x int, y int); create table t2 (x int, y int, z int); create table t3 (x int, y int, z int); create table t4 (x int, y int, z int); create view v1 as select t1.x from ( (t1 join t2 on ((t1.y = t2.y))) join (t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z)) ); prepare stmt1 from "select count(*) from v1 where x = ?"; set @parm1=1; execute stmt1 using @parm1; count(*) 0 execute stmt1 using @parm1; count(*) 0 drop view v1; drop table t1,t2,t3,t4; mysql-test/t/view.test +23 −1 Original line number Diff line number Diff line --disable_warnings drop table if exists t1,t2,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; drop table if exists t1,t2,t3,t4,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; drop view if exists t1,t2,`t1a``b`,v1,v2,v3,v4,v5,v6; drop database if exists mysqltest; --enable_warnings Loading Loading @@ -2189,4 +2189,26 @@ EXPLAIN SELECT * FROM v2 WHERE a=1; DROP VIEW v1,v2; DROP TABLE t1,t2,t3; # # BUG#14026 Crash on second PS execution when using views # create table t1 (x int, y int); create table t2 (x int, y int, z int); create table t3 (x int, y int, z int); create table t4 (x int, y int, z int); create view v1 as select t1.x from ( (t1 join t2 on ((t1.y = t2.y))) join (t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z)) ); prepare stmt1 from "select count(*) from v1 where x = ?"; set @parm1=1; execute stmt1 using @parm1; execute stmt1 using @parm1; drop view v1; drop table t1,t2,t3,t4; sql/sql_lex.cc +30 −10 Original line number Diff line number Diff line Loading @@ -2037,6 +2037,35 @@ void st_lex::cleanup_after_one_table_open() } /* Do end-of-prepare fixup for list of tables and their merge-VIEWed tables SYNOPSIS fix_prepare_info_in_table_list() thd Thread handle tbl List of tables to process DESCRIPTION Perform end-end-of prepare fixup for list of tables, if any of the tables is a merge-algorithm VIEW, recursively fix up its underlying tables as well. */ static void fix_prepare_info_in_table_list(THD *thd, TABLE_LIST *tbl) { for (; tbl; tbl= tbl->next_local) { if (tbl->on_expr) { tbl->prep_on_expr= tbl->on_expr; tbl->on_expr= tbl->on_expr->copy_andor_structure(thd); } fix_prepare_info_in_table_list(thd, tbl->merge_underlying_list); } } /* fix some structures at the end of preparation Loading @@ -2056,16 +2085,7 @@ void st_select_lex::fix_prepare_information(THD *thd, Item **conds) prep_where= *conds; *conds= where= prep_where->copy_andor_structure(thd); } for (TABLE_LIST *tbl= (TABLE_LIST *)table_list.first; tbl; tbl= tbl->next_local) { if (tbl->on_expr) { tbl->prep_on_expr= tbl->on_expr; tbl->on_expr= tbl->on_expr->copy_andor_structure(thd); } } fix_prepare_info_in_table_list(thd, (TABLE_LIST *)table_list.first); } } Loading Loading
mysql-test/r/view.result +22 −1 Original line number Diff line number Diff line drop table if exists t1,t2,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; drop table if exists t1,t2,t3,t4,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; drop view if exists t1,t2,`t1a``b`,v1,v2,v3,v4,v5,v6; drop database if exists mysqltest; use test; Loading Loading @@ -2323,3 +2323,24 @@ id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where DROP VIEW v1,v2; DROP TABLE t1,t2,t3; create table t1 (x int, y int); create table t2 (x int, y int, z int); create table t3 (x int, y int, z int); create table t4 (x int, y int, z int); create view v1 as select t1.x from ( (t1 join t2 on ((t1.y = t2.y))) join (t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z)) ); prepare stmt1 from "select count(*) from v1 where x = ?"; set @parm1=1; execute stmt1 using @parm1; count(*) 0 execute stmt1 using @parm1; count(*) 0 drop view v1; drop table t1,t2,t3,t4;
mysql-test/t/view.test +23 −1 Original line number Diff line number Diff line --disable_warnings drop table if exists t1,t2,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; drop table if exists t1,t2,t3,t4,t9,`t1a``b`,v1,v2,v3,v4,v5,v6; drop view if exists t1,t2,`t1a``b`,v1,v2,v3,v4,v5,v6; drop database if exists mysqltest; --enable_warnings Loading Loading @@ -2189,4 +2189,26 @@ EXPLAIN SELECT * FROM v2 WHERE a=1; DROP VIEW v1,v2; DROP TABLE t1,t2,t3; # # BUG#14026 Crash on second PS execution when using views # create table t1 (x int, y int); create table t2 (x int, y int, z int); create table t3 (x int, y int, z int); create table t4 (x int, y int, z int); create view v1 as select t1.x from ( (t1 join t2 on ((t1.y = t2.y))) join (t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z)) ); prepare stmt1 from "select count(*) from v1 where x = ?"; set @parm1=1; execute stmt1 using @parm1; execute stmt1 using @parm1; drop view v1; drop table t1,t2,t3,t4;
sql/sql_lex.cc +30 −10 Original line number Diff line number Diff line Loading @@ -2037,6 +2037,35 @@ void st_lex::cleanup_after_one_table_open() } /* Do end-of-prepare fixup for list of tables and their merge-VIEWed tables SYNOPSIS fix_prepare_info_in_table_list() thd Thread handle tbl List of tables to process DESCRIPTION Perform end-end-of prepare fixup for list of tables, if any of the tables is a merge-algorithm VIEW, recursively fix up its underlying tables as well. */ static void fix_prepare_info_in_table_list(THD *thd, TABLE_LIST *tbl) { for (; tbl; tbl= tbl->next_local) { if (tbl->on_expr) { tbl->prep_on_expr= tbl->on_expr; tbl->on_expr= tbl->on_expr->copy_andor_structure(thd); } fix_prepare_info_in_table_list(thd, tbl->merge_underlying_list); } } /* fix some structures at the end of preparation Loading @@ -2056,16 +2085,7 @@ void st_select_lex::fix_prepare_information(THD *thd, Item **conds) prep_where= *conds; *conds= where= prep_where->copy_andor_structure(thd); } for (TABLE_LIST *tbl= (TABLE_LIST *)table_list.first; tbl; tbl= tbl->next_local) { if (tbl->on_expr) { tbl->prep_on_expr= tbl->on_expr; tbl->on_expr= tbl->on_expr->copy_andor_structure(thd); } } fix_prepare_info_in_table_list(thd, (TABLE_LIST *)table_list.first); } } Loading