diff options
author | guilhem@mysql.com <> | 2004-06-09 16:07:01 +0200 |
---|---|---|
committer | guilhem@mysql.com <> | 2004-06-09 16:07:01 +0200 |
commit | 2b20e84ff8c5df05c42d3dfedf0b38649fea8308 (patch) | |
tree | 1003fd9ceb90dc1ddeb6db7ff4e98d8da2cc51c4 /sql/sql_delete.cc | |
parent | c75b24a73a0852daafec21d3c9cadd3cbe892c9d (diff) | |
download | mariadb-git-2b20e84ff8c5df05c42d3dfedf0b38649fea8308.tar.gz |
Making DROP TABLE IF EXISTS, DROP DATABASE IF EXISTS, DELETE FROM, UPDATE be logged to
binlog even if they changed nothing, and a test for this.
This is useful when users use these commands to clean up their master and slave by issuing
one command on master (assume master and slave have slightly different data for some
reason and you want to clean up both).
Note that I have not changed multi-table DELETE and multi-table UPDATE because their
error-reporting mechanism is more complicated.
Diffstat (limited to 'sql/sql_delete.cc')
-rw-r--r-- | sql/sql_delete.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index f21dbb10712..48497636186 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -199,7 +199,15 @@ cleanup: transactional_table= table->file->has_transactions(); log_delayed= (transactional_table || table->tmp_table); - if (deleted && (error <= 0 || !transactional_table)) + /* + We write to the binary log even if we deleted no row, because maybe the + user is using this command to ensure that a table is clean on master *and + on slave*. Think of the case of a user having played separately with the + master's table and slave's table and wanting to take a fresh identical + start now. + error < 0 means "really no error". error <= 0 means "maybe some error". + */ + if ((deleted || (error < 0)) && (error <= 0 || !transactional_table)) { mysql_update_log.write(thd,thd->query, thd->query_length); if (mysql_bin_log.is_open()) @@ -544,6 +552,8 @@ bool multi_delete::send_eof() rows and we succeeded, or also in an error case when there was a non-transaction-safe table involved, since modifications in it cannot be rolled back. + Note that if we deleted nothing we don't write to the binlog (TODO: + fix this). */ if (deleted && (error <= 0 || normal_tables)) { |