From: Dmitry Shulga Date: June 23 2011 5:06pm Subject: bzr commit into mysql-5.5 branch (Dmitry.Shulga:3469) Bug#11756013 List-Archive: http://lists.mysql.com/commits/139779 X-Bug: 11756013 Message-Id: <201106231706.p5NH6Rjp026080@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2924574790696557347==" --===============2924574790696557347== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/shulga/projects/mysql/mysql-5.5/ based on revid:marko.makela@stripped 3469 Dmitry Shulga 2011-06-24 [merge] Manual merge of patch for bug#11756013 from mysql-5.1 tree. modified: mysql-test/r/sp_sync.result mysql-test/t/sp_sync.test sql/sp.cc sql/sql_db.cc === modified file 'mysql-test/r/sp_sync.result' --- a/mysql-test/r/sp_sync.result 2010-06-07 07:06:55 +0000 +++ b/mysql-test/r/sp_sync.result 2011-06-23 17:02:58 +0000 @@ -1,4 +1,4 @@ -Tests of syncronization of stored procedure execution. +Tests of synchronization of stored procedure execution. SET DEBUG_SYNC= 'RESET'; # # Bug #30977 Concurrent statement using stored function and @@ -92,4 +92,16 @@ COUNT(f1(a)) DROP PROCEDURE p1; DROP FUNCTION f1; DROP TABLES t0, t1; -SET DEBUG_SYNC= 'RESET'; +# +# test for bug#11756013 +# +DROP SCHEMA IF EXISTS s1; +CREATE SCHEMA s1; +CREATE PROCEDURE s1.p1() BEGIN END; +SET DEBUG_SYNC='before_db_dir_check SIGNAL check_db WAIT_FOR dropped_schema'; +CALL s1.p1; +SET DEBUG_SYNC='now WAIT_FOR check_db'; +DROP SCHEMA s1; +SET DEBUG_SYNC='now SIGNAL dropped_schema'; +ERROR 42000: Unknown database 's1' +SET DEBUG_SYNC = 'RESET'; === modified file 'mysql-test/t/sp_sync.test' --- a/mysql-test/t/sp_sync.test 2010-08-06 11:29:37 +0000 +++ b/mysql-test/t/sp_sync.test 2011-06-23 17:02:58 +0000 @@ -1,7 +1,7 @@ # This test should work in embedded server after mysqltest is fixed -- source include/not_embedded.inc ---echo Tests of syncronization of stored procedure execution. +--echo Tests of synchronization of stored procedure execution. --source include/have_debug_sync.inc @@ -149,9 +149,34 @@ disconnect con2; DROP PROCEDURE p1; DROP FUNCTION f1; DROP TABLES t0, t1; -SET DEBUG_SYNC= 'RESET'; +--echo # +--echo # test for bug#11756013 +--echo # +--disable_warnings +DROP SCHEMA IF EXISTS s1; +--enable_warnings +CREATE SCHEMA s1; +CREATE PROCEDURE s1.p1() BEGIN END; + +connect (con3, localhost, root); +SET DEBUG_SYNC='before_db_dir_check SIGNAL check_db WAIT_FOR dropped_schema'; +--send CALL s1.p1 + +connection default; +SET DEBUG_SYNC='now WAIT_FOR check_db'; +DROP SCHEMA s1; +SET DEBUG_SYNC='now SIGNAL dropped_schema'; + +connection con3; +--error ER_BAD_DB_ERROR +--reap +connection default; +disconnect con3; + +SET DEBUG_SYNC = 'RESET'; + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc === modified file 'sql/sp.cc' --- a/sql/sp.cc 2010-11-30 17:52:38 +0000 +++ b/sql/sp.cc 2011-06-23 17:02:58 +0000 @@ -756,6 +756,43 @@ static sp_head *sp_compile(THD *thd, Str } +class Bad_db_error_handler : public Internal_error_handler +{ +public: + Bad_db_error_handler() + :m_error_caught(false) + {} + + virtual bool handle_condition(THD *thd, + uint sql_errno, + const char* sqlstate, + MYSQL_ERROR::enum_warning_level level, + const char* message, + MYSQL_ERROR ** cond_hdl); + + bool error_caught() const { return m_error_caught; } + +private: + bool m_error_caught; +}; + +bool +Bad_db_error_handler::handle_condition(THD *thd, + uint sql_errno, + const char* sqlstate, + MYSQL_ERROR::enum_warning_level level, + const char* message, + MYSQL_ERROR ** cond_hdl) +{ + if (sql_errno == ER_BAD_DB_ERROR) + { + m_error_caught= true; + return true; + } + return false; +} + + static int db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, ulong sql_mode, const char *params, const char *returns, @@ -769,7 +806,7 @@ db_load_routine(THD *thd, int type, sp_n LEX_STRING saved_cur_db_name= { saved_cur_db_name_buf, sizeof(saved_cur_db_name_buf) }; bool cur_db_changed; - + Bad_db_error_handler db_not_exists_handler; char definer_user_name_holder[USERNAME_LENGTH + 1]; LEX_STRING definer_user_name= { definer_user_name_holder, USERNAME_LENGTH }; @@ -808,6 +845,7 @@ db_load_routine(THD *thd, int type, sp_n goto end; } + thd->push_internal_handler(&db_not_exists_handler); /* Change the current database (if needed). @@ -818,6 +856,15 @@ db_load_routine(THD *thd, int type, sp_n &cur_db_changed)) { ret= SP_INTERNAL_ERROR; + thd->pop_internal_handler(); + goto end; + } + thd->pop_internal_handler(); + if (db_not_exists_handler.error_caught()) + { + ret= SP_INTERNAL_ERROR; + my_error(ER_BAD_DB_ERROR, MYF(0), name->m_db.str); + goto end; } === modified file 'sql/sql_db.cc' --- a/sql/sql_db.cc 2011-03-16 14:11:20 +0000 +++ b/sql/sql_db.cc 2011-06-23 17:02:58 +0000 @@ -39,6 +39,7 @@ #ifdef __WIN__ #include #endif +#include "debug_sync.h" #define MAX_DROP_TABLE_Q_LEN 1024 @@ -1536,6 +1537,8 @@ bool mysql_change_db(THD *thd, const LEX } #endif + DEBUG_SYNC(thd, "before_db_dir_check"); + if (check_db_dir_existence(new_db_file_name.str)) { if (force_switch) --===============2924574790696557347== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/dmitry.shulga@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: dmitry.shulga@stripped\ # 8t0etke4yfmi5bkx # target_branch: file:///Users/shulga/projects/mysql/mysql-5.5/ # testament_sha1: 28032974c93f2c4e1d5133822db77644751998f6 # timestamp: 2011-06-24 00:06:22 +0700 # source_branch: file:///Users/shulga/projects/mysql/mysql-5.1-\ # bug11749345/ # base_revision_id: marko.makela@stripped\ # 93rh2hi3ywnsm2mh # # Begin bundle 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 JFOFCQmVzfiQ --===============2924574790696557347==--