1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +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

@@ -10,8 +10,8 @@ PRIMARY KEY (c1))
ENGINE = archive
DATA DIRECTORY = 'MYSQL_TMP_DIR/archive' INDEX DIRECTORY = 'MYSQL_TMP_DIR/archive';
Warnings:
Warning 1618 DATA DIRECTORY option ignored
Warning 1618 INDEX DIRECTORY option ignored
Note 1618 DATA DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
INSERT INTO t1 VALUES (NULL, "first", 1);
INSERT INTO t1 VALUES (NULL, "second", 2);
INSERT INTO t1 VALUES (NULL, "third", 3);

View File

@@ -11,7 +11,7 @@ ERROR HY000: Can't create table `test`.`t1` (errno: 2 "No such file or directory
CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
ENGINE archive DATA DIRECTORY = 'MYSQL_TMP_DIR/archive' INDEX DIRECTORY = 'MYSQL_TMP_DIR/archive';
Warnings:
Warning 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
INSERT INTO t1 VALUES (NULL, "blue");
INSERT INTO t1 VALUES (NULL, "red");
INSERT INTO t1 VALUES (NULL, "yellow");

View File

@@ -0,0 +1,5 @@
create table t1c (a int not null) engine=csv data directory='$MYSQL_TMP_DIR' index directory='$MYSQL_TMP_DIR';
Warnings:
Note 1618 DATA DIRECTORY option ignored
insert t1c values (1),(2);
drop table t1c;

View File

@@ -0,0 +1,8 @@
--source include/have_csv.inc
# not supported
evalp create table t1c (a int not null) engine=csv data directory='$MYSQL_TMP_DIR' index directory='$MYSQL_TMP_DIR';
insert t1c values (1),(2);
list_files $MYSQL_TMP_DIR t1c*;
drop table t1c;

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;

View File

