diff options
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r-- | sql/log_event.cc | 27 |
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) |