Skip to content

Commit

Permalink
MDEV-28802 DROP DATABASE in InnoDB still is case-insensitive
Browse files Browse the repository at this point in the history
innodb_drop_database(): Use explicit TO_BINARY casts on
SYS_TABLES.NAME, which for historical reasons uses the wrong collation
latin1_swedish_ci instead of BINARY.
  • Loading branch information
dr-m committed Jun 13, 2022
1 parent 65dd310 commit 1f3f457
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
16 changes: 16 additions & 0 deletions mysql-test/suite/innodb/r/dropdb_cs.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#
# MDEV-28802 DROP DATABASE in InnoDB still is case-insensitive
#
SET @save_fpt=@@GLOBAL.innodb_file_per_table;
SET GLOBAL innodb_file_per_table=0;
CREATE DATABASE Db;
CREATE TABLE Db.t1 (c1 INT KEY) ENGINE=InnoDB;
CREATE DATABASE DB;
DROP DATABASE DB;
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'D%';
NAME
Db/t1
DROP DATABASE Db;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'D%';
TABLE_ID NAME FLAG N_COLS SPACE ROW_FORMAT ZIP_PAGE_SIZE SPACE_TYPE
SET GLOBAL innodb_file_per_table=@save_fpt;
17 changes: 17 additions & 0 deletions mysql-test/suite/innodb/t/dropdb_cs.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
--source include/have_innodb.inc
--source include/have_case_sensitive_file_system.inc

--echo #
--echo # MDEV-28802 DROP DATABASE in InnoDB still is case-insensitive
--echo #

SET @save_fpt=@@GLOBAL.innodb_file_per_table;
SET GLOBAL innodb_file_per_table=0;
CREATE DATABASE Db;
CREATE TABLE Db.t1 (c1 INT KEY) ENGINE=InnoDB;
CREATE DATABASE DB;
DROP DATABASE DB;
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'D%';
DROP DATABASE Db;
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME LIKE 'D%';
SET GLOBAL innodb_file_per_table=@save_fpt;
3 changes: 2 additions & 1 deletion storage/innobase/handler/ha_innodb.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1476,7 +1476,8 @@ static void innodb_drop_database(handlerton*, char *path)
"WHILE 1 = 1 LOOP\n"
" FETCH tab INTO tid,name;\n"
" IF (SQL % NOTFOUND) THEN EXIT; END IF;\n"
" IF SUBSTR(name, 0, LENGTH(:db)) <> :db THEN EXIT; END IF;\n"
" IF TO_BINARY(SUBSTR(name, 0, LENGTH(:db))) <> TO_BINARY(:db)"
" THEN EXIT; END IF;\n"
" DELETE FROM SYS_COLUMNS WHERE TABLE_ID=tid;\n"
" DELETE FROM SYS_TABLES WHERE ID=tid;\n"
" OPEN idx;\n"
Expand Down

0 comments on commit 1f3f457

Please sign in to comment.