-
Notifications
You must be signed in to change notification settings - Fork 4k
/
Copy pathdrop_temp_table.test
210 lines (166 loc) · 6.3 KB
/
drop_temp_table.test
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
--disable_warnings
DROP DATABASE IF EXISTS `drop-temp+table-test`;
--enable_warnings
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
connection con1;
RESET BINARY LOGS AND GTIDS;
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);
##############################################################################
# BUG#46572 DROP TEMPORARY table IF EXISTS does not have a consistent behavior
# in ROW mode
##############################################################################
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
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;
--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()`;
if (`SELECT @@GLOBAL.binlog_format = 'STATEMENT'`)
{
let $wait_binlog_event=DROP /*!40005 TEMPORARY */ TABLE IF EXISTS;
source include/rpl/wait_for_binlog_event.inc;
}
source include/rpl/deprecated/show_binlog_events.inc;
DROP DATABASE `drop-temp+table-test`;
RESET BINARY LOGS AND GTIDS;
# End of 4.1 tests
--echo #
--echo # Bug 83003: Using temporary tables on slaves increases GTID sequence number
--echo #
--source include/count_sessions.inc
--connect (con1,localhost,root,,)
# Check with transactional tables to be logged in close_temporary_tables.
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;
--disconnect con1
--connection default
--source include/wait_until_count_sessions.inc
--source include/rpl/deprecated/show_binlog_events.inc
# End of 5.6 tests
--echo #
--echo # BUG#21638823: ASSERTION FAILED:
--echo # THD->GET_TRANSACTION()->IS_EMPTY(TRANSACTION_CTX::STMT) || THD
--echo #
--echo # Test case first checks that it is possible to terminate a connection
--echo # with a temporary table (which will implicitly remove the temporary
--echo # table) while in XA_idle. Then checks that an explicit DROP TEMPORARY
--echo # TABLE is rejected with ER_XAER_RMFAIL as required by the XA spec.
--echo #
--echo # Reset source to avoid clutter when dumping binlog
RESET BINARY LOGS AND GTIDS;
--echo # Create separate connection
connect (con3,localhost,root,,);
--connection con3
--echo # Create temporary table
CREATE TEMPORARY TABLE temp(i int);
INSERT INTO temp VALUES (0), (1), (2), (3);
--echo # Start XA txn and leave it in XA_idle
XA START 'idle_at_disconnect';
XA END 'idle_at_disconnect';
--echo # Terminate connection to verify that the temporary table can be
--echo # removed at disconnect even in XA_idle, and that this does not
--echo # cause problems for replication
--disconnect con3
--source include/wait_until_disconnected.inc
--connection default
if (`SELECT @@GLOBAL.binlog_format = 'STATEMENT'`)
{
--let $wait_binlog_event= DROP
--source include/rpl/wait_for_binlog_event.inc
}
--echo # Dump binlog to show that, either the generated DROP comes after tx
--echo # commit (stmt), or there is no trace of the XA txn and
--echo # the temp table (row or mixed)
--source include/rpl/deprecated/show_binlog_events.inc
--echo #
--echo # Start XA txn and leave in XA_idle
XA START 'idle_when_drop_temp';
XA END 'idle_when_drop_temp';
--echo # Verify that explicit DROP TEMPORARY TABLE is rejected in XA_idle
--error ER_XAER_RMFAIL, ER_CLIENT_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRX_IN_SBR
DROP TEMPORARY TABLE IF EXISTS t;
XA ROLLBACK 'idle_when_drop_temp';
# clean up the binary log at in the end of the test
# case as well.
RESET BINARY LOGS AND GTIDS;
--echo #
--echo # BUG#28642318: POINT IN TIME RECOVERY USING MYSQLBINLOG BROKEN
--echo # WITH TEMPORARY TABLE -> ERRORS
--echo # Test case for DELETE query.
RESET BINARY LOGS AND GTIDS;
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/binlog.000001 > $MYSQLTEST_VARDIR/tmp/bug28642318.sql
--connection default
DROP TABLE t1;
--echo # DELETE query fails with table re-open error without patch.
--exec $MYSQL -e "SET SQL_LOG_BIN=0; SOURCE $MYSQLTEST_VARDIR/tmp/bug28642318.sql;"
--echo # Clean up.
--connection con1
DROP TABLE IF EXISTS t1;
--connection default
DROP TABLE IF EXISTS t1;
RESET BINARY LOGS AND GTIDS;
--echo # Test case for DROP query.
--connection default
CREATE TABLE t1 (a INT) ENGINE=INNODB;
--connection con1
CREATE TEMPORARY TABLE t1 (b BLOB) ENGINE=INNODB;
--connection default
DROP TABLE t1;
--connection con1
DROP TABLE t1;
--connection default
--exec $MYSQL_BINLOG --force-if-open $MYSQLD_DATADIR/binlog.000001 > $MYSQLTEST_VARDIR/tmp/bug28642318.sql
--echo # DROP table query fails with unknown table error without patch.
--exec $MYSQL -e "SET SQL_LOG_BIN=0; SOURCE $MYSQLTEST_VARDIR/tmp/bug28642318.sql;"
--echo # Clean up
--connection default
SET @@session.binlog_format= @save_binlog_format;
RESET BINARY LOGS AND GTIDS;
--remove_file $MYSQLTEST_VARDIR/tmp/bug28642318.sql
--disconnect con1
--enable_warnings