From: Dmitry Shulga Date: June 23 2011 5:45pm Subject: bzr commit into mysql-trunk branch (Dmitry.Shulga:3235) Bug#11756013 List-Archive: http://lists.mysql.com/commits/139789 X-Bug: 11756013 Message-Id: <201106231748.p5NHml3W026680@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6376779204733853553==" --===============6376779204733853553== 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-trunk/ based on revid:vasil.dimov@stripped 3235 Dmitry Shulga 2011-06-24 [merge] Auto-merge of patch for bug#11756013 from mysql-5.5 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 2011-06-10 16:57:01 +0000 +++ b/sql/sp.cc 2011-06-23 17:34:08 +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, sql_mode_t 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-05-26 15:20:09 +0000 +++ b/sql/sql_db.cc 2011-06-23 17:34:08 +0000 @@ -40,6 +40,7 @@ #ifdef __WIN__ #include #endif +#include "debug_sync.h" #define MAX_DROP_TABLE_Q_LEN 1024 @@ -1533,6 +1534,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) --===============6376779204733853553== 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\ # mmu678f32403knsn # target_branch: file:///Users/shulga/projects/mysql/mysql-trunk/ # testament_sha1: 8b2c0f23fcc8ac477023d23c67c56a0c079143d8 # timestamp: 2011-06-24 00:48:36 +0700 # source_branch: file:///Users/shulga/projects/mysql/mysql-5.5-\ # bug11763757/ # base_revision_id: vasil.dimov@stripped\ # cyok7kpe8p12nbs8 # # Begin bundle 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 --===============6376779204733853553==--