diff --git a/sql/sql_class.h b/sql/sql_class.h index 03e4660d8ef..2112765a1b2 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -4078,6 +4078,16 @@ public: DBUG_VOID_RETURN; } + inline enum_binlog_format get_current_stmt_binlog_format() + { + return current_stmt_binlog_format; + } + + inline void set_current_stmt_binlog_format(enum_binlog_format format) + { + current_stmt_binlog_format= format; + } + inline void set_current_stmt_binlog_format_row() { DBUG_ENTER("set_current_stmt_binlog_format_row"); diff --git a/sql/sql_update.cc b/sql/sql_update.cc index a8b86448d5e..c0fa2b4d7fe 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -2850,17 +2850,19 @@ bool multi_update::send_eof() break; } } - ScopedStatementReplication scoped_stmt_rpl(force_stmt ? thd : NULL); + enum_binlog_format save_binlog_format; + save_binlog_format= thd->get_current_stmt_binlog_format(); + if (force_stmt) + thd->set_current_stmt_binlog_format_stmt(); if (thd->binlog_query(THD::ROW_QUERY_TYPE, thd->query(), thd->query_length(), transactional_tables, FALSE, FALSE, errcode)) - { local_error= 1; // Rollback update - } + thd->set_current_stmt_binlog_format(save_binlog_format); } } - DBUG_ASSERT(trans_safe || !updated || + DBUG_ASSERT(trans_safe || !updated || thd->transaction.stmt.modified_non_trans_table); if (likely(local_error != 0))