Commit cf8dbcc6 authored by unknown's avatar unknown

Fixes for

BUG#4506 "mysqlbinlog --position --read-from-remote-server has wrong "# at" lines",
BUG#4553 "Multi-table DROP TABLE replicates improperly for nonexistent table" with a test file.
It was not possible to add a test for BUG#4506 as in the test suite we must use --short-form
which does not display the "# at" lines.


client/mysqlbinlog.cc:
  Fix for BUG#4506 "mysqlbinlog --position --read-from-remote-server has wrong "# at" lines"
  when reading a remote binlog, the start position is not always BIN_LOG_HEADER_SIZE (4).
sql/sql_table.cc:
  Fix for BUG#4553 "Multi-table DROP TABLE replicates improperly for nonexistent table"
  we must my_error() _before_ we write to the binlog, so that a meaningful error code is available
  in thd->net.last_errno for storage of the DROP TABLE statement into the binlog.
parent 2a64371e
......@@ -723,8 +723,8 @@ static int dump_remote_log_entries(const char* logname)
*/
if (old_off)
old_off+= len-1;
else
old_off= BIN_LOG_HEADER_SIZE;
else // first event, so it's a fake Rotate event
old_off= position;
}
return 0;
}
......
slave stop;
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;
slave start;
drop table if exists t1, t2;
create table t1 (a int);
drop table t1, t2;
Unknown table 't2'
# Testcase for BUG#4552 (DROP on two tables, one of which does not
# exist, must be binlogged with a non-zero error code)
source include/master-slave.inc;
drop table if exists t1, t2;
create table t1 (a int);
--error 1051;
drop table t1, t2;
save_master_pos;
connection slave;
sync_with_master;
......@@ -230,6 +230,17 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
wrong_tables.append(String(table->real_name));
}
}
error= 0;
if (wrong_tables.length())
{
if (!foreign_key_error)
my_error(ER_BAD_TABLE_ERROR,MYF(0),wrong_tables.c_ptr());
else
my_error(ER_ROW_IS_REFERENCED,MYF(0));
error= 1;
}
if (some_tables_deleted || tmp_table_deleted)
{
query_cache_invalidate3(thd, tables, 0);
......@@ -238,7 +249,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
mysql_update_log.write(thd, thd->query,thd->query_length);
if (mysql_bin_log.is_open())
{
thd->clear_error();
if (!error)
thd->clear_error();
Query_log_event qinfo(thd, thd->query, thd->query_length,
tmp_table_deleted && !some_tables_deleted);
mysql_bin_log.write(&qinfo);
......@@ -247,15 +259,6 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
}
unlock_table_names(thd, tables);
error= 0;
if (wrong_tables.length())
{
if (!foreign_key_error)
my_error(ER_BAD_TABLE_ERROR,MYF(0),wrong_tables.c_ptr());
else
my_error(ER_ROW_IS_REFERENCED,MYF(0));
error= 1;
}
DBUG_RETURN(error);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment