1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

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
This commit is contained in:
Sergei Golubchik
2025-03-29 12:13:42 +01:00
parent dc073e4c0c
commit 1a85ae444a
16 changed files with 137 additions and 132 deletions

View File

@@ -1,25 +1,30 @@
SELECT @@have_symlink;
@@have_symlink
DISABLED
CREATE TABLE t1(a INT) ENGINE=InnoDB DATA DIRECTORY 'MYSQL_TMP_DIR';
CREATE TABLE t1(a INT, KEY(a)) ENGINE=InnoDB DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR';
Warnings:
Warning 1618 DATA DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
DROP TABLE t1;
CREATE TABLE t1(a INT) ENGINE=InnoDB;
ALTER TABLE t1 DATA DIRECTORY 'MYSQL_TMP_DIR';
CREATE TABLE t1(a INT, KEY(a)) ENGINE=InnoDB;
ALTER TABLE t1 DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR';
Warnings:
Warning 1618 DATA DIRECTORY option ignored
Warning 1618 INDEX DIRECTORY option ignored
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL
`a` int(11) DEFAULT NULL,
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
DROP TABLE t1;
# restart: --symbolic-links
CREATE TABLE t1(a INT PRIMARY KEY, b INT) ENGINE=InnoDB
DATA DIRECTORY 'MYSQL_TMP_DIR';
DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR/other';
Warnings:
Note 1618 INDEX DIRECTORY option ignored
CREATE TABLE t2(a INT PRIMARY KEY, b INT) ENGINE=InnoDB
DATA DIRECTORY 'MYSQL_TMP_DIR';
DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR';
TRUNCATE TABLE t1;
TRUNCATE TABLE t2;
# restart

View File

@@ -2,13 +2,11 @@
--source include/not_windows.inc
SELECT @@have_symlink;
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
eval CREATE TABLE t1(a INT) ENGINE=InnoDB DATA DIRECTORY '$MYSQL_TMP_DIR';
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) ENGINE=InnoDB;
CREATE TABLE t1(a INT, KEY(a)) ENGINE=InnoDB;
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
eval ALTER TABLE t1 DATA DIRECTORY '$MYSQL_TMP_DIR';
evalp ALTER TABLE t1 DATA DIRECTORY '$MYSQL_TMP_DIR' INDEX DIRECTORY '$MYSQL_TMP_DIR';
SHOW CREATE TABLE t1;
DROP TABLE t1;
@@ -16,12 +14,10 @@ DROP TABLE t1;
--let $restart_parameters=--symbolic-links
--source include/restart_mysqld.inc
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
eval CREATE TABLE t1(a INT PRIMARY KEY, b INT) ENGINE=InnoDB
DATA DIRECTORY '$MYSQL_TMP_DIR';
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
eval CREATE TABLE t2(a INT PRIMARY KEY, b INT) ENGINE=InnoDB
DATA DIRECTORY '$MYSQL_TMP_DIR';
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;