summaryrefslogtreecommitdiff
path: root/sql/log_event.cc
diff options
context:
space:
mode:
authorAlfranio Correia <alfranio.correia@sun.com>2010-05-19 18:01:12 +0100
committerAlfranio Correia <alfranio.correia@sun.com>2010-05-19 18:01:12 +0100
commit3f8bde448c6b97f073576e1283224c3058320dea (patch)
tree9ed3c78ca4cde71b084f4fea32d25ea20c93c844 /sql/log_event.cc
parent59b4dfccb50d2c6ebadd5de0da334124d13db0b6 (diff)
downloadmariadb-git-3f8bde448c6b97f073576e1283224c3058320dea.tar.gz
BUG#53560 CREATE TEMP./DROP TEMP. are not binglogged correctly after a failed statement
This patch fixes two problems described as follows: 1 - If there is an on-going transaction and a temporary table is created or dropped, any failed statement that follows the "create" or "drop commands" triggers a rollback and by consequence the slave will go out sync because the binary log will have a wrong sequence of events. To fix the problem, we changed the expression that evaluates when the cache should be flushed after either the rollback of a statment or transaction. 2 - When a "CREATE TEMPORARY TABLE SELECT * FROM" was executed the OPTION_KEEP_LOG was not set into the thd->options. For that reason, if the transaction had updated only transactional engines and was rolled back at the end (.e.g due to a deadlock) the changes were not written to the binary log, including the creation of the temporary table. To fix the problem, we have set the OPTION_KEEP_LOG into the thd->options when a "CREATE TEMPORARY TABLE SELECT * FROM" is executed. sql/log.cc: Reorganized the code based on the following functions: - bool ending_trans(const THD* thd, const bool all); - bool trans_has_updated_non_trans_table(const THD* thd); - bool trans_has_no_stmt_committed(const THD* thd, const bool all); - bool stmt_has_updated_non_trans_table(const THD* thd); sql/log.h: Added functions to organize the code in log.cc. sql/log_event.cc: Removed the OPTION_KEEP_LOG since it must be used only when creating and dropping temporary tables. sql/log_event_old.cc: Removed the OPTION_KEEP_LOG since it must be used only when creating and dropping temporary tables. sql/sql_parse.cc: When a "CREATE TEMPORARY TABLE SELECT * FROM" was executed the OPTION_KEEP_LOG was not set into the thd->options. To fix the problem, we have set the OPTION_KEEP_LOG into the thd->options when a "CREATE TEMPORARY TABLE SELECT * FROM" is executed.
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r--sql/log_event.cc6
1 files changed, 0 insertions, 6 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc
index a8e227fa99b..617d1188984 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -7544,12 +7544,6 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
clear_all_errors(thd, const_cast<Relay_log_info*>(rli));
error= 0;
}
-
- if (!cache_stmt)
- {
- DBUG_PRINT("info", ("Marked that we need to keep log"));
- thd->options|= OPTION_KEEP_LOG;
- }
} // if (table)
/*