diff options
Diffstat (limited to 'mysql-test/t/partition_symlink.test')
-rw-r--r-- | mysql-test/t/partition_symlink.test | 95 |
1 files changed, 71 insertions, 24 deletions
diff --git a/mysql-test/t/partition_symlink.test b/mysql-test/t/partition_symlink.test index 0ca60c14c6c..e36e335c0dd 100644 --- a/mysql-test/t/partition_symlink.test +++ b/mysql-test/t/partition_symlink.test @@ -2,7 +2,9 @@ # (DATA/INDEX DIR requires symlinks) -- source include/have_partition.inc -- source include/have_symlink.inc -# remove the not_windows line after fixing bug#30459 +# remove the not_windows line after fixing bug#33687 +# symlinks must also work for files, not only directories +# as in --skip-symbolic-links -- source include/not_windows.inc -- disable_warnings DROP TABLE IF EXISTS t1; @@ -24,6 +26,7 @@ DROP DATABASE IF EXISTS mysqltest2; # files, but not the other way around (any db-user can use any # directory or file that the mysqld-process can use, via DATA/INDEX DIR) # this is the security flaw that was used in bug#32091 and bug#32111 + -- echo # Creating two non colliding tables mysqltest2.t1 and test.t1 -- echo # test.t1 have partitions in mysqltest2-directory! -- echo # user root: @@ -35,22 +38,21 @@ DROP DATABASE IF EXISTS mysqltest2; connect(con1,localhost,mysqltest_1,,); -- echo # user mysqltest_1: USE test; -let $MYSQLD_DATADIR= `select @@datadir`; - --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR + -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval CREATE TABLE t1 (a INT) PARTITION BY LIST (a) ( PARTITION p0 VALUES IN (0) - DATA DIRECTORY '$MYSQLD_DATADIR/mysqltest2' - INDEX DIRECTORY '$MYSQLD_DATADIR/mysqltest2', + DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp' + INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) - DATA DIRECTORY '$MYSQLD_DATADIR/test' - INDEX DIRECTORY '$MYSQLD_DATADIR/test', + DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp' + INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp', PARTITION p2 VALUES IN (2) ); -- echo # without the patch for bug#32091 this would create -- echo # files mysqltest2/t1.MYD + .MYI and possible overwrite -- echo # the mysqltest2.t1 table (depending on bug#32111) - --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR + -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1 VALUES (1); SELECT * FROM t1; @@ -75,43 +77,43 @@ connection default; # So it is using/blocking 2 files in (in 2 different directories -- echo # test that symlinks can not overwrite files when CREATE TABLE -- echo # user root: + CREATE DATABASE mysqltest2; USE mysqltest2; - --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR + -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR eval CREATE TABLE t1 (a INT) PARTITION BY LIST (a) ( PARTITION p0 VALUES IN (0) - DATA DIRECTORY '$MYSQLD_DATADIR/mysqltest2' - INDEX DIRECTORY '$MYSQLD_DATADIR/mysqltest2', + DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp' + INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) - DATA DIRECTORY '$MYSQLD_DATADIR/test' - INDEX DIRECTORY '$MYSQLD_DATADIR/test' + DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp' + INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp' ); connection con1; -- echo # user mysqltest_1: USE test; - --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR + -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR -- error 1,1 eval CREATE TABLE t1 (a INT) PARTITION BY LIST (a) ( PARTITION p0 VALUES IN (0) - DATA DIRECTORY '$MYSQLD_DATADIR/mysqltest2' - INDEX DIRECTORY '$MYSQLD_DATADIR/mysqltest2', + DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp' + INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) - DATA DIRECTORY '$MYSQLD_DATADIR/test' - INDEX DIRECTORY '$MYSQLD_DATADIR/test' + DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp' + INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp' ); - - --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR + -- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR -- error 1,1 eval CREATE TABLE t1 (a INT) PARTITION BY LIST (a) ( PARTITION p0 VALUES IN (0) - DATA DIRECTORY '$MYSQLD_DATADIR/test' - INDEX DIRECTORY '$MYSQLD_DATADIR/test', + DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp' + INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) - DATA DIRECTORY '$MYSQLD_DATADIR/mysqltest2' - INDEX DIRECTORY '$MYSQLD_DATADIR/mysqltest2' + DATA DIRECTORY '$MYSQLTEST_VARDIR/tmp' + INDEX DIRECTORY '$MYSQLTEST_VARDIR/tmp' ); connection default; -- echo # user root (cleanup): @@ -120,4 +122,49 @@ connection default; DROP USER mysqltest_1@localhost; disconnect con1; +# +# Bug #24633 SQL MODE "NO_DIR_IN_CREATE" does not work with partitioned tables +# + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval create table t2 (i int ) +partition by range (i) +( + partition p01 values less than (1000) + data directory="$MYSQLTEST_VARDIR/tmp" + index directory="$MYSQLTEST_VARDIR/tmp" +); + +set @org_mode=@@sql_mode; +set @@sql_mode='NO_DIR_IN_CREATE'; +select @@sql_mode; +create table t1 (i int ) +partition by range (i) +( + partition p01 values less than (1000) + data directory='/not/existing' + index directory='/not/existing' +); +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t2; +DROP TABLE t1, t2; +set @@sql_mode=@org_mode; + +# +# Bug 21350: Data Directory problems +# +-- error ER_WRONG_TABLE_NAME +create table t1 (a int) +partition by key (a) +(partition p0 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data'); + +# +# Insert a test that manages to create the first partition and fails with +# the second, ensure that we clean up afterwards in a proper manner. +# +--error ER_WRONG_TABLE_NAME +create table t1 (a int) +partition by key (a) +(partition p0, + partition p1 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data'); |