mirror of
https://github.com/MariaDB/server.git
synced 2025-02-04 21:02:17 +01:00
176 lines
5 KiB
Text
176 lines
5 KiB
Text
--source include/have_innodb.inc
|
|
|
|
--disable_warnings
|
|
DROP DATABASE IF EXISTS `drop-temp+table-test`;
|
|
--enable_warnings
|
|
|
|
connect (con1,localhost,root,,);
|
|
connect (con2,localhost,root,,);
|
|
connection con1;
|
|
RESET MASTER;
|
|
CREATE DATABASE `drop-temp+table-test`;
|
|
USE `drop-temp+table-test`;
|
|
CREATE TEMPORARY TABLE shortn1 (a INT);
|
|
CREATE TEMPORARY TABLE `table:name` (a INT);
|
|
CREATE TEMPORARY TABLE shortn2 (a INT);
|
|
|
|
##############################################################################
|
|
# MDEV-20091: DROP TEMPORARY TABLE IF EXISTS statements will be written
|
|
# to binlog only if the corresponding temporary table exists.
|
|
##############################################################################
|
|
CREATE TEMPORARY TABLE tmp(c1 int);
|
|
CREATE TEMPORARY TABLE tmp1(c1 int);
|
|
CREATE TEMPORARY TABLE tmp2(c1 int);
|
|
CREATE TEMPORARY TABLE tmp3(c1 int);
|
|
CREATE TABLE t(c1 int);
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
|
|
|
--disable_warnings
|
|
# Post MDEV-20091: Following DROP TEMPORARY TABLE statement should not be
|
|
# logged as the table is already dropped above.
|
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
|
|
|
# Post MDEV-20091: Only DROP TEMPORARY TABLE statement should be written only
|
|
# for 'tmp1' table.
|
|
DROP TEMPORARY TABLE IF EXISTS tmp, tmp1;
|
|
DROP TEMPORARY TABLE tmp3;
|
|
|
|
#In RBR, tmp2 will NOT be binlogged, because it is a temporary table.
|
|
DROP TABLE IF EXISTS tmp2, t;
|
|
|
|
#In RBR, tmp2 will be binlogged, because it does not exist and master do not know
|
|
# whether it is a temporary table or not.
|
|
DROP TABLE IF EXISTS tmp2, t;
|
|
--enable_warnings
|
|
|
|
SELECT GET_LOCK("a",10);
|
|
|
|
#
|
|
# BUG48216 Replication fails on all slaves after upgrade to 5.0.86 on master
|
|
#
|
|
# When the session is closed, any temporary tables of the session are dropped
|
|
# and are binlogged. But it will be binlogged with a wrong database name when
|
|
# the length of the database name('drop-temp-table-test') is greater than the
|
|
# current database name('test').
|
|
#
|
|
USE test;
|
|
disconnect con1;
|
|
|
|
connection con2;
|
|
# We want to SHOW BINLOG EVENTS, to know what was logged. But there is no
|
|
# guarantee that logging of the terminated con1 has been done yet.
|
|
# To be sure that logging has been done, we use a user lock.
|
|
SELECT GET_LOCK("a",10);
|
|
let $VERSION=`SELECT VERSION()`;
|
|
source include/show_binlog_events.inc;
|
|
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.
|
|
#
|
|
# MDEV-20091: DROP TEMPORARY TABLE IF EXISTS statements will be written to
|
|
# binlog only if the corresponding temporary table exists. In row based
|
|
# replication temporary tables are not replicated hence their corresponding
|
|
# DROP TEMPORARY TABLE statement will be not be written to binary log upon
|
|
# session closure.
|
|
#
|
|
|
|
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
|
|
if (!`SELECT @@BINLOG_FORMAT = 'ROW'`) {
|
|
--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
|
|
|
|
|
|
--echo #
|
|
--echo # BUG#28642318: POINT IN TIME RECOVERY USING MYSQLBINLOG BROKEN
|
|
--echo # WITH TEMPORARY TABLE -> ERRORS
|
|
|
|
--echo # Test case for DELETE query.
|
|
|
|
RESET MASTER;
|
|
connect (con1,localhost,root,,);
|
|
|
|
--echo # Set up.
|
|
--connection default
|
|
--disable_warnings
|
|
SET @save_binlog_format= @@session.binlog_format;
|
|
SET @@session.binlog_format=STATEMENT;
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
CREATE TABLE t1 (a INT) ENGINE=INNODB;
|
|
|
|
--connection con1
|
|
SET @@session.binlog_format=STATEMENT;
|
|
CREATE TEMPORARY TABLE t1 (b BLOB) ENGINE=INNODB;
|
|
|
|
--connection default
|
|
DELETE d1, d2 FROM t1 AS d1, t1 AS d2 WHERE d1.a<>d2.a;
|
|
|
|
--exec $MYSQL_BINLOG --force-if-open $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/bug28642318.sql
|
|
|
|
--connection default
|
|
DROP TABLE t1;
|
|
|
|
--echo # DELETE query fails with table re-open error without patch.
|
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug28642318.sql
|
|
|
|
--echo # Clean up.
|
|
--connection con1
|
|
DROP TABLE IF EXISTS t1;
|
|
|
|
--connection default
|
|
DROP TABLE IF EXISTS t1;
|
|
RESET MASTER;
|
|
|
|
--echo # Test case for DROP query.
|
|
|
|
--connection default
|
|
CREATE TABLE t2 (a INT) ENGINE=INNODB;
|
|
|
|
--connection con1
|
|
CREATE TEMPORARY TABLE t2 (b BLOB) ENGINE=INNODB;
|
|
|
|
--connection default
|
|
DROP TABLE t2;
|
|
|
|
--connection con1
|
|
DROP TABLE t2;
|
|
|
|
--connection default
|
|
--exec $MYSQL_BINLOG --force-if-open $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/bug28642318.sql
|
|
|
|
--echo # DROP table query fails with unknown table error without patch.
|
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug28642318.sql
|
|
|
|
--echo # Clean up
|
|
--connection default
|
|
SET @@session.binlog_format= @save_binlog_format;
|
|
RESET MASTER;
|
|
|
|
--disconnect con1
|
|
--enable_warnings
|