@@ -10,20 +10,19 @@ SET SESSION innodb_strict_mode = ON;
SET GLOBAL innodb_file_per_table = OFF;
Warnings:
Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release
CREATE TABLE t1 (c1 INT) ENGINE = InnoDB
CREATE TABLE t1 (c1 INT, KEY(c1)) ENGINE = InnoDB
PARTITION BY HASH (c1) (
PARTITION p0
DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir',
DATA DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-data-dir'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-idx-dir',
PARTITION p1
DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'
DATA DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-data-dir'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-idx-dir'
);
ERROR HY000: Can't create table `test`.`t1` (errno: 140 "Wrong create options")
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: DATA DIRECTORY requires innodb_file_per_table.
Warning 1478 InnoDB: INDEX DIRECTORY is not supported
Error 1005 Can't create table `test`.`t1` (errno: 140 "Wrong create options")
Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB
Error 6 Error on delete of 'MYSQLD_DATADIR/test/t1.par' (Errcode: 2 "No such file or directory")
@@ -40,22 +39,22 @@ SET SESSION innodb_strict_mode = OFF;
SET GLOBAL innodb_file_per_table = ON;
Warnings:
Warning 1287 '@@innodb_file_per_table' is deprecated and will be removed in a future release
CREATE TABLE t1 (c1 INT) ENGINE = InnoDB
CREATE TABLE t1 (c1 INT, KEY(c1)) ENGINE = InnoDB
PARTITION BY HASH (c1)
(PARTITION p0
DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir',
DATA DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-data-dir'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-idx-dir',
PARTITION p1
DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-idx-dir'
DATA DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-data-dir'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-idx-dir'
);
Warnings:
Warning 1618 INDEX DIRECTORY option ignored
Warning 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
SHOW WARNINGS;
Level Code Message
Warning 1618 INDEX DIRECTORY option ignored
Warning 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
# Verifying .frm, .par, .isl & .ibd files
---- MYSQLD_DATADIR/test
db.opt
@@ -74,7 +73,8 @@ FLUSH TABLES;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) DEFAULT NULL
`c1` int(11) DEFAULT NULL,
KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`c1`)
(PARTITION `p0` DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB,
@@ -87,7 +87,8 @@ ALTER TABLE t1 engine=MyISAM;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) DEFAULT NULL
`c1` int(11) DEFAULT NULL,
KEY `c1` (`c1`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`c1`)
(PARTITION `p0` DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = MyISAM,
@@ -114,7 +115,8 @@ ALTER TABLE t1 engine=InnoDB;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) DEFAULT NULL
`c1` int(11) DEFAULT NULL,
KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`c1`)
(PARTITION `p0` DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir' ENGINE = InnoDB,

View File

@@ -2,17 +2,18 @@
# MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir
#
CREATE TABLE t (
a INT NOT NULL
a INT NOT NULL, KEY(a)
) ENGINE=INNODB
PARTITION BY HASH (a) (
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB
);
INSERT INTO t VALUES (1);
SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) NOT NULL
`a` int(11) NOT NULL,
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`a`)
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
@@ -24,7 +25,8 @@ SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
PRIMARY KEY (`a`),
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`a`)
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
@@ -33,7 +35,8 @@ ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY;
SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) NOT NULL
`a` int(11) NOT NULL,
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`a`)
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
@@ -49,7 +52,8 @@ SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
PRIMARY KEY (`a`),
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`a`)
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
@@ -68,7 +72,8 @@ SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
PRIMARY KEY (`a`),
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`a`)
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
@@ -84,7 +89,8 @@ SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
PRIMARY KEY (`a`),
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`a`)
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
@@ -100,7 +106,8 @@ SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
PRIMARY KEY (`a`),
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY HASH (`a`)
(PARTITION `p1` DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB,
@@ -109,37 +116,37 @@ DROP TABLE t;
SET @strict = @@innodb_strict_mode;
SET innodb_strict_mode=OFF;
CREATE TABLE t (
a INT NOT NULL
a INT NOT NULL, KEY(a)
) ENGINE=INNODB
PARTITION BY RANGE (a)
SUBPARTITION BY HASH (a)
SUBPARTITIONS 2
(
PARTITION p1 VALUES LESS THAN (7)
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
ENGINE = INNODB,
PARTITION p2 VALUES LESS THAN MAXVALUE
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
ENGINE = INNODB
);
Warnings:
Warning 1618 INDEX DIRECTORY option ignored
Warning 1618 INDEX DIRECTORY option ignored
Warning 1618 INDEX DIRECTORY option ignored
Warning 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
SET innodb_strict_mode=@strict;
ALTER TABLE t
REORGANIZE PARTITION p1,p2 INTO
(
PARTITION p1 VALUES LESS THAN (7)
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
ENGINE = INNODB,
PARTITION p2 VALUES LESS THAN MAXVALUE
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/'
ENGINE = INNODB
);
Warnings:
@@ -154,11 +161,12 @@ Warning 1982 INDEX DIRECTORY option ignored for InnoDB partition
SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) NOT NULL
`a` int(11) NOT NULL,
KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
PARTITION BY RANGE (`a`)
SUBPARTITION BY HASH (`a`)
SUBPARTITIONS 2
(PARTITION `p1` VALUES LESS THAN (7) DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = InnoDB,
PARTITION `p2` VALUES LESS THAN MAXVALUE DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = InnoDB)
(PARTITION `p1` VALUES LESS THAN (7) DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = InnoDB,
PARTITION `p2` VALUES LESS THAN MAXVALUE DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = InnoDB)
DROP TABLE t;

View File

@@ -54,9 +54,8 @@ SET SESSION innodb_strict_mode = ON;
--echo # InnoDB only supports DATA DIRECTORY with innodb_file_per_table=ON
--echo #
SET GLOBAL innodb_file_per_table = OFF;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
--error ER_CANT_CREATE_TABLE
eval CREATE TABLE t1 (c1 INT) ENGINE = InnoDB
evalp CREATE TABLE t1 (c1 INT, KEY(c1)) ENGINE = InnoDB
PARTITION BY HASH (c1) (
PARTITION p0
DATA DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-data-dir'
@@ -79,8 +78,7 @@ SHOW WARNINGS;
--echo #
SET SESSION innodb_strict_mode = OFF;
SET GLOBAL innodb_file_per_table = ON;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval CREATE TABLE t1 (c1 INT) ENGINE = InnoDB
evalp CREATE TABLE t1 (c1 INT, KEY(c1)) ENGINE = InnoDB
PARTITION BY HASH (c1)
(PARTITION p0
DATA DIRECTORY = '$MYSQLTEST_VARDIR/mysql-test-data-dir'

View File

@@ -8,9 +8,8 @@
mkdir $MYSQLTEST_VARDIR/tmp/partitions_here;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval CREATE TABLE t (
a INT NOT NULL
evalp CREATE TABLE t (
a INT NOT NULL, KEY(a)
) ENGINE=INNODB
PARTITION BY HASH (a) (
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB,
@@ -61,9 +60,8 @@ DROP TABLE t;
SET @strict = @@innodb_strict_mode;
SET innodb_strict_mode=OFF;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval CREATE TABLE t (
a INT NOT NULL
evalp CREATE TABLE t (
a INT NOT NULL, KEY(a)
) ENGINE=INNODB
PARTITION BY RANGE (a)
SUBPARTITION BY HASH (a)
@@ -71,11 +69,11 @@ PARTITION BY RANGE (a)
(
PARTITION p1 VALUES LESS THAN (7)
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
ENGINE = INNODB,
PARTITION p2 VALUES LESS THAN MAXVALUE
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
ENGINE = INNODB
);
SET innodb_strict_mode=@strict;
@@ -86,11 +84,11 @@ REORGANIZE PARTITION p1,p2 INTO
(
PARTITION p1 VALUES LESS THAN (7)
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
ENGINE = INNODB,
PARTITION p2 VALUES LESS THAN MAXVALUE
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/'
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/'
ENGINE = INNODB
);

View File

@@ -826,7 +826,7 @@ int ha_archive::create(const char *name, TABLE *table_arg,
#endif /* HAVE_READLINK */
{
if (create_info->data_file_name)
my_error(WARN_OPTION_IGNORED, MYF(ME_WARNING), "DATA DIRECTORY");
my_error(WARN_OPTION_IGNORED, MYF(ME_NOTE), "DATA DIRECTORY");
fn_format(name_buff, name, "", ARZ,
MY_REPLACE_EXT | MY_UNPACK_FILENAME);
@@ -834,8 +834,8 @@ int ha_archive::create(const char *name, TABLE *table_arg,
}
/* Archive engine never uses INDEX DIRECTORY. */
if (create_info->index_file_name)
my_error(WARN_OPTION_IGNORED, MYF(ME_WARNING), "INDEX DIRECTORY");
if (create_info->index_file_name && table_arg->s->keys)
my_error(WARN_OPTION_IGNORED, MYF(ME_NOTE), "INDEX DIRECTORY");
/*
There is a chance that the file was "discovered". In this case

View File

@@ -1729,6 +1729,11 @@ int ha_tina::create(const char *name, TABLE *table_arg,
}
}
if (create_info->data_file_name)
my_error(WARN_OPTION_IGNORED, ME_NOTE, "DATA DIRECTORY");
if (create_info->index_file_name && table_arg->s->keys)
my_error(WARN_OPTION_IGNORED, ME_NOTE, "INDEX DIRECTORY");
if ((create_file= mysql_file_create(csv_key_file_metadata,
fn_format(name_buff, name, "", CSM_EXT,

View File

@@ -11274,15 +11274,6 @@ create_table_info_t::create_options_are_invalid()
ret = "DATA DIRECTORY";
}
/* Do not allow INDEX_DIRECTORY */
if (m_create_info->index_file_name) {
push_warning_printf(
m_thd, Sql_condition::WARN_LEVEL_WARN,
ER_ILLEGAL_HA_CREATE_OPTION,
"InnoDB: INDEX DIRECTORY is not supported");
ret = "INDEX DIRECTORY";
}
/* Don't support compressed table when page size > 16k. */
if ((has_key_block_size || row_format == ROW_TYPE_COMPRESSED)
&& srv_page_size > UNIV_PAGE_SIZE_DEF) {
@@ -11557,15 +11548,16 @@ create_table_info_t::parse_table_name(
m_flags &= ~DICT_TF_MASK_DATA_DIR;
} else {
strncpy(m_remote_path,
strmake(m_remote_path,
m_create_info->data_file_name,
FN_REFLEN - 1);
FN_REFLEN - 2);
}
}
if (m_create_info->index_file_name) {
my_error(WARN_OPTION_IGNORED, ME_WARNING,
"INDEX DIRECTORY");
if (m_create_info->index_file_name && m_form->s->keys &&
(!(m_flags & DICT_TF_MASK_DATA_DIR) ||
strcmp(m_remote_path, m_create_info->index_file_name))) {
my_error(WARN_OPTION_IGNORED, ME_NOTE, "INDEX DIRECTORY");
}
DBUG_RETURN(0);

View File

@@ -7839,12 +7839,12 @@ int ha_rocksdb::create(const char *const name, TABLE *const table_arg,
// outside the MySQL data directory. We don't support this for MyRocks.
// The `rocksdb_datadir` setting should be used to configure RocksDB data
// directory.
DBUG_RETURN(HA_ERR_ROCKSDB_TABLE_DATA_DIRECTORY_NOT_SUPPORTED);
my_error(WARN_OPTION_IGNORED, ME_NOTE, "DATA DIRECTORY");
}
if (create_info->index_file_name) {
if (create_info->index_file_name && table_arg->s->keys) {
// Similar check for INDEX DIRECTORY as well.
DBUG_RETURN(HA_ERR_ROCKSDB_TABLE_INDEX_DIRECTORY_NOT_SUPPORTED);
my_error(WARN_OPTION_IGNORED, ME_NOTE, "INDEX DIRECTORY");
}
int err;

View File

@@ -1,16 +1,17 @@
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb DATA DIRECTORY = '/foo/bar/data';
ERROR HY000: Can't create table `test`.`t1` (errno: XXX "Unknown error XXX")
Warnings:
Note 1618 DATA DIRECTORY option ignored
show warnings;
Level Code Message
Error 1005 Can't create table `test`.`t1` (errno: XXX "Unknown error XXX")
Warning 1296 Got error XXX 'Specifying DATA DIRECTORY for an individual table is not supported.' from ROCKSDB
Note 1618 DATA DIRECTORY option ignored
drop table t1;
CREATE TABLE t1 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb INDEX DIRECTORY = '/foo/bar/index';
ERROR HY000: Can't create table `test`.`t1` (errno: XXX "Unknown error XXX")
Warnings:
Note 1618 INDEX DIRECTORY option ignored
show warnings;
Level Code Message
Error 1005 Can't create table `test`.`t1` (errno: XXX "Unknown error XXX")
Warning 1296 Got error XXX 'Specifying INDEX DIRECTORY for an individual table is not supported.' from ROCKSDB
Note 1618 INDEX DIRECTORY option ignored
drop table t1;
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY) ENGINE=rocksdb PARTITION BY RANGE (id)
(
PARTITION P0 VALUES LESS THAN (1000)
@@ -19,12 +20,14 @@ PARTITION P1 VALUES LESS THAN (2000)
DATA DIRECTORY = '/foo/bar/data/',
PARTITION P2 VALUES LESS THAN (MAXVALUE)
);
ERROR HY000: Can't create table `test`.`t1` (errno: XXX "Unknown error XXX")
Warnings:
Note 1618 DATA DIRECTORY option ignored
Note 1618 DATA DIRECTORY option ignored
show warnings;
Level Code Message
Error 1005 Can't create table `test`.`t1` (errno: XXX "Unknown error XXX")
Warning 1296 Got error XXX 'Specifying DATA DIRECTORY for an individual table is not supported.' from ROCKSDB
Error 6 Error on delete of './test/t1.par' (Errcode: 2 "No such file or directory")
Note 1618 DATA DIRECTORY option ignored
Note 1618 DATA DIRECTORY option ignored
drop table t1;
CREATE TABLE t1 (id int not null primary key) ENGINE=rocksdb PARTITION BY RANGE (id)
(
PARTITION P0 VALUES LESS THAN (1000)
@@ -33,9 +36,11 @@ PARTITION P1 VALUES LESS THAN (2000)
INDEX DIRECTORY = '/foo/bar/data/',
PARTITION P2 VALUES LESS THAN (MAXVALUE)
);
ERROR HY000: Can't create table `test`.`t1` (errno: XXX "Unknown error XXX")
Warnings:
Note 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
show warnings;
Level Code Message
Error 1005 Can't create table `test`.`t1` (errno: XXX "Unknown error XXX")
Warning 1296 Got error XXX 'Specifying INDEX DIRECTORY for an individual table is not supported.' from ROCKSDB
Error 6 Error on delete of './test/t1.par' (Errcode: 2 "No such file or directory")
Note 1618 INDEX DIRECTORY option ignored
Note 1618 INDEX DIRECTORY option ignored
drop table t1;

View File

@@ -1,5 +1,4 @@
--source include/have_rocksdb.inc
--source include/have_partition.inc
--source include/not_windows.inc
@@ -9,32 +8,18 @@
# functionality and therefore shouldn't just silently accept the values.
#
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
# On a Mac, strerror() prints "Unknown error: nn", as
# opposed to "Unknown error nn" on Linux/etc.
# Replacing 'error:' with 'error' below to make the output uniform.
--replace_regex /err(no:|or):? \d+/err\1 XXX/
--error ER_CANT_CREATE_TABLE
CREATE TABLE t1 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb DATA DIRECTORY = '/foo/bar/data';
--replace_regex /err(no:|or):? \d+/err\1 XXX/
show warnings;
drop table t1;
--replace_regex /err(no:|or):? \d+/err\1 XXX/
--error ER_CANT_CREATE_TABLE
CREATE TABLE t1 (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb INDEX DIRECTORY = '/foo/bar/index';
--replace_regex /err(no:|or):? \d+/err\1 XXX/
show warnings;
drop table t1;
#
# Verify that we'll get the same error codes when using the partitions.
#
--replace_regex /err(no:|or):? \d+/err\1 XXX/
--error ER_CANT_CREATE_TABLE
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY) ENGINE=rocksdb PARTITION BY RANGE (id)
(
PARTITION P0 VALUES LESS THAN (1000)
@@ -43,11 +28,9 @@ CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY) ENGINE=rocksdb PARTITION BY RANGE
DATA DIRECTORY = '/foo/bar/data/',
PARTITION P2 VALUES LESS THAN (MAXVALUE)
);
--replace_regex /err(no:|or):? \d+/err\1 XXX/
show warnings;
drop table t1;
--replace_regex /err(no:|or):? \d+/err\1 XXX/
--error ER_CANT_CREATE_TABLE
CREATE TABLE t1 (id int not null primary key) ENGINE=rocksdb PARTITION BY RANGE (id)
(
PARTITION P0 VALUES LESS THAN (1000)
@@ -56,5 +39,5 @@ CREATE TABLE t1 (id int not null primary key) ENGINE=rocksdb PARTITION BY RANGE
INDEX DIRECTORY = '/foo/bar/data/',
PARTITION P2 VALUES LESS THAN (MAXVALUE)
);
--replace_regex /err(no:|or):? \d+/err\1 XXX/
show warnings;
drop table t1;