Loading mysql-test/r/sp.result +22 −0 Original line number Diff line number Diff line Loading @@ -6314,4 +6314,26 @@ CALL p1(); NULL SET NAMES default; DROP PROCEDURE p1; create function f1() returns int(11) not deterministic contains sql sql security definer comment '' begin declare x int(11); set x=-1; return x; end| create view v1 as select 1 as one, f1() as days; show create view test.v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test`.`v1` AS select 1 AS `one`,`f1`() AS `days` select column_name from information_schema.columns where table_name='v1' and table_schema='test'; column_name one days drop view v1; drop function f1; End of 5.0 tests mysql-test/t/sp.test +33 −0 Original line number Diff line number Diff line Loading @@ -7299,4 +7299,37 @@ CALL p1(); SET NAMES default; DROP PROCEDURE p1; # # Bug#29408 Cannot find view in columns table if the selection contains a function # delimiter |; create function f1() returns int(11) not deterministic contains sql sql security definer comment '' begin declare x int(11); set x=-1; return x; end| delimiter ;| create view v1 as select 1 as one, f1() as days; connect (bug29408, localhost, root,,*NO-ONE*); connection bug29408; show create view test.v1; select column_name from information_schema.columns where table_name='v1' and table_schema='test'; connection default; disconnect bug29408; drop view v1; drop function f1; --echo End of 5.0 tests sql/sql_parse.cc +1 −1 Original line number Diff line number Diff line Loading @@ -1864,7 +1864,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, statistic_increment(thd->status_var.com_stat[SQLCOM_SHOW_FIELDS], &LOCK_status); bzero((char*) &table_list,sizeof(table_list)); if (thd->copy_db_to(&table_list.db, 0)) if (thd->copy_db_to(&table_list.db, &table_list.db_length)) break; pend= strend(packet); thd->convert_string(&conv_name, system_charset_info, Loading sql/sql_view.cc +14 −0 Original line number Diff line number Diff line Loading @@ -1008,8 +1008,19 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, table->view= lex= thd->lex= (LEX*) new(thd->mem_root) st_lex_local; { char old_db_buf[NAME_LEN+1]; LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) }; bool dbchanged; Lex_input_stream lip(thd, table->query.str, table->query.length); thd->m_lip= &lip; /* Use view db name as thread default database, in order to ensure that the view is parsed and prepared correctly. */ if ((result= sp_use_new_db(thd, table->view_db, &old_db, 1, &dbchanged))) goto end; lex_start(thd); view_select= &lex->select_lex; view_select->select_number= ++thd->select_number; Loading Loading @@ -1051,6 +1062,9 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, thd->variables.character_set_client= save_cs; thd->variables.sql_mode= save_mode; if (dbchanged && mysql_change_db(thd, &old_db, TRUE)) goto err; } if (!res && !thd->is_fatal_error) { Loading Loading
mysql-test/r/sp.result +22 −0 Original line number Diff line number Diff line Loading @@ -6314,4 +6314,26 @@ CALL p1(); NULL SET NAMES default; DROP PROCEDURE p1; create function f1() returns int(11) not deterministic contains sql sql security definer comment '' begin declare x int(11); set x=-1; return x; end| create view v1 as select 1 as one, f1() as days; show create view test.v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test`.`v1` AS select 1 AS `one`,`f1`() AS `days` select column_name from information_schema.columns where table_name='v1' and table_schema='test'; column_name one days drop view v1; drop function f1; End of 5.0 tests
mysql-test/t/sp.test +33 −0 Original line number Diff line number Diff line Loading @@ -7299,4 +7299,37 @@ CALL p1(); SET NAMES default; DROP PROCEDURE p1; # # Bug#29408 Cannot find view in columns table if the selection contains a function # delimiter |; create function f1() returns int(11) not deterministic contains sql sql security definer comment '' begin declare x int(11); set x=-1; return x; end| delimiter ;| create view v1 as select 1 as one, f1() as days; connect (bug29408, localhost, root,,*NO-ONE*); connection bug29408; show create view test.v1; select column_name from information_schema.columns where table_name='v1' and table_schema='test'; connection default; disconnect bug29408; drop view v1; drop function f1; --echo End of 5.0 tests
sql/sql_parse.cc +1 −1 Original line number Diff line number Diff line Loading @@ -1864,7 +1864,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, statistic_increment(thd->status_var.com_stat[SQLCOM_SHOW_FIELDS], &LOCK_status); bzero((char*) &table_list,sizeof(table_list)); if (thd->copy_db_to(&table_list.db, 0)) if (thd->copy_db_to(&table_list.db, &table_list.db_length)) break; pend= strend(packet); thd->convert_string(&conv_name, system_charset_info, Loading
sql/sql_view.cc +14 −0 Original line number Diff line number Diff line Loading @@ -1008,8 +1008,19 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, table->view= lex= thd->lex= (LEX*) new(thd->mem_root) st_lex_local; { char old_db_buf[NAME_LEN+1]; LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) }; bool dbchanged; Lex_input_stream lip(thd, table->query.str, table->query.length); thd->m_lip= &lip; /* Use view db name as thread default database, in order to ensure that the view is parsed and prepared correctly. */ if ((result= sp_use_new_db(thd, table->view_db, &old_db, 1, &dbchanged))) goto end; lex_start(thd); view_select= &lex->select_lex; view_select->select_number= ++thd->select_number; Loading Loading @@ -1051,6 +1062,9 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, thd->variables.character_set_client= save_cs; thd->variables.sql_mode= save_mode; if (dbchanged && mysql_change_db(thd, &old_db, TRUE)) goto err; } if (!res && !thd->is_fatal_error) { Loading