mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 22:12:30 +01:00
0c8a6f6cca
Detailed revision comments: r6783 | jyang | 2010-03-09 17:54:14 +0200 (Tue, 09 Mar 2010) | 9 lines branches/5.1: Fix bug #47621 "MySQL and InnoDB data dictionaries will become out of sync when renaming columns". MySQL does not provide new column name information to storage engine to update the system table. To avoid column name mismatch, we shall just request a table copy for now. rb://246 approved by Marko.
55 lines
1.7 KiB
Text
55 lines
1.7 KiB
Text
#
|
|
# Bug#21704: Renaming column does not update FK definition.
|
|
#
|
|
|
|
# Test that it's not possible to rename columns participating in a
|
|
# foreign key (either in the referencing or referenced table).
|
|
|
|
DROP TABLE IF EXISTS t1;
|
|
DROP TABLE IF EXISTS t2;
|
|
DROP TABLE IF EXISTS t3;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ROW_FORMAT=COMPACT ENGINE=INNODB;
|
|
CREATE TABLE t2 (a INT PRIMARY KEY, b INT,
|
|
CONSTRAINT fk1 FOREIGN KEY (a) REFERENCES t1(a))
|
|
ROW_FORMAT=COMPACT ENGINE=INNODB;
|
|
CREATE TABLE t3 (a INT PRIMARY KEY, b INT, KEY(b), C INT,
|
|
CONSTRAINT fk2 FOREIGN KEY (b) REFERENCES t3 (a))
|
|
ROW_FORMAT=COMPACT ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
|
|
INSERT INTO t2 VALUES (1,1),(2,2),(3,3);
|
|
INSERT INTO t3 VALUES (1,1,1),(2,2,2),(3,3,3);
|
|
|
|
# Test renaming the column in the referenced table.
|
|
|
|
ALTER TABLE t1 CHANGE a c INT;
|
|
ERROR HY000: Error on rename of '#sql-temporary' to './test/t1' (errno: 150)
|
|
# Ensure that online column rename works.
|
|
ALTER TABLE t1 CHANGE b c INT;
|
|
affected rows: 3
|
|
info: Records: 3 Duplicates: 0 Warnings: 0
|
|
|
|
# Test renaming the column in the referencing table
|
|
|
|
ALTER TABLE t2 CHANGE a c INT;
|
|
ERROR HY000: Error on rename of '#sql-temporary' to './test/t2' (errno: 150)
|
|
# Ensure that online column rename works.
|
|
ALTER TABLE t2 CHANGE b c INT;
|
|
affected rows: 3
|
|
info: Records: 3 Duplicates: 0 Warnings: 0
|
|
|
|
# Test with self-referential constraints
|
|
|
|
ALTER TABLE t3 CHANGE a d INT;
|
|
ERROR HY000: Error on rename of '#sql-temporary' to './test/t3' (errno: 150)
|
|
ALTER TABLE t3 CHANGE b d INT;
|
|
ERROR HY000: Error on rename of '#sql-temporary' to './test/t3' (errno: 150)
|
|
# Ensure that online column rename works.
|
|
ALTER TABLE t3 CHANGE c d INT;
|
|
affected rows: 3
|
|
info: Records: 3 Duplicates: 0 Warnings: 0
|
|
|
|
# Cleanup.
|
|
|
|
DROP TABLE t3;
|
|
DROP TABLE t2;
|
|
DROP TABLE t1;
|