mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
BUG 54842: automerged bzr bundle in mysql-trunk-bugfixing.
This commit is contained in:
@ -69,4 +69,34 @@ let $VERSION=`SELECT VERSION()`;
|
|||||||
source include/show_binlog_events.inc;
|
source include/show_binlog_events.inc;
|
||||||
DROP DATABASE `drop-temp+table-test`;
|
DROP DATABASE `drop-temp+table-test`;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #54842: DROP TEMPORARY TABLE not binlogged after manual switching binlog format to ROW
|
||||||
|
#
|
||||||
|
# Sanity test. Checking that implicit DROP event is logged.
|
||||||
|
#
|
||||||
|
# After BUG#52616, the switch to ROW mode becomes effective even
|
||||||
|
# if there are open temporary tables. As such the implicit drop
|
||||||
|
# for temporary tables on session closing must be logged.
|
||||||
|
#
|
||||||
|
|
||||||
|
RESET MASTER;
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( i text );
|
||||||
|
|
||||||
|
--connect(con1,localhost,root,,)
|
||||||
|
CREATE TEMPORARY TABLE ttmp1 ( i text );
|
||||||
|
SET @@session.binlog_format=ROW;
|
||||||
|
INSERT INTO t1 VALUES ('1');
|
||||||
|
SELECT @@session.binlog_format;
|
||||||
|
--disconnect con1
|
||||||
|
|
||||||
|
-- connection default
|
||||||
|
--let $wait_binlog_event= DROP
|
||||||
|
--source include/wait_for_binlog_event.inc
|
||||||
|
-- source include/show_binlog_events.inc
|
||||||
|
RESET MASTER;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -33,4 +33,23 @@ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE I
|
|||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `t` /* generated by server */
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `t` /* generated by server */
|
||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp2` /* generated by server */
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp2` /* generated by server */
|
||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2, t
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2, t
|
||||||
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `shortn2`,`table:name`,`shortn1`
|
||||||
DROP DATABASE `drop-temp+table-test`;
|
DROP DATABASE `drop-temp+table-test`;
|
||||||
|
RESET MASTER;
|
||||||
|
CREATE TABLE t1 ( i text );
|
||||||
|
CREATE TEMPORARY TABLE ttmp1 ( i text );
|
||||||
|
SET @@session.binlog_format=ROW;
|
||||||
|
INSERT INTO t1 VALUES ('1');
|
||||||
|
SELECT @@session.binlog_format;
|
||||||
|
@@session.binlog_format
|
||||||
|
ROW
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 ( i text )
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query # # COMMIT
|
||||||
|
master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `ttmp1`
|
||||||
|
RESET MASTER;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -297,6 +297,7 @@ master-bin.000001 # Table_map # # table_id: # (test.t0)
|
|||||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
master-bin.000001 # Query # # COMMIT
|
master-bin.000001 # Query # # COMMIT
|
||||||
master-bin.000001 # Query # # use `test`; create table t2 (n int) engine=innodb
|
master-bin.000001 # Query # # use `test`; create table t2 (n int) engine=innodb
|
||||||
|
master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `t1`,`ti`
|
||||||
do release_lock("lock1");
|
do release_lock("lock1");
|
||||||
drop table t0,t2;
|
drop table t0,t2;
|
||||||
set autocommit=0;
|
set autocommit=0;
|
||||||
|
@ -42,3 +42,22 @@ master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS t
|
|||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2, t
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS tmp2, t
|
||||||
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `shortn2`,`table:name`,`shortn1`
|
master-bin.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `shortn2`,`table:name`,`shortn1`
|
||||||
DROP DATABASE `drop-temp+table-test`;
|
DROP DATABASE `drop-temp+table-test`;
|
||||||
|
RESET MASTER;
|
||||||
|
CREATE TABLE t1 ( i text );
|
||||||
|
CREATE TEMPORARY TABLE ttmp1 ( i text );
|
||||||
|
SET @@session.binlog_format=ROW;
|
||||||
|
INSERT INTO t1 VALUES ('1');
|
||||||
|
SELECT @@session.binlog_format;
|
||||||
|
@@session.binlog_format
|
||||||
|
ROW
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 ( i text )
|
||||||
|
master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE ttmp1 ( i text )
|
||||||
|
master-bin.000001 # Query # # BEGIN
|
||||||
|
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||||
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||||
|
master-bin.000001 # Query # # COMMIT
|
||||||
|
master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `ttmp1`
|
||||||
|
RESET MASTER;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -26,3 +26,24 @@ CREATE TEMPORARY TABLE tmp3 (a int);
|
|||||||
DROP TEMPORARY TABLE tmp3;
|
DROP TEMPORARY TABLE tmp3;
|
||||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||||
START SLAVE;
|
START SLAVE;
|
||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
CREATE TABLE t1 ( i INT );
|
||||||
|
SHOW STATUS LIKE 'Slave_open_temp_tables';
|
||||||
|
Variable_name Value
|
||||||
|
Slave_open_temp_tables 0
|
||||||
|
CREATE TEMPORARY TABLE ttmp1 ( i INT );
|
||||||
|
SET SESSION binlog_format=ROW;
|
||||||
|
SHOW STATUS LIKE 'Slave_open_temp_tables';
|
||||||
|
Variable_name Value
|
||||||
|
Slave_open_temp_tables 0
|
||||||
|
show binlog events from <binlog_start>;
|
||||||
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
|
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 ( i INT )
|
||||||
|
master-bin.000001 # Query # # use `test`; CREATE TEMPORARY TABLE ttmp1 ( i INT )
|
||||||
|
master-bin.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `ttmp1`
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -66,4 +66,32 @@ START SLAVE;
|
|||||||
connection master;
|
connection master;
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#54842: DROP TEMPORARY TABLE not binlogged after manual switching binlog format to ROW
|
||||||
|
#
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
-- source include/master-slave-reset.inc
|
||||||
|
-- connection master
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( i INT );
|
||||||
|
--sync_slave_with_master
|
||||||
|
SHOW STATUS LIKE 'Slave_open_temp_tables';
|
||||||
|
|
||||||
|
--connect(con1,localhost,root,,)
|
||||||
|
CREATE TEMPORARY TABLE ttmp1 ( i INT );
|
||||||
|
SET SESSION binlog_format=ROW;
|
||||||
|
--disconnect con1
|
||||||
|
|
||||||
|
-- connection master
|
||||||
|
--let $wait_binlog_event= DROP
|
||||||
|
--source include/wait_for_binlog_event.inc
|
||||||
|
--sync_slave_with_master
|
||||||
|
SHOW STATUS LIKE 'Slave_open_temp_tables';
|
||||||
|
|
||||||
|
--connection master
|
||||||
|
--source include/show_binlog_events.inc
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -1636,6 +1636,7 @@ static inline uint tmpkeyval(THD *thd, TABLE *table)
|
|||||||
|
|
||||||
void close_temporary_tables(THD *thd)
|
void close_temporary_tables(THD *thd)
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("close_temporary_tables");
|
||||||
TABLE *table;
|
TABLE *table;
|
||||||
TABLE *next= NULL;
|
TABLE *next= NULL;
|
||||||
TABLE *prev_table;
|
TABLE *prev_table;
|
||||||
@ -1643,10 +1644,9 @@ void close_temporary_tables(THD *thd)
|
|||||||
bool was_quote_show= TRUE;
|
bool was_quote_show= TRUE;
|
||||||
|
|
||||||
if (!thd->temporary_tables)
|
if (!thd->temporary_tables)
|
||||||
return;
|
DBUG_VOID_RETURN;
|
||||||
|
|
||||||
if (!mysql_bin_log.is_open() ||
|
if (!mysql_bin_log.is_open())
|
||||||
(thd->is_current_stmt_binlog_format_row() && thd->variables.binlog_format == BINLOG_FORMAT_ROW))
|
|
||||||
{
|
{
|
||||||
TABLE *tmp_next;
|
TABLE *tmp_next;
|
||||||
for (table= thd->temporary_tables; table; table= tmp_next)
|
for (table= thd->temporary_tables; table; table= tmp_next)
|
||||||
@ -1655,7 +1655,7 @@ void close_temporary_tables(THD *thd)
|
|||||||
close_temporary(table, 1, 1);
|
close_temporary(table, 1, 1);
|
||||||
}
|
}
|
||||||
thd->temporary_tables= 0;
|
thd->temporary_tables= 0;
|
||||||
return;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Better add "if exists", in case a RESET MASTER has been done */
|
/* Better add "if exists", in case a RESET MASTER has been done */
|
||||||
@ -1771,6 +1771,7 @@ void close_temporary_tables(THD *thd)
|
|||||||
if (!was_quote_show)
|
if (!was_quote_show)
|
||||||
thd->variables.option_bits&= ~OPTION_QUOTE_SHOW_CREATE; /* restore option */
|
thd->variables.option_bits&= ~OPTION_QUOTE_SHOW_CREATE; /* restore option */
|
||||||
thd->temporary_tables=0;
|
thd->temporary_tables=0;
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user