config root man

Current Path : /home/usr.opt/mysql57/mysql-test/r/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/r/innodb_mysql_sync.result

#
# Bug 42074 concurrent optimize table and 
# alter table = Assertion failed: thd->is_error()
#
DROP TABLE IF EXISTS t1;
# Create InnoDB table
CREATE TABLE t1 (id INT) engine=innodb;
# Connection 1
# Start optimizing table
SET DEBUG_SYNC='ha_admin_try_alter SIGNAL optimize_started WAIT_FOR table_altered';
OPTIMIZE TABLE t1;
# Connection 2
# Change table to engine=memory
SET DEBUG_SYNC='now WAIT_FOR optimize_started';
ALTER TABLE t1 engine=memory;
SET DEBUG_SYNC='now SIGNAL table_altered';
# Connection 1
# Complete optimization
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
test.t1	optimize	error	Got error -1 from storage engine
test.t1	optimize	status	Operation failed
Warnings:
Error	1030	Got error -1 from storage engine
DROP TABLE t1;
SET DEBUG_SYNC='RESET';
#
# Bug#47459 Assertion in Diagnostics_area::set_eof_status on
#           OPTIMIZE TABLE
#
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a INT) ENGINE= InnoDB;
# Connection con1
SET DEBUG_SYNC= "ha_admin_open_ltable SIGNAL opening WAIT_FOR dropped";
# Sending:
OPTIMIZE TABLE t1;
# Connection default
SET DEBUG_SYNC= "now WAIT_FOR opening";
DROP TABLE t1;
SET DEBUG_SYNC= "now SIGNAL dropped";
# Connection con1
# Reaping: OPTIMIZE TABLE t1
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
test.t1	optimize	error	Table 'test.t1' doesn't exist
test.t1	optimize	status	Operation failed
Warnings:
Error	1146	Table 'test.t1' doesn't exist
# Connection default
SET DEBUG_SYNC= "RESET";
#
# Bug#53757 assert in mysql_truncate_by_delete
#
DROP TABLE IF EXISTS t1, t2;
CREATE TABLE t1(a INT) Engine=InnoDB;
CREATE TABLE t2(id INT);
INSERT INTO t1 VALUES (1), (2);
INSERT INTO t2 VALUES(connection_id());
SET DEBUG_SYNC= "open_and_process_table SIGNAL opening WAIT_FOR killed";
# Sending: (not reaped since connection is killed later)
TRUNCATE t1;
SET DEBUG_SYNC= "now WAIT_FOR opening";
SELECT ((@id := id) - id) FROM t2;
((@id := id) - id)
0
KILL @id;
SET DEBUG_SYNC= "now SIGNAL killed";
DROP TABLE t1, t2;
SET DEBUG_SYNC= "RESET";
#
# Bug#58933 Assertion `thd- >is_error()' fails on shutdown with ongoing
#           OPTIMIZE TABLE
#
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1), (2);
# Connection con1
SET DEBUG_SYNC= 'ha_admin_open_ltable SIGNAL waiting WAIT_FOR killed';
# Sending:
OPTIMIZE TABLE t1;
# Connection default
SET DEBUG_SYNC= 'now WAIT_FOR waiting';
KILL QUERY ID;
SET DEBUG_SYNC= 'now SIGNAL killed';
# Connection con1
# Reaping: OPTIMIZE TABLE t1
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
test.t1	optimize	status	Operation failed
# Connection default
DROP TABLE t1;
SET DEBUG_SYNC= 'RESET';
#
# Bug#42230 during add index, cannot do queries on storage engines
#           that implement add_index
#
DROP DATABASE IF EXISTS db1;
DROP TABLE IF EXISTS t1;
# Test 1: Secondary index, should not block reads (original test case).
# Connection default
CREATE DATABASE db1;
CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb;
INSERT INTO db1.t1(value) VALUES (1), (2);
SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
# Sending:
ALTER TABLE db1.t1 ADD INDEX(value);
# Connection con1
SET DEBUG_SYNC= "now WAIT_FOR manage";
USE db1;
SELECT * FROM t1;
id	value
1	1
2	2
SET DEBUG_SYNC= "now SIGNAL query";
# Connection default
# Reaping: ALTER TABLE db1.t1 ADD INDEX(value)
DROP DATABASE db1;
# Test 2: Primary index (implicit), should block writes.
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
# Sending:
ALTER TABLE t1 ADD UNIQUE INDEX(a), LOCK=SHARED;
# Connection con1
SET DEBUG_SYNC= "now WAIT_FOR manage";
USE test;
SELECT * FROM t1;
a	b
# Sending:
UPDATE t1 SET a=NULL;
# Connection con2
# Waiting for SELECT to be blocked by the metadata lock on t1
SET DEBUG_SYNC= "now SIGNAL query";
# Connection default
# Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a)
# Connection con1
# Reaping: UPDATE t1 SET a=NULL
# Test 3: Primary index (explicit), should block writes.
# Connection default
ALTER TABLE t1 DROP INDEX a;
SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
# Sending:
ALTER TABLE t1 ADD PRIMARY KEY (a), LOCK=SHARED;
# Connection con1
SET DEBUG_SYNC= "now WAIT_FOR manage";
SELECT * FROM t1;
a	b
# Sending:
UPDATE t1 SET a=NULL;
# Connection con2
# Waiting for SELECT to be blocked by the metadata lock on t1
SET DEBUG_SYNC= "now SIGNAL query";
# Connection default
# Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a)
# Connection con1
# Reaping: UPDATE t1 SET a=NULL
# Test 4: Secondary unique index, should not block reads.
# Connection default
SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
# Sending:
ALTER TABLE t1 ADD UNIQUE (b);
# Connection con1
SET DEBUG_SYNC= "now WAIT_FOR manage";
SELECT * FROM t1;
a	b
SET DEBUG_SYNC= "now SIGNAL query";
# Connection default
# Reaping: ALTER TABLE t1 ADD UNIQUE (b)
SET DEBUG_SYNC= "RESET";
DROP TABLE t1;
#
# Bug#11853126 RE-ENABLE CONCURRENT READS WHILE CREATING SECONDARY INDEX
#              IN INNODB
#
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
INSERT INTO t1 VALUES (1, 12345), (2, 23456);
# Connection con1
SET SESSION debug= "+d,alter_table_rollback_new_index";
ALTER TABLE t1 ADD PRIMARY KEY(a);
ERROR HY000: Unknown error
SELECT * FROM t1;
a	b
1	12345
2	23456
# Connection default
SELECT * FROM t1;
a	b
1	12345
2	23456
DROP TABLE t1;
#
# Bug#13417754 ASSERT IN ROW_DROP_DATABASE_FOR_MYSQL DURING DROP SCHEMA
#
DROP TABLE IF EXISTS t1;
DROP DATABASE IF EXISTS db1;
CREATE TABLE t1(a int) engine=InnoDB;
CREATE DATABASE db1;
# Connection con1
SET DEBUG_SYNC= 'after_innobase_rename_table SIGNAL locked WAIT_FOR continue';
# Sending:
ALTER TABLE t1 RENAME db1.t1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# DROP DATABASE db1 should now be blocked by ALTER TABLE
# Sending:
DROP DATABASE db1;
# Connection default
# Check that DROP DATABASE is blocked by IX lock on db1
# Resume ALTER TABLE
SET DEBUG_SYNC= 'now SIGNAL continue';
# Connection con1
# Reaping: ALTER TABLE t1 RENAME db1.t1;
# Connection con2
# Reaping: DROP DATABASE db1
# Connection default;
SET DEBUG_SYNC= 'RESET';
#
# WL#5534 Online ALTER, Phase 1
#
# Multi thread tests.
# See alter_table.test for single thread tests.
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a INT PRIMARY KEY, b INT) engine=InnoDB;
INSERT INTO t1 VALUES (1,1), (2,2);
SET DEBUG_SYNC= 'RESET';
SET SESSION lock_wait_timeout= 1;
#
# 1: In-place + writes blocked.
#
# Connection default
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
SET DEBUG_SYNC= 'alter_table_inplace_before_commit SIGNAL beforecommit WAIT_FOR continue3';
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue4';
# Sending:
ALTER TABLE t1 ADD INDEX i1(b), ALGORITHM= INPLACE, LOCK= SHARED;
# Connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR opened';
# At this point, neither reads nor writes should be blocked.
SELECT * FROM t1;
a	b
1	1
2	2
INSERT INTO t1 VALUES (3,3);
SET DEBUG_SYNC= 'now SIGNAL continue1';
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
# Now both reads and writes should be blocked
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (4,4);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue2';
SET DEBUG_SYNC= 'now WAIT_FOR beforecommit';
# Still both reads and writes should be blocked.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (5,5);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue3';
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
# Same here.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (6,6);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue4';
# Connection default
# Reaping ALTER TABLE ...
SET DEBUG_SYNC= 'RESET';
DELETE FROM t1 WHERE a= 3;
#
# 2: Copy + writes blocked.
#
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue3';
# Sending:
ALTER TABLE t1 ADD INDEX i2(b), ALGORITHM= COPY, LOCK= SHARED;
# Connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR opened';
# At this point, neither reads nor writes should be blocked.
SELECT * FROM t1;
a	b
1	1
2	2
INSERT INTO t1 VALUES (3,3);
SET DEBUG_SYNC= 'now SIGNAL continue1';
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
# Now writes should be blocked, reads still allowed.
SELECT * FROM t1;
a	b
1	1
2	2
3	3
INSERT INTO t1 VALUES (4,4);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue2';
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
# Now both reads and writes should be blocked.
SELECT * FROM t1 limit 1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (5,5);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue3';
# Connection default
# Reaping ALTER TABLE ...
Warnings:
Warning	1831	Duplicate index 'i2' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
SET DEBUG_SYNC= 'RESET';
DELETE FROM t1 WHERE a= 3;
#
# 3: In-place + writes allowed.
#
# TODO: Enable this test once WL#5526 is pushed
#
# 4: In-place + reads and writes blocked.
#
# Connection default
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
SET DEBUG_SYNC= 'alter_table_inplace_before_commit SIGNAL beforecommit WAIT_FOR continue3';
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue4';
# Sending:
ALTER TABLE t1 ADD INDEX i4(b), ALGORITHM= INPLACE, LOCK= EXCLUSIVE;
# Connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR opened';
# At this point, neither reads nor writes should be blocked.
SELECT * FROM t1;
a	b
1	1
2	2
INSERT INTO t1 VALUES (3,3);
SET DEBUG_SYNC= 'now SIGNAL continue1';
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
# Now both reads and writes should be blocked.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (4,4);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue2';
SET DEBUG_SYNC= 'now WAIT_FOR beforecommit';
# Same here.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (5,5);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue3';
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
# Same here.
SELECT * FROM t1;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (6,6);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
SET DEBUG_SYNC= 'now SIGNAL continue4';
# Connection default
# Reaping ALTER TABLE ...
Warnings:
Warning	1831	Duplicate index 'i4' defined on the table 'test.t1'. This is deprecated and will be disallowed in a future release.
SET DEBUG_SYNC= 'RESET';
DROP TABLE t1;
SET DEBUG_SYNC= 'RESET';
#
#BUG#13975225:ONLINE OPTIMIZE TABLE FOR INNODB TABLES
#
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_downgrade SIGNAL downgraded WAIT_FOR continue';
#Setting up INNODB table.
CREATE TABLE t1(fld1 INT, fld2 INT, fld3 INT) ENGINE= INNODB;
INSERT INTO t1 VALUES (155, 45, 55);
#Concurrent INSERT, UPDATE, SELECT and DELETE is supported 
#during OPTIMIZE TABLE operation for INNODB tables.
connection default;
#OPTIMIZE TABLE operation.
OPTIMIZE TABLE t1;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR downgraded';
# With the patch, concurrent DML operation succeeds.
INSERT INTO t1 VALUES (10, 11, 12);
UPDATE t1 SET fld1= 20 WHERE fld1= 155;
DELETE FROM t1 WHERE fld1= 20;
SELECT * from t1;
fld1	fld2	fld3
10	11	12
SET DEBUG_SYNC= 'now SIGNAL continue';
connection default;
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
test.t1	optimize	status	OK
DROP TABLE t1;
SET DEBUG_SYNC= 'RESET';
#Concurrent INSERT, UPDATE, SELECT and DELETE is supported
#during OPTIMIZE TABLE operation for Partitioned table.
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_downgrade SIGNAL downgraded WAIT_FOR continue';
#Setup PARTITIONED table.
CREATE TABLE t1(fld1 INT) ENGINE= INNODB PARTITION BY HASH(fld1) PARTITIONS 4;
INSERT INTO t1 VALUES(10);
#OPTIMIZE TABLE operation.
OPTIMIZE TABLE t1;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR downgraded';
# With the patch, concurrent DML operation succeeds.
INSERT INTO t1 VALUES (30);
UPDATE t1 SET fld1= 20 WHERE fld1= 10;
DELETE FROM t1 WHERE fld1= 20;
SELECT * from t1;
fld1
30
SET DEBUG_SYNC= 'now SIGNAL continue';
connection default;
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
test.t1	optimize	status	OK
DROP TABLE t1;
SET DEBUG_SYNC= 'RESET';
#ALTER TABLE FORCE and ALTER TABLE ENGINE uses online rebuild
#of the table.
CREATE TABLE t1(fld1 INT, fld2 INT);
INSERT INTO t1 VALUES(10, 20);
ALTER TABLE t1 FORCE;
affected rows: 0
info: Records: 0  Duplicates: 0  Warnings: 0
ALTER TABLE t1 ENGINE=INNODB;
affected rows: 0
info: Records: 0  Duplicates: 0  Warnings: 0
#ALTER TABLE FORCE, ALTER TABLE ENGINE and OPTIMIZE TABLE uses
#table copy when the old_alter_table enabled.
SET SESSION old_alter_table= TRUE;
affected rows: 0
ALTER TABLE t1 FORCE;
affected rows: 1
info: Records: 1  Duplicates: 0  Warnings: 0
ALTER TABLE t1 ENGINE= INNODB;
affected rows: 1
info: Records: 1  Duplicates: 0  Warnings: 0
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded';
affected rows: 0
#OPTIMIZE TABLE operation using table copy.
OPTIMIZE TABLE t1;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
affected rows: 0
INSERT INTO t1 VALUES(10, 20);
affected rows: 1
connection default;
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
test.t1	optimize	status	OK
affected rows: 2
SET DEBUG_SYNC= 'RESET';
affected rows: 0
SET SESSION old_alter_table= FALSE;
affected rows: 0
#ALTER TABLE FORCE and ALTER TABLE ENGINE uses table copy
#when ALGORITHM COPY is used.
ALTER TABLE t1 FORCE, ALGORITHM= COPY;
affected rows: 2
info: Records: 2  Duplicates: 0  Warnings: 0
ALTER TABLE t1 ENGINE= INNODB, ALGORITHM= COPY;
affected rows: 2
info: Records: 2  Duplicates: 0  Warnings: 0
DROP TABLE t1;
#OPTIMIZE TABLE on a table with FULLTEXT index uses
#ALTER TABLE FORCE using COPY algorithm here. This
#test case ensures the COPY table debug sync point is hit.
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded';
#Setup a table with FULLTEXT index.
connection default;
CREATE TABLE t1(fld1 CHAR(10), FULLTEXT(fld1)) ENGINE= INNODB;
INSERT INTO t1 VALUES("String1");
#OPTIMIZE TABLE operation.
OPTIMIZE TABLE t1;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
INSERT INTO t1 VALUES("String2");
connection default;
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize, doing recreate + analyze instead
test.t1	optimize	status	OK
SET DEBUG_SYNC= 'RESET';
DROP TABLE t1;
#Test which demonstrates that ALTER TABLE, OPTIMIZE PARTITION
#takes OPTIMIZE TABLE code path, hence does an online rebuild
#of the table with the patch. 
connection default;
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_downgrade SIGNAL downgraded WAIT_FOR continue';
#Setup PARTITIONED table.
CREATE TABLE t1(fld1 INT) ENGINE= INNODB PARTITION BY HASH(fld1) PARTITIONS 4;
INSERT INTO t1 VALUES(10);
#OPTIMIZE ALL PARTITIONS operation.
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR downgraded';
# With the patch, concurrent DML operation succeeds.
INSERT INTO t1 VALUES (30);
UPDATE t1 SET fld1= 20 WHERE fld1= 10;
DELETE FROM t1 WHERE fld1= 20;
SELECT * from t1;
fld1
30
SET DEBUG_SYNC= 'now SIGNAL continue';
connection default;
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize on partitions. All partitions will be rebuilt and analyzed.
test.t1	optimize	status	OK
SET DEBUG_SYNC= 'RESET';
#OPTIMIZE PER PARTITION operation.
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_downgrade SIGNAL downgraded WAIT_FOR continue';
ALTER TABLE t1 OPTIMIZE PARTITION p0;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR downgraded';
# With the patch, concurrent DML operation succeeds.
INSERT INTO t1 VALUES (30);
UPDATE t1 SET fld1= 20 WHERE fld1= 10;
DELETE FROM t1 WHERE fld1= 20;
SELECT * from t1;
fld1
30
30
SET DEBUG_SYNC= 'now SIGNAL continue';
connection default;
Table	Op	Msg_type	Msg_text
test.t1	optimize	note	Table does not support optimize on partitions. All partitions will be rebuilt and analyzed.
test.t1	optimize	status	OK
SET DEBUG_SYNC= 'RESET';
# Test case for Bug#11938817 (ALTER BEHAVIOR DIFFERENT THEN DOCUMENTED).
# This should not do anything
ALTER TABLE t1;
affected rows: 0
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuild';
# Check that we rebuild the table
ALTER TABLE t1 engine=innodb;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR rebuild';
connection default;
SET DEBUG_SYNC= 'RESET';
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuild';
# Check that we rebuild the table
ALTER TABLE t1 FORCE;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR rebuild';
connection default;
SET DEBUG_SYNC= 'RESET';
DROP TABLE t1;
#
# BUG#20367116: ALTER TABLE BREAKS ON DELETE CASCADE FOREIGN KEY
#               CONSTRAINT
# Test case to ensure there are no orphaned rows.
# (ALTER TABLE, COPY) Algorithm.
CREATE TABLE t1(f1 INT NOT NULL, PRIMARY KEY(f1)) ENGINE=INNODB;
CREATE TABLE t2(f2 INT NOT NULL, foreign key(f2) REFERENCES t1(f1)
ON DELETE CASCADE)ENGINE=INNODB;
INSERT INTO t1 VALUES(1);
INSERT INTO t2 VALUES(1);
SET DEBUG_SYNC= 'commit_alter_copy_table SIGNAL delete_parent WAIT_FOR delete_child';
ALTER TABLE t2 ADD f3 INT NOT NULL, ALGORITHM=COPY;
connect  con1, localhost, root,,;
SET DEBUG_SYNC= 'now WAIT_FOR delete_parent';
DELETE FROM t1 WHERE f1 = 1;
# Without the patch, there is no table MDL wait, so the below
# times out.
connect  con2, localhost, root,,;
SET DEBUG_SYNC= 'now SIGNAL delete_child';
connection con1;
connection default;
# Without the patch, there will be an orphaned row in table 't2'.
SELECT * FROM t2;
f2	f3
SELECT * FROM t1;
f1
DROP TABLE t2, t1;
# Cleanup
SET DEBUG_SYNC= 'RESET';
disconnect con1;
disconnect con2;
# Test case to ensure there is no deadlock.
# (ALTER TABLE, INPLACE) algorithm.
CREATE TABLE t1(f1 INT NOT NULL, PRIMARY KEY(f1))ENGINE=INNODB;
CREATE TABLE t2(f2 INT NOT NULL, FOREIGN KEY(f2) REFERENCES t1(f1) ON DELETE CASCADE)ENGINE=INNODB;
INSERT INTO t1 VALUES(1);
INSERT INTO t2 VALUES(1);
SET DEBUG_SYNC='innodb_commit_inplace_alter_table_enter SIGNAL delete_parent WAIT_FOR alter_child';
ALTER TABLE t2 ADD f3 INT NOT NULL, ALGORITHM=INPLACE;
connect  con1, localhost, root,,;
SET DEBUG_SYNC='now WAIT_FOR delete_parent';
DELETE FROM t1 WHERE f1 = 1;
# Without the patch, there is no table MDL wait, so the below times out.
connect  con2, localhost, root,,;
SET DEBUG_SYNC='now signal alter_child';
connection con1;
# Cleanup
connection default;
DROP TABLE t2, t1;
SET DEBUG_SYNC= 'RESET';
disconnect con1;
disconnect con2;
# Test case to ensure that the parent's parent is also locked.
# (ALTER TABLE, COPY) Algorithm.
CREATE TABLE t1(f1 INT NOT NULL, PRIMARY KEY(f1)) ENGINE=INNODB;
CREATE TABLE t2(f2 INT NOT NULL, f3 INT NOT NULL, FOREIGN KEY(f2)
REFERENCES t1(f1) ON DELETE CASCADE,
PRIMARY KEY(f3))ENGINE=INNODB;
CREATE TABLE t3(f4 INT NOT NULL, FOREIGN KEY(f4) REFERENCES t2(f3)
ON DELETE CASCADE) ENGINE=INNODB;
INSERT INTO t1 VALUES(1);
INSERT INTO t2 VALUES(1, 2);
INSERT INTO t3 VALUES(2);
SET DEBUG_SYNC= 'commit_alter_copy_table SIGNAL delete_parent_parent WAIT_FOR delete_child';
ALTER TABLE t3 ADD f5 INT NOT NULL, ALGORITHM=COPY;
connect  con1, localhost, root,,;
SET DEBUG_SYNC= 'now WAIT_FOR delete_parent_parent';
DELETE FROM t1 WHERE f1 = 1;
# Without the patch, there is no table MDL wait, so the below
# times out.
connect  con2, localhost, root,,;
SET DEBUG_SYNC= 'now SIGNAL delete_child';
connection con1;
connection default;
# Without the patch, there will be an orphaned row in table 't3'.
SELECT * FROM t1;
f1
SELECT * FROM t2;
f2	f3
SELECT * FROM t3;
f4	f5
DROP TABLE t3, t2, t1;
# Cleanup
SET DEBUG_SYNC= 'RESET';
disconnect con1;
disconnect con2;
# Test case to ensure there is no deadlock by locking parent's parent.
# (ALTER TABLE, INPLACE) algorithm.
CREATE TABLE t1(f1 INT NOT NULL, PRIMARY KEY(f1))ENGINE=INNODB;
CREATE TABLE t2(f2 INT NOT NULL, f3 INT NOT NULL, FOREIGN KEY(f2)
REFERENCES t1(f1) ON DELETE CASCADE,
PRIMARY KEY(f3))ENGINE=INNODB;
CREATE TABLE t3(f4 INT NOT NULL, FOREIGN KEY(f4) REFERENCES t2(f3)
ON DELETE CASCADE) ENGINE=INNODB;
INSERT INTO t1 VALUES(1);
INSERT INTO t2 VALUES(1, 2);
INSERT INTO t3 VALUES(2);
SET DEBUG_SYNC='innodb_commit_inplace_alter_table_enter SIGNAL delete_parent_parent WAIT_FOR alter_child';
ALTER TABLE t3 ADD f3 INT NOT NULL, ALGORITHM=INPLACE;
connect  con1, localhost, root,,;
SET DEBUG_SYNC='now WAIT_FOR delete_parent_parent';
DELETE FROM t1 WHERE f1 = 1;
# Without the patch, there is no table MDL wait, so the below times out.
connect  con2, localhost, root,,;
SET DEBUG_SYNC='now signal alter_child';
connection con1;
# Cleanup
connection default;
DROP TABLE t3, t2, t1;
SET DEBUG_SYNC= 'RESET';
disconnect con1;
disconnect con2;
# Test case where ALTER is performed under LOCK TABLES.
# (ALTER TABLE, COPY) Algorithm.
CREATE TABLE t1(f1 INT NOT NULL, PRIMARY KEY(f1)) ENGINE=INNODB;
CREATE TABLE t2(f2 INT NOT NULL, FOREIGN KEY(f2) REFERENCES t1(f1)
ON DELETE CASCADE)ENGINE=INNODB;
INSERT INTO t1 VALUES(1);
INSERT INTO t2 VALUES(1);
SET DEBUG_SYNC= 'commit_alter_copy_table SIGNAL delete_parent_parent WAIT_FOR delete_child';
LOCK TABLES t2 WRITE;
ALTER TABLE t2 ADD f5 INT NOT NULL, ALGORITHM=COPY;
connect  con1, localhost, root,,;
SET DEBUG_SYNC= 'now WAIT_FOR delete_parent_parent';
DELETE FROM t1 WHERE f1 = 1;
# Without the patch, there is no table MDL wait, so the below
# times out.
connect  con2, localhost, root,,;
SET DEBUG_SYNC= 'now SIGNAL delete_child';
connection con1;
connection default;
# Without the patch, there will be an orphaned row in table 't2'.
UNLOCK TABLES;
SELECT * FROM t1;
f1
SELECT * FROM t2;
f2	f5
DROP TABLE t2, t1;
# Cleanup
SET DEBUG_SYNC= 'RESET';
disconnect con1;
disconnect con2;
# Test case where ALTER is performed under LOCK TABLES.
# (ALTER TABLE, INPLACE) algorithm.
CREATE TABLE t1(f1 INT NOT NULL, PRIMARY KEY(f1))ENGINE=INNODB;
CREATE TABLE t2(f2 INT NOT NULL, FOREIGN KEY(f2) REFERENCES t1(f1)
ON DELETE CASCADE)ENGINE=INNODB;
INSERT INTO t1 VALUES(1);
INSERT INTO t2 VALUES(1);
SET DEBUG_SYNC='innodb_commit_inplace_alter_table_enter SIGNAL delete_parent_parent WAIT_FOR alter_child';
LOCK TABLES t2 WRITE;
ALTER TABLE t2 ADD f3 INT NOT NULL, ALGORITHM=INPLACE;
connect  con1, localhost, root,,;
SET DEBUG_SYNC='now WAIT_FOR delete_parent_parent';
DELETE FROM t1 WHERE f1 = 1;
# Without the patch, there is no table MDL wait, so the below times out.
connect  con2, localhost, root,,;
SET DEBUG_SYNC='now signal alter_child';
connection con1;
# Cleanup
connection default;
UNLOCK TABLES;
DROP TABLE t2, t1;
SET DEBUG_SYNC= 'RESET';
disconnect con1;
disconnect con2;
#
# BUG#21631284: DROP VIRTUAL COLUMN RESULT IN DROP WRONG INDEX.
#
# Index is not rebuilt, since there is no change in the definition.
CREATE TABLE t1 (fld1 VARCHAR(300), fld2 INT, KEY idx1(fld2, fld1(200)))
ENGINE=InnoDB;
SET debug="+d,innodb_index_drop_count_zero";
#Without the patch, an error is reported.
ALTER TABLE t1 FORCE;
#cleanup
DROP TABLE t1;
SET debug="-d,innodb_index_drop_count_zero";
# Index is rebuilt since the index is changed from prefixed
# to non-prefixed index.
CREATE TABLE t1 (fld1 CHAR(10), KEY idx1(fld1(5))) ENGINE=InnoDB;
SET debug="+d,innodb_index_drop_count_one";
#Without the patch, an error is reported.
ALTER TABLE t1 MODIFY fld1 CHAR(5);
#cleanup
DROP TABLE t1;
SET debug="-d,innodb_index_drop_count_one";
# Coverage test cases.
# Index is rebuilt since the index is changed from non-prefixed
# to prefixed index.
CREATE TABLE t1 (fld1 CHAR(10), KEY idx1(fld1)) ENGINE=InnoDB;
SET debug="+d,innodb_index_drop_count_one";
#In case of incorrect behavior, an error is reported.
ALTER TABLE t1 MODIFY fld1 CHAR(5);
#cleanup
DROP TABLE t1;
SET debug="-d,innodb_index_drop_count_one";
# Index is not rebuilt since the index prefix length is
# the same.
CREATE TABLE t1 (fld1 CHAR(10), KEY idx1(fld1(5))) ENGINE=InnoDB;
SET debug="+d,innodb_index_drop_count_zero";
#In case of incorrect behavior, an error is reported.
ALTER TABLE t1 MODIFY fld1 CHAR(20);
#cleanup
DROP TABLE t1;
SET debug="-d,innodb_index_drop_count_zero";
#
# BUG#26848813: INDEXED COLUMN CAN'T BE CHANGED FROM VARCHAR(15)
#               TO VARCHAR(40) INSTANTANEOUSLY
CREATE TABLE t1(fld1 VARCHAR(5), KEY(fld1)) ENGINE= InnoDB;
SET DEBUG="+d,innodb_index_drop_count_zero";
# Without patch, an error is reported.
ALTER TABLE t1 MODIFY fld1 VARCHAR(7), ALGORITHM= INPLACE;
# Scenario where non-packed keys is converted to packed keys
# before the patch, an error is reported.
ALTER TABLE t1 MODIFY fld1 VARCHAR(9), ALGORITHM= INPLACE;
SET DEBUG="-d,innodb_index_drop_count_zero";
# Tests added for covering cases where rebuild is required.
# Reducing the size of the field.
ALTER TABLE t1 MODIFY fld1 VARCHAR(3), ALGORITHM= INPLACE;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
# Increasing the size of the field to boundary condition.
ALTER TABLE t1 MODIFY fld1 VARCHAR(256), ALGORITHM= INPLACE;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
DROP TABLE t1;

Man Man