1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
DROP DATABASE IF EXISTS `drop-temp+table-test`;
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);
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;
DROP TEMPORARY TABLE IF EXISTS tmp;
DROP TEMPORARY TABLE IF EXISTS tmp, tmp1;
DROP TEMPORARY TABLE tmp3;
DROP TABLE IF EXISTS tmp2, t;
DROP TABLE IF EXISTS tmp2, t;
SELECT GET_LOCK("a",10);
GET_LOCK("a",10)
1
USE test;
SELECT GET_LOCK("a",10);
GET_LOCK("a",10)
1
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
binlog.000001 # Query # # CREATE DATABASE `drop-temp+table-test`
binlog.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE shortn1 (a INT)
binlog.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE `table:name` (a INT)
binlog.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE shortn2 (a INT)
binlog.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp(c1 int)
binlog.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp1(c1 int)
binlog.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp2(c1 int)
binlog.000001 # Query # # use `drop-temp+table-test`; CREATE TEMPORARY TABLE tmp3(c1 int)
binlog.000001 # Query # # use `drop-temp+table-test`; CREATE TABLE t(c1 int)
binlog.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp` /* generated by server */
binlog.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp1` /* generated by server */
binlog.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE `tmp3` /* generated by server */
binlog.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `t` /* generated by server */
binlog.000001 # Query # # use `drop-temp+table-test`; DROP TEMPORARY TABLE IF EXISTS `tmp2` /* generated by server */
binlog.000001 # Query # # use `drop-temp+table-test`; DROP TABLE IF EXISTS `tmp2`,`t` /* generated by server */
binlog.000001 # Query # # use `drop-temp+table-test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `shortn2`,`table:name`,`shortn1`
DROP DATABASE `drop-temp+table-test`;
RESET MASTER;
#
# Bug 83003: Using temporary tables on slaves increases GTID sequence number
#
CREATE TEMPORARY TABLE temp_trx(a INT) ENGINE=InnoDB;
CREATE TEMPORARY TABLE temp_needs_logging_in_stmt(a INT) ENGINE=InnoDB;
SET SESSION sql_log_bin= 0;
CREATE TEMPORARY TABLE temp_binlog_disabled(a INT) ENGINE=InnoDB;
SET SESSION sql_log_bin= 1;
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
binlog.000001 # Query # # use `test`; CREATE TEMPORARY TABLE temp_trx(a INT) ENGINE=InnoDB
binlog.000001 # Query # # use `test`; CREATE TEMPORARY TABLE temp_needs_logging_in_stmt(a INT) ENGINE=InnoDB
binlog.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `temp_needs_logging_in_stmt`,`temp_trx`
#
# BUG#21638823: ASSERTION FAILED:
# THD->GET_TRANSACTION()->IS_EMPTY(TRANSACTION_CTX::STMT) || THD
#
# Test case first checks that it is possible to terminate a connection
# with a temporary table (which will implicitly remove the temporary
# table) while in XA_idle. Then checks that an explicit DROP TEMPORARY
# TABLE is rejected with ER_XAER_RMFAIL as required by the XA spec.
#
# Reset master to avoid clutter when dumping binlog
RESET MASTER;
# Create separate connection
# Create temporary table
CREATE TEMPORARY TABLE temp(i int);
INSERT INTO temp VALUES (0), (1), (2), (3);
# Start XA txn and leave it in XA_idle
XA START 'idle_at_disconnect';
XA END 'idle_at_disconnect';
# Terminate connection to verify that the temporary table can be
# removed at disconnect even in XA_idle, and that this does not
# cause problems for replication
# Dump binlog to show that, either the generated DROP comes after tx
# commit (stmt), or there is no trace of the XA txn and
# the temp table (row or mixed)
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
binlog.000001 # Query # # use `test`; CREATE TEMPORARY TABLE temp(i int)
binlog.000001 # Query # # BEGIN
binlog.000001 # Query # # use `test`; INSERT INTO temp VALUES (0), (1), (2), (3)
binlog.000001 # Query # # COMMIT
binlog.000001 # Query # # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `temp`
#
# Start XA txn and leave in XA_idle
XA START 'idle_when_drop_temp';
XA END 'idle_when_drop_temp';
# Verify that explicit DROP TEMPORARY TABLE is rejected in XA_idle
DROP TEMPORARY TABLE IF EXISTS t;
Got one of the listed errors
XA ROLLBACK 'idle_when_drop_temp';
RESET MASTER;
#
# BUG#28642318: POINT IN TIME RECOVERY USING MYSQLBINLOG BROKEN
# WITH TEMPORARY TABLE -> ERRORS
# Test case for DELETE query.
RESET MASTER;
# Set up.
SET @save_binlog_format= @@session.binlog_format;
SET @@session.binlog_format=STATEMENT;
CREATE TABLE t1 (a INT) ENGINE=INNODB;
SET @@session.binlog_format=STATEMENT;
CREATE TEMPORARY TABLE t1 (b BLOB) ENGINE=INNODB;
DELETE d1, d2 FROM t1 AS d1, t1 AS d2 WHERE d1.a<>d2.a;
DROP TABLE t1;
# DELETE query fails with table re-open error without patch.
# Clean up.
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t1;
RESET MASTER;
# Test case for DROP query.
CREATE TABLE t1 (a INT) ENGINE=INNODB;
CREATE TEMPORARY TABLE t1 (b BLOB) ENGINE=INNODB;
DROP TABLE t1;
DROP TABLE t1;
# DROP table query fails with unknown table error without patch.
# Clean up
SET @@session.binlog_format= @save_binlog_format;
RESET MASTER;
|