From: Jon Olav Hauglid Date: September 15 2010 9:08am Subject: bzr commit into mysql-5.5-runtime branch (jon.hauglid:3137) Bug#56595 List-Archive: http://lists.mysql.com/commits/118283 X-Bug: 56595 Message-Id: <201009150909.o8F99wcJ011473@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4701207773604393479==" --===============4701207773604393479== 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:jon.hauglid@stripped 3137 Jon Olav Hauglid 2010-09-15 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. No test case added since this problem is already covered by lowercase_table2.test modified: sql/sql_rename.cc sql/sql_table.cc sql/sql_trigger.cc sql/sql_trigger.h === 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-15 09:08:18 +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-15 09:08:18 +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,8 +6556,8 @@ 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, - new_db, new_alias))) + Table_triggers_list::change_table_name(thd, db, alias, table_name, + new_db, new_alias))) { /* Try to get everything back. */ error=1; === 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-15 09:08:18 +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) @@ -1910,8 +1912,11 @@ bool Table_triggers_list::change_table_n DBUG_ASSERT(thd->mdl_context.is_lock_owner(MDL_key::TABLE, db, old_table, MDL_EXCLUSIVE)); - DBUG_ASSERT(my_strcasecmp(table_alias_charset, db, new_db) || - my_strcasecmp(table_alias_charset, old_table, new_table)); + DBUG_ASSERT((lower_case_table_names && + (my_strcasecmp(table_alias_charset, db, new_db) || + my_strcasecmp(table_alias_charset, old_table, new_table))) || + (!lower_case_table_names && + (strcmp(db, new_db) || strcmp(old_alias, new_table)))); if (Table_triggers_list::check_n_load(thd, db, old_table, &table, TRUE)) { @@ -1920,7 +1925,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-15 09:08:18 +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); --===============4701207773604393479== 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: 2d08cf5475eaf3db8a0f0e6e70f50bab9c70dcdf # timestamp: 2010-09-15 11:08:21 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: jon.hauglid@stripped\ # tqzk3rf4bys0f6s8 # # Begin bundle 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 --===============4701207773604393479==--