From 5753dfe73d91c67f67f473536a4fa2eeed495ca9 Mon Sep 17 00:00:00 2001 From: "elliot@mysql.com" <> Date: Thu, 23 Feb 2006 23:20:29 -0500 Subject: [PATCH] BUG#17521 alter database crashes slave Problem was a null pointer Fixed by passing correct database name to slave filtering mechanism Added test. --- mysql-test/r/rpl_alter_db.result | 8 ++++++++ mysql-test/t/rpl_alter_db.test | 10 ++++++++++ sql/sql_parse.cc | 6 +++--- 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 mysql-test/r/rpl_alter_db.result create mode 100644 mysql-test/t/rpl_alter_db.test diff --git a/mysql-test/r/rpl_alter_db.result b/mysql-test/r/rpl_alter_db.result new file mode 100644 index 00000000000..6edbe5d427f --- /dev/null +++ b/mysql-test/r/rpl_alter_db.result @@ -0,0 +1,8 @@ +stop slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +start slave; +use mysql; +alter database collate latin1_bin; diff --git a/mysql-test/t/rpl_alter_db.test b/mysql-test/t/rpl_alter_db.test new file mode 100644 index 00000000000..5ac8a2f4018 --- /dev/null +++ b/mysql-test/t/rpl_alter_db.test @@ -0,0 +1,10 @@ +source include/master-slave.inc; +connection master; +use mysql; # to be different from initial `test' db of mysqltest client +alter database collate latin1_bin; +save_master_pos; + +connection slave; +sync_with_master; + + diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index b84eb1cfcb8..e4bbcfc5074 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3715,7 +3715,7 @@ end_with_restore_list: } if (!strip_sp(db) || check_db_name(db)) { - my_error(ER_WRONG_DB_NAME, MYF(0), lex->name); + my_error(ER_WRONG_DB_NAME, MYF(0), db); break; } /* @@ -3727,8 +3727,8 @@ end_with_restore_list: */ #ifdef HAVE_REPLICATION if (thd->slave_thread && - (!rpl_filter->db_ok(lex->name) || - !rpl_filter->db_ok_with_wild_table(lex->name))) + (!rpl_filter->db_ok(db) || + !rpl_filter->db_ok_with_wild_table(db))) { my_message(ER_SLAVE_IGNORED_TABLE, ER(ER_SLAVE_IGNORED_TABLE), MYF(0)); break;