mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-13671 InnoDB should use case-insensitive column name comparisons like the rest of the server
Problem affects INPLACE ALTER rename columns. innobase_rename_column_try(): some strcmp() was replaced with my_strcasecmp(), queries to update data dictionary was updated to not match column name case.
This commit is contained in:
committed by
Marko Mäkelä
parent
f0cb21ea2e
commit
03977e8273
@ -419,14 +419,109 @@ CREATE TABLE t2(c2 INT NOT NULL, FOREIGN KEY(c2) REFERENCES t1(c1))ENGINE=INNODB
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
ALTER TABLE t1 CHANGE COLUMN c1 C1 INT;
|
||||
ALTER TABLE t2 CHANGE COLUMN c2 C2 INT;
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
# FIXME: MDEV-13671 InnoDB should use case-insensitive column name comparisons
|
||||
# like the rest of the server
|
||||
#ALTER TABLE t1 CHANGE COLUMN C1 c5 INT;
|
||||
ALTER TABLE t1 CHANGE COLUMN C1 c5 INT;
|
||||
ALTER TABLE t2 CHANGE COLUMN C2 c6 INT;
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
|
||||
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||
WHERE T.NAME='test/t1';
|
||||
|
||||
SELECT F.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS F INNER JOIN
|
||||
INFORMATION_SCHEMA.INNODB_SYS_INDEXES I ON F.INDEX_ID=I.INDEX_ID INNER JOIN
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON I.TABLE_ID=T.TABLE_ID
|
||||
WHERE T.NAME='test/t1' AND I.NAME='PRIMARY';
|
||||
|
||||
SELECT C.REF_COL_NAME, C.FOR_COL_NAME FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS C INNER JOIN
|
||||
INFORMATION_SCHEMA.INNODB_SYS_FOREIGN F ON C.ID=F.ID
|
||||
WHERE F.FOR_NAME='test/t2';
|
||||
|
||||
DROP TABLE t2, t1;
|
||||
--echo # virtual columns case too
|
||||
CREATE TABLE t1 (a INT, b INT GENERATED ALWAYS AS (a) VIRTUAL) ENGINE = InnoDB;
|
||||
ALTER TABLE t1 CHANGE COLUMN a A INT;
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||
WHERE T.NAME='test/t1';
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo # different FOREIGN KEY cases
|
||||
CREATE TABLE t1 (
|
||||
a INT UNIQUE KEY,
|
||||
b INT UNIQUE KEY,
|
||||
c INT UNIQUE KEY,
|
||||
d INT UNIQUE KEY
|
||||
) ENGINE=INNODB;
|
||||
CREATE TABLE t2 (
|
||||
aa INT,
|
||||
bb INT,
|
||||
cc INT,
|
||||
dd INT
|
||||
) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO t1 VALUES (1, 1, 1, 1);
|
||||
INSERT INTO t2 VALUES (1, 1, 1, 1);
|
||||
|
||||
ALTER TABLE t1 CHANGE a A INT, ALGORITHM=INPLACE;
|
||||
ALTER TABLE t1 CHANGE c C INT, ALGORITHM=INPLACE;
|
||||
ALTER TABLE t2 CHANGE cc CC INT, ALGORITHM=INPLACE;
|
||||
ALTER TABLE t2 CHANGE dd DD INT, ALGORITHM=INPLACE;
|
||||
|
||||
SET foreign_key_checks=0;
|
||||
ALTER TABLE t2
|
||||
ADD FOREIGN KEY(aa) REFERENCES t1(a),
|
||||
ADD FOREIGN KEY(bb) REFERENCES t1(b),
|
||||
ADD FOREIGN KEY(cc) REFERENCES t1(c),
|
||||
ADD FOREIGN KEY(dd) REFERENCES t1(d),
|
||||
ALGORITHM=INPLACE;
|
||||
|
||||
ALTER TABLE t1 CHANGE b B INT, ALGORITHM=INPLACE;
|
||||
ALTER TABLE t2 CHANGE aa AA INT, ALGORITHM=INPLACE;
|
||||
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
ALTER TABLE t1 CHANGE d D INT, ALGORITHM=INPLACE;
|
||||
ALTER TABLE t2 CHANGE bb BB INT, ALGORITHM=INPLACE;
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1 WHERE a=1;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1 WHERE A=1;
|
||||
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1 WHERE b=1;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1 WHERE B=1;
|
||||
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1 WHERE c=1;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1 WHERE C=1;
|
||||
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1 WHERE d=1;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
DELETE FROM t1 WHERE D=1;
|
||||
|
||||
DROP TABLE t2, t1;
|
||||
|
||||
--echo # virtual columns case too
|
||||
CREATE TABLE t1 (a INT, b INT GENERATED ALWAYS AS (a) VIRTUAL) ENGINE = InnoDB;
|
||||
ALTER TABLE t1 CHANGE COLUMN a A INT;
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT C.NAME FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS C INNER JOIN
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES T ON C.TABLE_ID=T.TABLE_ID
|
||||
WHERE T.NAME='test/t1';
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # BUG 20029625 - HANDLE_FATAL_SIGNAL (SIG=11) IN
|
||||
|
Reference in New Issue
Block a user