mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 22:34:18 +01:00
24f7afe7bc
+ failing statements Implicit DROP event for temporary table is not getting LOG_EVENT_THREAD_SPECIFIC_F flag, because, in the previous executed statement in the same thread, which might even be a failed statement, the thread_specific_used flag is set to FALSE (in mysql_reset_thd_for_next_command) and not set to TRUE before connection is shutdown. This means that implicit DROP event will take the FALSE value from thread_specific_used and will not set LOG_EVENT_THREAD_SPECIFIC_F in the event header. As a consequence, mysqlbinlog will not print the pseudo_thread_id from the DROP event, because one of the requirements for the printout is that this flag is set to TRUE. We fix this by setting thread_specific_used whenever we are binlogging a DROP in close_temporary_tables, and resetting it to its previous value afterward.
42 lines
877 B
Text
42 lines
877 B
Text
RESET MASTER;
|
|
create table foo (a int);
|
|
flush logs;
|
|
create temporary table tmp1_foo like foo;
|
|
create temporary table tmp2_foo (a int);
|
|
insert into tmp1_foo values (1), (2), (3), (4);
|
|
replace into tmp2_foo values (1), (2), (3), (4);
|
|
update tmp1_foo set a=2*a-1;
|
|
update tmp2_foo set a=2*a;
|
|
delete from tmp1_foo where a < 5;
|
|
delete from tmp2_foo where a < 5;
|
|
insert into foo select * from tmp1_foo;
|
|
insert into foo select * from tmp2_foo;
|
|
truncate table tmp1_foo;
|
|
truncate table tmp2_foo;
|
|
flush logs;
|
|
select * from foo;
|
|
a
|
|
5
|
|
7
|
|
6
|
|
8
|
|
drop table foo;
|
|
create table foo (a int);
|
|
select * from foo;
|
|
a
|
|
5
|
|
7
|
|
6
|
|
8
|
|
drop table foo;
|
|
RESET MASTER;
|
|
create database b51226;
|
|
use b51226;
|
|
create temporary table t1(i int);
|
|
use b51226;
|
|
create temporary table t1(i int);
|
|
create temporary table t1(i int);
|
|
ERROR 42S01: Table 't1' already exists
|
|
insert into t1 values(1);
|
|
DROP DATABASE b51226;
|
|
FLUSH LOGS;
|