From: Jon Olav Hauglid Date: September 16 2010 9:11am Subject: bzr commit into mysql-5.5-runtime branch (jon.hauglid:3138) Bug#56595 List-Archive: http://lists.mysql.com/commits/118352 X-Bug: 56595 Message-Id: <201009160911.o8G5sQdY003827@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4589629449556638938==" --===============4589629449556638938== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-runtime-bug56595/ based on revid:dlenev@stripped 3138 Jon Olav Hauglid 2010-09-16 Bug #56595 RENAME TABLE causes assert on OS X The problem was that RENAME TABLE caused an assert if the system variable lower_case_table_names was 2 (default on Mac OS X) and the old table name was given in upper case. This caused lowercase_table2.test to fail. The assert checks that an exclusive metadata lock is held by the connection trying to do RENAME TABLE - specificially during updates of table triggers. The assert was triggered since the check is case sensitive and the lock was held on the normalized (lower case) version of the table name. This patch fixes the problem by making sure a normalized version of the table name is used for the metadata lock check, while using a non-normalized version of the table name for the rename of trigger files. The same is done for ALTER TABLE ... RENAME. Regression testing for the bug itself is already covered by lowercase_table2.test. Additional coverage added to lowercase_fs_off.test. modified: mysql-test/r/lowercase_fs_off.result mysql-test/t/lowercase_fs_off.test sql/sql_rename.cc sql/sql_table.cc sql/sql_trigger.cc sql/sql_trigger.h === modified file 'mysql-test/r/lowercase_fs_off.result' --- a/mysql-test/r/lowercase_fs_off.result 2009-11-06 14:20:27 +0000 +++ b/mysql-test/r/lowercase_fs_off.result 2010-09-16 09:11:13 +0000 @@ -55,3 +55,11 @@ DROP USER user_1@localhost; DROP USER USER_1@localhost; DROP DATABASE db1; use test; +# +# Extra test coverage for Bug#56595 RENAME TABLE causes assert on OS X +# +CREATE TABLE t1(a INT); +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW SET new.a= 1; +RENAME TABLE t1 TO T1; +ALTER TABLE T1 RENAME t1; +DROP TABLE t1; === modified file 'mysql-test/t/lowercase_fs_off.test' --- a/mysql-test/t/lowercase_fs_off.test 2009-10-27 10:09:36 +0000 +++ b/mysql-test/t/lowercase_fs_off.test 2010-09-16 09:11:13 +0000 @@ -91,3 +91,14 @@ DROP DATABASE db1; use test; # End of 5.0 tests + + +--echo # +--echo # Extra test coverage for Bug#56595 RENAME TABLE causes assert on OS X +--echo # + +CREATE TABLE t1(a INT); +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW SET new.a= 1; +RENAME TABLE t1 TO T1; +ALTER TABLE T1 RENAME t1; +DROP TABLE t1; === modified file 'sql/sql_rename.cc' --- a/sql/sql_rename.cc 2010-08-10 11:16:44 +0000 +++ b/sql/sql_rename.cc 2010-09-16 09:11:13 +0000 @@ -285,6 +285,7 @@ do_rename(THD *thd, TABLE_LIST *ren_tabl { if ((rc= Table_triggers_list::change_table_name(thd, ren_table->db, old_alias, + ren_table->table_name, new_db, new_alias))) { === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2010-09-03 07:42:51 +0000 +++ b/sql/sql_table.cc 2010-09-16 09:11:13 +0000 @@ -5918,7 +5918,8 @@ bool mysql_alter_table(THD *thd,char *ne *fn_ext(new_name)=0; if (mysql_rename_table(old_db_type,db,table_name,new_db,new_alias, 0)) error= -1; - else if (Table_triggers_list::change_table_name(thd, db, table_name, + else if (Table_triggers_list::change_table_name(thd, db, + alias, table_name, new_db, new_alias)) { (void) mysql_rename_table(old_db_type, new_db, new_alias, db, @@ -6555,7 +6556,7 @@ bool mysql_alter_table(THD *thd,char *ne (need_copy_table != ALTER_TABLE_METADATA_ONLY || mysql_rename_table(save_old_db_type, db, table_name, new_db, new_alias, NO_FRM_RENAME)) && - Table_triggers_list::change_table_name(thd, db, table_name, + Table_triggers_list::change_table_name(thd, db, alias, table_name, new_db, new_alias))) { /* Try to get everything back. */ === modified file 'sql/sql_trigger.cc' --- a/sql/sql_trigger.cc 2010-08-31 09:52:56 +0000 +++ b/sql/sql_trigger.cc 2010-09-16 09:11:13 +0000 @@ -1874,6 +1874,7 @@ Table_triggers_list::change_table_name_i @param[in,out] thd Thread context @param[in] db Old database of subject table + @param[in] old_alias Old alias of subject table @param[in] old_table Old name of subject table @param[in] new_db New database for subject table @param[in] new_table New name of subject table @@ -1890,6 +1891,7 @@ Table_triggers_list::change_table_name_i */ bool Table_triggers_list::change_table_name(THD *thd, const char *db, + const char *old_alias, const char *old_table, const char *new_db, const char *new_table) @@ -1911,7 +1913,7 @@ bool Table_triggers_list::change_table_n MDL_EXCLUSIVE)); DBUG_ASSERT(my_strcasecmp(table_alias_charset, db, new_db) || - my_strcasecmp(table_alias_charset, old_table, new_table)); + my_strcasecmp(table_alias_charset, old_alias, new_table)); if (Table_triggers_list::check_n_load(thd, db, old_table, &table, TRUE)) { @@ -1920,7 +1922,7 @@ bool Table_triggers_list::change_table_n } if (table.triggers) { - LEX_STRING old_table_name= { (char *) old_table, strlen(old_table) }; + LEX_STRING old_table_name= { (char *) old_alias, strlen(old_alias) }; LEX_STRING new_table_name= { (char *) new_table, strlen(new_table) }; /* Since triggers should be in the same schema as their subject tables === modified file 'sql/sql_trigger.h' --- a/sql/sql_trigger.h 2010-03-31 14:05:33 +0000 +++ b/sql/sql_trigger.h 2010-09-16 09:11:13 +0000 @@ -157,6 +157,7 @@ public: TABLE *table, bool names_only); static bool drop_all_triggers(THD *thd, char *db, char *table_name); static bool change_table_name(THD *thd, const char *db, + const char *old_alias, const char *old_table, const char *new_db, const char *new_table); --===============4589629449556638938== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-runtime-bug56595/ # testament_sha1: 811c08f508d2dad51f6ac0267a7d889ca21f806c # timestamp: 2010-09-16 11:11:20 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: dlenev@stripped # # Begin bundle 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 /4u5IpwoSE5M7XsA --===============4589629449556638938==--