From ad081387989b5b62d3e5f08bc69c0191aa4cdccb Mon Sep 17 00:00:00 2001 From: Davi Arnaut Date: Thu, 27 May 2010 18:11:55 -0300 Subject: [PATCH] Bug#42643: InnoDB does not support replication of TRUNCATE TABLE Post-merge fix: Pass the right parameter type to open_and_lock_tables. Passing FALSE ensures that derived table handling is disabled, truncate only operates on base tables. sql/sql_truncate.cc: Pass FALSE to disable derived table handling. This was probably reminiscent of the use of open_n_lock_single_table, which can't be used as in some cases (e.g. merge) more than one table will be opened. sql/sql_truncate.h: TABLE_LIST is a struct. --- sql/sql_truncate.cc | 4 ++-- sql/sql_truncate.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index 8fc04588aaa..901ab8e987d 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -351,7 +351,7 @@ static bool open_and_lock_table_for_truncate(THD *thd, TABLE_LIST *table_ref, the MDL lock taken above and otherwise there is no way to wait for FLUSH TABLES in deadlock-free fashion. */ - if (open_and_lock_tables(thd, table_ref, TL_WRITE, + if (open_and_lock_tables(thd, table_ref, FALSE, MYSQL_OPEN_IGNORE_FLUSH | MYSQL_OPEN_SKIP_TEMPORARY)) DBUG_RETURN(TRUE); @@ -406,7 +406,7 @@ bool mysql_truncate_table(THD *thd, TABLE_LIST *table_ref) table and delete all rows. In such a manner this can in fact open several tables if it's a temporary MyISAMMRG table. */ - if (open_and_lock_tables(thd, table_ref, TL_WRITE, + if (open_and_lock_tables(thd, table_ref, FALSE, MYSQL_OPEN_TEMPORARY_ONLY)) DBUG_RETURN(TRUE); diff --git a/sql/sql_truncate.h b/sql/sql_truncate.h index a9eec384718..11c07c7187c 100644 --- a/sql/sql_truncate.h +++ b/sql/sql_truncate.h @@ -16,7 +16,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ class THD; -class TABLE_LIST; +struct TABLE_LIST; bool mysql_truncate_table(THD *thd, TABLE_LIST *table_ref);