mariadb/mysql-test/suite/innodb/t/skip_symbolic_links.test
Sergei Golubchik 1a85ae444a MDEV-36050 DATA/INDEX DIRECTORY handling is inconsistent
consistently issue a

Note 1618 DATA DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored

in archive/csv/innodb/rocksdb whenever an option is ignored.

Note that csv doesn't say "INDEX DIRECTORY option ignored"
because it does not create index files at all anywhere.

Other engines don't say "INDEX DIRECTORY option ignored"
if the table has no indexes.

additionally InnoDB doesn't say that if INDEX DIRECTORY is
the same as DATA DIRECTORY, because in that case indexes are
technically stored in INDEX DIRECTORY.

collateral fix: use strmake to zero-terminate the string
2025-04-18 09:41:23 +02:00

47 lines
1.4 KiB
Text

--source include/have_innodb.inc
--source include/not_windows.inc
SELECT @@have_symlink;
evalp CREATE TABLE t1(a INT, KEY(a)) ENGINE=InnoDB DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR';
DROP TABLE t1;
CREATE TABLE t1(a INT, KEY(a)) ENGINE=InnoDB;
evalp ALTER TABLE t1 DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR';
SHOW CREATE TABLE t1;
DROP TABLE t1;
--let $restart_parameters=--symbolic-links
--source include/restart_mysqld.inc
evalp CREATE TABLE t1(a INT PRIMARY KEY, b INT) ENGINE=InnoDB
DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR/other';
evalp CREATE TABLE t2(a INT PRIMARY KEY, b INT) ENGINE=InnoDB
DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR';
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
--let $restart_parameters=
--source include/restart_mysqld.inc
# Native ALTER will retain DATA DIRECTORY
ALTER TABLE t1 FORCE, ALGORITHM=INPLACE;
ALTER TABLE t2 FORCE, ALGORITHM=COPY;
OPTIMIZE TABLE t1;
--list_files $MYSQL_TMP_DIR/test
DROP TABLE t2;
RENAME TABLE t1 TO t2;
ALTER TABLE t2 ADD UNIQUE INDEX(b), RENAME TO t3;
ALTER TABLE t3 RENAME TO t2;
ALTER TABLE t2 DROP INDEX b, RENAME TO t1;
ALTER TABLE t1 CHANGE b c INT;
ALTER TABLE t1 CHANGE c b INT NOT NULL;
--list_files $MYSQL_TMP_DIR/test
# TRUNCATE TABLE will discard DATA DIRECTORY.
TRUNCATE TABLE t1;
--list_files $MYSQL_TMP_DIR/test
DROP TABLE t1;