1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Bug#58147: ALTER TABLE w/ TRUNCATE PARTITION fails

but the statement is written to binlog

TRUNCATE PARTITION was written to the binlog
even if it failed before calling any partition's
truncate function.

Solved by adding an argument to truncate_partition,
to flag if it should be written to the binlog or not.

It should be written to the binlog when a call to any
partitions truncate function is done.
This commit is contained in:
Mattias Jonsson
2010-12-01 22:47:40 +01:00
parent 938c61dcbb
commit f3c6e6ffd6
5 changed files with 112 additions and 6 deletions

View File

@ -110,6 +110,7 @@ bool Alter_table_truncate_partition_statement::execute(THD *thd)
ha_partition *partition;
ulong timeout= thd->variables.lock_wait_timeout;
TABLE_LIST *first_table= thd->lex->select_lex.table_list.first;
bool to_binlog;
DBUG_ENTER("Alter_table_truncate_partition_statement::execute");
/*
@ -161,16 +162,18 @@ bool Alter_table_truncate_partition_statement::execute(THD *thd)
partition= (ha_partition *) first_table->table->file;
/* Invoke the handler method responsible for truncating the partition. */
if ((error= partition->truncate_partition(&thd->lex->alter_info)))
if ((error= partition->truncate_partition(&thd->lex->alter_info,
&to_binlog)))
first_table->table->file->print_error(error, MYF(0));
/*
All effects of a truncate operation are committed even if the
operation fails. Thus, the query must be written to the binary
log. The only exception is a unimplemented truncate method. Also,
it is logged in statement format, regardless of the binlog format.
log. The exception is a unimplemented truncate method or failure
before any call to handler::truncate() is done.
Also, it is logged in statement format, regardless of the binlog format.
*/
if (error != HA_ERR_WRONG_COMMAND)
if (error != HA_ERR_WRONG_COMMAND && to_binlog)
error|= write_bin_log(thd, !error, thd->query(), thd->query_length());
/*