Commit 533e0551 authored by serg@serg.mylan's avatar serg@serg.mylan

TRUNCATE is always a transaction on itself. pretent we're in auto-commit mode

bug#8151
parent 8790645b
...@@ -821,6 +821,7 @@ truncate table t1; ...@@ -821,6 +821,7 @@ truncate table t1;
Can't execute the given command because you have active locked tables or an active transaction Can't execute the given command because you have active locked tables or an active transaction
commit; commit;
truncate table t1; truncate table t1;
truncate table t1;
select * from t1; select * from t1;
a a
insert into t1 values(1),(2); insert into t1 values(1),(2);
......
...@@ -528,6 +528,7 @@ insert into t1 values(1),(2); ...@@ -528,6 +528,7 @@ insert into t1 values(1),(2);
truncate table t1; truncate table t1;
commit; commit;
truncate table t1; truncate table t1;
truncate table t1;
select * from t1; select * from t1;
insert into t1 values(1),(2); insert into t1 values(1),(2);
delete from t1; delete from t1;
......
...@@ -590,8 +590,12 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok) ...@@ -590,8 +590,12 @@ int mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok)
{ {
/* Probably InnoDB table */ /* Probably InnoDB table */
table_list->lock_type= TL_WRITE; table_list->lock_type= TL_WRITE;
DBUG_RETURN(mysql_delete(thd, table_list, (COND*) 0, (ORDER*) 0, ulong save_options= thd->options;
HA_POS_ERROR, 0)); thd->options&= ~(ulong) (OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT);
int res= mysql_delete(thd, table_list, (COND*) 0, (ORDER*) 0,
HA_POS_ERROR, 0);
thd->options= save_options;
DBUG_RETURN(res);
} }
if (lock_and_wait_for_table_name(thd, table_list)) if (lock_and_wait_for_table_name(thd, table_list))
DBUG_RETURN(-1); DBUG_RETURN(-1);
......
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