diff --git a/sql/sql_class.h b/sql/sql_class.h index 8284cd23b9e06f2e7e10abbf3ceab562afce08c6..3c968c6a8ae1ec31c92fe52898d1efa1452ea9b9 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -647,7 +647,7 @@ public: so we internally disable it temporarily by creating the Disable_binlog object and reset the state by destroying the object (don't forget that! or write code so that the object gets automatically destroyed when leaving a - function...). + block, see example in sql_table.cc). */ class Disable_binlog { private: diff --git a/sql/sql_table.cc b/sql/sql_table.cc index c09892ac48bda2490b14b2c5b595605cdfc7a1bd..96eebd98ac3e382b27813e467029aca7ab69bbe4 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1762,7 +1762,6 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, List_iterator<Key> key_it(keys); List_iterator<create_field> field_it(create_list); List<key_part_spec> key_parts; - Disable_binlog *disable_binlog; KEY *key_info=table->key_info; for (uint i=0 ; i < table->keys ; i++,key_info++) @@ -1925,16 +1924,17 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, } else create_info->data_file_name=create_info->index_file_name=0; - /* We don't log the statement, it will be logged later */ - disable_binlog= new Disable_binlog(thd); - if ((error=mysql_create_table(thd, new_db, tmp_name, - create_info, - create_list,key_list,1))) { - delete disable_binlog; - DBUG_RETURN(error); + /* + We don't log the statement, it will be logged later. Using a block so + that disable_binlog is deleted when we leave it in either way. + */ + Disable_binlog disable_binlog(thd); + if ((error=mysql_create_table(thd, new_db, tmp_name, + create_info, + create_list,key_list,1))) + DBUG_RETURN(error); } - delete disable_binlog; // reset binlogging properties for next code lines if (table->tmp_table) new_table=open_table(thd,new_db,tmp_name,tmp_name,0); else