1--source include/have_innodb.inc
2
3
4--echo #
5--echo # Bug#15863023 SUPPORT IN-PLACE EXTENSION OF VARCHAR COLUMN
6--echo #
7CREATE TABLE t1 (pk VARCHAR(2) PRIMARY KEY) ENGINE=InnoDB;
8CREATE TABLE t2 (fk VARCHAR(2), FOREIGN KEY (fk) REFERENCES t1 (pk))
9ENGINE=InnoDB;
10INSERT INTO t1 VALUES ('aa'), ('bb');
11INSERT INTO t2 VALUES ('aa'), ('bb');
12ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN pk pk VARCHAR(5);
13INSERT INTO t1 VALUES ('co');
14
15INSERT INTO t2 VALUES ('co');
16INSERT IGNORE INTO t2 VALUES ('code');
17ALTER TABLE t2 ALGORITHM=INPLACE, CHANGE COLUMN fk fk VARCHAR(7);
18--error ER_NO_REFERENCED_ROW_2
19INSERT INTO t2 VALUES ('code');
20--error ER_NO_REFERENCED_ROW_2
21INSERT INTO t2 VALUES ('coastal');
22--error ER_NO_REFERENCED_ROW_2
23INSERT INTO t2 VALUES ('coast');
24INSERT INTO t1 VALUES ('coast');
25--error ER_NO_REFERENCED_ROW_2
26INSERT INTO t2 VALUES ('coastal');
27INSERT INTO t2 VALUES ('coast');
28
29DROP TABLE t2, t1;
30
31CREATE TABLE t1 (pk VARCHAR(2) PRIMARY KEY) ENGINE=InnoDB;
32CREATE TABLE t2 (fk VARCHAR(2),
33CONSTRAINT fk FOREIGN KEY (fk) REFERENCES t1 (pk))
34ENGINE=InnoDB;
35INSERT INTO t1 VALUES ('aa'), ('bb');
36INSERT INTO t2 VALUES ('aa'), ('bb');
37ALTER TABLE t2 ALGORITHM=INPLACE, CHANGE COLUMN fk fk VARCHAR(6);
38ALTER TABLE t2 ALGORITHM=INPLACE, CHANGE COLUMN fk fk VARCHAR(255);
39--echo # We cannot shrink the size or cross the 256-byte boundary.
40--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
41ALTER TABLE t2 ALGORITHM=INPLACE, CHANGE COLUMN fk fk VARCHAR(6);
42--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
43ALTER TABLE t2 ALGORITHM=INPLACE, CHANGE COLUMN fk fk VARCHAR(256);
44--echo # ALGORITHM=COPY has more limitations with FOREIGN KEY.
45--error ER_FK_COLUMN_CANNOT_CHANGE
46ALTER TABLE t2 CHANGE COLUMN fk fk VARCHAR(256);
47ALTER TABLE t2 ALGORITHM=INPLACE, DROP FOREIGN KEY fk;
48ALTER TABLE t2 CHANGE COLUMN fk fk VARCHAR(256);
49ALTER TABLE t2 ALGORITHM=INPLACE, CHANGE COLUMN fk fk VARCHAR(300);
50SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
51--error ER_BLOB_KEY_WITHOUT_LENGTH
52ALTER TABLE t2 ALGORITHM=INPLACE, CHANGE COLUMN fk fk VARCHAR(99999);
53ALTER TABLE t2 ALGORITHM=INPLACE, DROP INDEX fk;
54--echo # Type change from VARCHAR to BLOB is not supported.
55--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
56ALTER TABLE t2 ALGORITHM=INPLACE, CHANGE COLUMN fk fk VARCHAR(99999);
57DROP TABLE t2, t1;
58SET sql_mode = default;
59