summaryrefslogtreecommitdiff
path: root/sql/log_event.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r--sql/log_event.cc27
1 files changed, 13 insertions, 14 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc
index a1f8a791c49..3a52b72909a 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -679,6 +679,7 @@ Log_event::Log_event(THD* thd_arg, uint16 flags_arg, bool using_trans)
server_id= thd->server_id;
when= thd->start_time;
cache_type= (using_trans || stmt_has_updated_trans_table(thd)
+ || thd->thread_specific_used
? Log_event::EVENT_TRANSACTIONAL_CACHE :
Log_event::EVENT_STMT_CACHE);
}
@@ -1729,8 +1730,8 @@ log_event_print_value(IO_CACHE *file, const uchar *ptr,
{
uint32 tmp= uint3korr(ptr);
int part;
- char buf[10];
- char *pos= &buf[10];
+ char buf[11];
+ char *pos= &buf[10]; // start from '\0' to the beginning
/* Copied from field.cc */
*pos--=0; // End NULL
@@ -2470,6 +2471,7 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
*/
LEX *lex= thd->lex;
bool implicit_commit= FALSE;
+ bool force_trans= FALSE;
cache_type= Log_event::EVENT_INVALID_CACHE;
switch (lex->sql_command)
{
@@ -2483,14 +2485,16 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
implicit_commit= TRUE;
break;
case SQLCOM_DROP_TABLE:
- implicit_commit= !(lex->drop_temporary && thd->in_multi_stmt_transaction());
+ force_trans= lex->drop_temporary && thd->in_multi_stmt_transaction();
+ implicit_commit= !force_trans;
break;
case SQLCOM_ALTER_TABLE:
case SQLCOM_CREATE_TABLE:
- implicit_commit= !((lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
- thd->in_multi_stmt_transaction()) &&
- !(lex->select_lex.item_list.elements &&
- thd->is_current_stmt_binlog_format_row());
+ force_trans= (lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
+ thd->in_multi_stmt_transaction();
+ implicit_commit= !force_trans &&
+ !(lex->select_lex.item_list.elements &&
+ thd->is_current_stmt_binlog_format_row());
break;
case SQLCOM_SET_OPTION:
implicit_commit= (lex->autocommit ? TRUE : FALSE);
@@ -2548,7 +2552,8 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
}
else
{
- cache_type= (using_trans || stmt_has_updated_trans_table(thd)
+ cache_type= ((using_trans || stmt_has_updated_trans_table(thd) ||
+ force_trans || thd->thread_specific_used)
? Log_event::EVENT_TRANSACTIONAL_CACHE :
Log_event::EVENT_STMT_CACHE);
}
@@ -7733,12 +7738,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 (!use_trans_cache())
- {
- DBUG_PRINT("info", ("Marked that we need to keep log"));
- thd->variables.option_bits|= OPTION_KEEP_LOG;
- }
} // if (table)