Commit fb69d642 authored by Igor Babaev's avatar Igor Babaev

Fixed bug mdev-463.

RBR should be turned off when an ANALYZE TABLE command is executed.
parent fd7059d2
#
# Bug mdev-463: assertion failure when running ANALYZE with RBR on
#
SET GLOBAL use_stat_tables = PREFERABLY;
CREATE TABLE t1 (i INT) ENGINE=InnoDB;
ANALYZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
DROP TABLE t1;
SET GLOBAL use_stat_tables = DEFAULT;
--source include/have_binlog_format_row.inc
--source include/have_innodb.inc
--echo #
--echo # Bug mdev-463: assertion failure when running ANALYZE with RBR on
--echo #
SET GLOBAL use_stat_tables = PREFERABLY;
--connect (con1,localhost,root,,)
CREATE TABLE t1 (i INT) ENGINE=InnoDB;
ANALYZE TABLE t1;
# Cleanup
DROP TABLE t1;
SET GLOBAL use_stat_tables = DEFAULT;
--disconnect con1
...@@ -322,6 +322,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, ...@@ -322,6 +322,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
int result_code; int result_code;
int compl_result_code; int compl_result_code;
bool need_repair_or_alter= 0; bool need_repair_or_alter= 0;
bool save_binlog_row_based= 0;
DBUG_ENTER("mysql_admin_table"); DBUG_ENTER("mysql_admin_table");
DBUG_PRINT("enter", ("extra_open_options: %u", extra_open_options)); DBUG_PRINT("enter", ("extra_open_options: %u", extra_open_options));
...@@ -415,6 +417,11 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, ...@@ -415,6 +417,11 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
*/ */
open_error= open_and_lock_tables(thd, table, TRUE, 0); open_error= open_and_lock_tables(thd, table, TRUE, 0);
if (lex->sql_command == SQLCOM_ANALYZE)
{
if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row()))
thd->clear_current_stmt_binlog_format_row();
}
} }
thd->prepare_derived_at_open= FALSE; thd->prepare_derived_at_open= FALSE;
...@@ -954,6 +961,8 @@ send_result_message: ...@@ -954,6 +961,8 @@ send_result_message:
trans_commit_stmt(thd); trans_commit_stmt(thd);
trans_commit_implicit(thd); trans_commit_implicit(thd);
close_thread_tables(thd); close_thread_tables(thd);
if (save_binlog_row_based)
thd->set_current_stmt_binlog_format_row();
thd->mdl_context.release_transactional_locks(); thd->mdl_context.release_transactional_locks();
/* /*
...@@ -986,6 +995,8 @@ err: ...@@ -986,6 +995,8 @@ err:
trans_rollback_stmt(thd); trans_rollback_stmt(thd);
trans_rollback(thd); trans_rollback(thd);
close_thread_tables(thd); // Shouldn't be needed close_thread_tables(thd); // Shouldn't be needed
if (save_binlog_row_based)
thd->set_current_stmt_binlog_format_row();
thd->mdl_context.release_transactional_locks(); thd->mdl_context.release_transactional_locks();
if (table) if (table)
table->table=0; table->table=0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment