diff --git a/mysql-test/suite/archive/archive_no_symlink.result b/mysql-test/suite/archive/archive_no_symlink.result index ca86ae1afec..e4c4862693e 100644 --- a/mysql-test/suite/archive/archive_no_symlink.result +++ b/mysql-test/suite/archive/archive_no_symlink.result @@ -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); diff --git a/mysql-test/suite/archive/archive_symlink.result b/mysql-test/suite/archive/archive_symlink.result index 0c0cdd7c300..0cb6b3e55a0 100644 --- a/mysql-test/suite/archive/archive_symlink.result +++ b/mysql-test/suite/archive/archive_symlink.result @@ -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"); diff --git a/mysql-test/suite/csv/symlink.result b/mysql-test/suite/csv/symlink.result new file mode 100644 index 00000000000..1623cb3d7a3 --- /dev/null +++ b/mysql-test/suite/csv/symlink.result @@ -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; diff --git a/mysql-test/suite/csv/symlink.test b/mysql-test/suite/csv/symlink.test new file mode 100644 index 00000000000..5b89bee7924 --- /dev/null +++ b/mysql-test/suite/csv/symlink.test @@ -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; + diff --git a/mysql-test/suite/innodb/r/skip_symbolic_links.result b/mysql-test/suite/innodb/r/skip_symbolic_links.result index 6baac5086ff..9fd7a5796aa 100644 --- a/mysql-test/suite/innodb/r/skip_symbolic_links.result +++ b/mysql-test/suite/innodb/r/skip_symbolic_links.result @@ -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 diff --git a/mysql-test/suite/innodb/t/skip_symbolic_links.test b/mysql-test/suite/innodb/t/skip_symbolic_links.test index b5274d220c8..caccac8a50b 100644 --- a/mysql-test/suite/innodb/t/skip_symbolic_links.test +++ b/mysql-test/suite/innodb/t/skip_symbolic_links.test @@ -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; diff --git a/mysql-test/suite/parts/r/partition_basic_symlink_innodb.result b/mysql-test/suite/parts/r/partition_basic_symlink_innodb.result index 97e9bbbe24e..559acf94901 100644 --- a/mysql-test/suite/parts/r/partition_basic_symlink_innodb.result +++ b/mysql-test/suite/parts/r/partition_basic_symlink_innodb.result @@ -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, diff --git a/mysql-test/suite/parts/r/reorganize_partition_innodb.result b/mysql-test/suite/parts/r/reorganize_partition_innodb.result index b06de4c7ceb..1fc50f3ea33 100644 --- a/mysql-test/suite/parts/r/reorganize_partition_innodb.result +++ b/mysql-test/suite/parts/r/reorganize_partition_innodb.result @@ -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; diff --git a/mysql-test/suite/parts/t/partition_basic_symlink_innodb.test b/mysql-test/suite/parts/t/partition_basic_symlink_innodb.test index c0e3c21a12d..b644f421c75 100644 --- a/mysql-test/suite/parts/t/partition_basic_symlink_innodb.test +++ b/mysql-test/suite/parts/t/partition_basic_symlink_innodb.test @@ -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' diff --git a/mysql-test/suite/parts/t/reorganize_partition_innodb.test b/mysql-test/suite/parts/t/reorganize_partition_innodb.test index 77109c38c96..6d3d8d9bf91 100644 --- a/mysql-test/suite/parts/t/reorganize_partition_innodb.test +++ b/mysql-test/suite/parts/t/reorganize_partition_innodb.test @@ -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 ); diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc index 3a4d3cc0a59..75d0289d0c1 100644 --- a/storage/archive/ha_archive.cc +++ b/storage/archive/ha_archive.cc @@ -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 diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc index 4eff11f0c36..98f5a943791 100644 --- a/storage/csv/ha_tina.cc +++ b/storage/csv/ha_tina.cc @@ -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, diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 5c04302ef45..d8adc62a445 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -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); diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index a6d38a700d0..e9d5eb9e02c 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -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; diff --git a/storage/rocksdb/mysql-test/rocksdb/r/tbl_opt_data_index_dir.result b/storage/rocksdb/mysql-test/rocksdb/r/tbl_opt_data_index_dir.result index 9691eeeffdf..02479399293 100644 --- a/storage/rocksdb/mysql-test/rocksdb/r/tbl_opt_data_index_dir.result +++ b/storage/rocksdb/mysql-test/rocksdb/r/tbl_opt_data_index_dir.result @@ -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; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/tbl_opt_data_index_dir.test b/storage/rocksdb/mysql-test/rocksdb/t/tbl_opt_data_index_dir.test index e2595b10fd7..2b94aead28f 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/tbl_opt_data_index_dir.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/tbl_opt_data_index_dir.test @@ -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;