1 2--source include/have_symlink.inc 3--source include/not_windows.inc 4 5--disable_warnings 6drop table if exists t1,t2,t7,t8,t9; 7drop database if exists mysqltest; 8--enable_warnings 9 10# 11# First create little data to play with 12# 13 14create table t1 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam; 15create table t2 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam; 16insert into t1 (b) values ("test"),("test1"),("test2"),("test3"); 17insert into t2 (b) select b from t1; 18insert into t1 (b) select b from t2; 19insert into t2 (b) select b from t1; 20insert into t1 (b) select b from t2; 21insert into t2 (b) select b from t1; 22insert into t1 (b) select b from t2; 23insert into t2 (b) select b from t1; 24insert into t1 (b) select b from t2; 25insert into t2 (b) select b from t1; 26insert into t1 (b) select b from t2; 27insert into t2 (b) select b from t1; 28insert into t1 (b) select b from t2; 29insert into t2 (b) select b from t1; 30insert into t1 (b) select b from t2; 31insert into t2 (b) select b from t1; 32insert into t1 (b) select b from t2; 33insert into t2 (b) select b from t1; 34insert into t1 (b) select b from t2; 35drop table t2; 36 37# 38# Start the test 39# We use t9 here to not crash with tables generated by the backup test 40# 41 42--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 43eval create table t9 (a int not null auto_increment, b char(16) not null, primary key (a)) 44engine=myisam data directory="$MYSQLTEST_VARDIR/tmp" index directory="$MYSQLTEST_VARDIR/run"; 45 46insert into t9 select * from t1; 47check table t9; 48optimize table t9; 49repair table t9; 50alter table t9 add column c int not null; 51 52--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 53show create table t9; 54 55# Test renames 56alter table t9 rename t8, add column d int not null; 57alter table t8 rename t7; 58rename table t7 to t9; 59# Drop old t1 table, keep t9 60drop table t1; 61 62# 63# Test error handling 64# Note that we are using the above table t9 here! 65# 66 67--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 68SHOW CREATE TABLE t9; 69 70 71# Check that we cannot link over a table from another database. 72 73create database mysqltest; 74 75--error 1,1 76create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) 77engine=myisam index directory="/this-dir-does-not-exist"; 78 79# temporarily disabled as it returns different result in the embedded server 80--error ER_WRONG_TABLE_NAME 81create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) 82engine=myisam index directory="not-hard-path"; 83 84# Should fail becasue the file t9.MYI already exist in 'run' 85--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 86--error 1,1,ER_UNKNOWN_ERROR 87eval create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) 88engine=myisam index directory="$MYSQLTEST_VARDIR/run"; 89 90# Should fail becasue the file t9.MYD already exist in 'tmp' 91--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 92--error 1,1 93eval create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) 94engine=myisam data directory="$MYSQLTEST_VARDIR/tmp"; 95 96# Check moving table t9 from default database to mysqltest; 97# In this case the symlinks should be removed. 98 99alter table t9 rename mysqltest.t9; 100select count(*) from mysqltest.t9; 101--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 102show create table mysqltest.t9; 103drop database mysqltest; 104 105# 106# Test changing data dir (Bug #1662) 107# 108 109create table t1 (a int not null) engine=myisam; 110--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 111eval alter table t1 data directory="$MYSQLTEST_VARDIR/tmp"; 112--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 113show create table t1; 114alter table t1 add b int; 115--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 116eval alter table t1 data directory="$MYSQLTEST_VARDIR/log"; 117--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 118show create table t1; 119--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 120eval alter table t1 index directory="$MYSQLTEST_VARDIR/log"; 121show create table t1; 122drop table t1; 123 124# 125# BUG#32111 - Security Breach via DATA/INDEX DIRECORY and RENAME TABLE 126# 127--write_file $MYSQLTEST_VARDIR/tmp/t1.MYI 128EOF 129 130--replace_result $MYSQLTEST_VARDIR TEST_DIR $MYSQLTEST_VARDIR TEST_DIR 131--error 1,1 132eval CREATE TABLE t1(a INT) ENGINE = MYISAM 133DATA DIRECTORY='$MYSQLTEST_VARDIR/tmp' 134INDEX DIRECTORY='$MYSQLTEST_VARDIR/tmp'; 135--replace_result $MYSQLTEST_VARDIR TEST_DIR 136eval CREATE TABLE t2(a INT) ENGINE = MYISAM 137DATA DIRECTORY='$MYSQLTEST_VARDIR/tmp' 138INDEX DIRECTORY='$MYSQLTEST_VARDIR/tmp'; 139--replace_result $MYSQLTEST_VARDIR TEST_DIR 140--error 1 141RENAME TABLE t2 TO t1; 142DROP TABLE t2; 143--remove_file $MYSQLTEST_VARDIR/tmp/t1.MYI 144 145# 146# Bug#8706 - temporary table with data directory option fails 147# 148connect (session1,localhost,root,,); 149connect (session2,localhost,root,,); 150 151connection session1; 152--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 153eval create temporary table t1 (a int) engine=myisam data directory="$MYSQLTEST_VARDIR/log" select 9 a; 154# If running test suite with a non standard tmp dir, the "show create table" 155# will print "DATA_DIRECTORY=". Use replace_result to mask it out 156--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 157show create table t1; 158 159connection session2; 160--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 161eval create temporary table t1 (a int) engine=myisam data directory="$MYSQLTEST_VARDIR/log" select 99 a; 162# If running test suite with a non standard tmp dir, the "show create table" 163# will print "DATA_DIRECTORY=". Use replace_result to mask it out 164--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 165show create table t1; 166 167connection default; 168create table t1 (a int) engine=myisam select 42 a; 169 170connection session1; 171select * from t1; 172disconnect session1; 173connection session2; 174select * from t1; 175disconnect session2; 176connection default; 177select * from t1; 178drop table t1; 179 180--echo End of 4.1 tests 181 182# 183# Bug #29325: create table overwrites .MYD file of other table (datadir) 184# 185let $MYSQLD_DATADIR= `select @@datadir`; 186SET SESSION keep_files_on_create = TRUE; 187--write_file $MYSQLD_DATADIR/test/t1.MYD 188EOF 189--disable_abort_on_error 190--error 1,1,ER_TABLE_EXISTS_ERROR 191CREATE TABLE t1 (a INT) ENGINE MYISAM; 192--error 0,1 193--remove_file $MYSQLD_DATADIR/test/t1.MYD; 194--enable_abort_on_error 195SET SESSION keep_files_on_create = FALSE; 196CREATE TABLE t1 (a INT) ENGINE MYISAM; 197DROP TABLE t1; 198 199--echo End of 5.0 tests 200 201# 202# Bug#32167: another privilege bypass with DATA/INDEX DIRECTORY 203# 204# With Bug#41002 (symlink.test fails on symlinked datadir) it was 205# decided that the below statements may also succeed if the data 206# home directory is symlinked, e.g. mysql-test-run --mem. 207# This will be fixed in 6.0 only. 208# 209let $MYSQLD_DATADIR= `select @@datadir`; 210--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR 211--error 0,ER_WRONG_ARGUMENTS 212eval CREATE TABLE t1(a INT) ENGINE=MYISAM 213INDEX DIRECTORY='$MYSQLD_DATADIR/mysql'; 214--disable_warnings 215DROP TABLE IF EXISTS t1; 216--enable_warnings 217# 218--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR 219--error 0,ER_WRONG_ARGUMENTS 220eval CREATE TABLE t1(a INT) ENGINE=MYISAM 221DATA DIRECTORY='$MYSQLD_DATADIR/test'; 222--disable_warnings 223DROP TABLE IF EXISTS t1; 224--enable_warnings 225# 226--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR 227--error 0,ER_WRONG_ARGUMENTS 228eval CREATE TABLE t1(a INT) ENGINE=MYISAM 229DATA DIRECTORY='$MYSQLD_DATADIR/'; 230--disable_warnings 231DROP TABLE IF EXISTS t1; 232--enable_warnings 233# 234--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR 235--error 0,ER_WRONG_ARGUMENTS 236eval CREATE TABLE t1(a INT) ENGINE=MYISAM 237INDEX DIRECTORY='$MYSQLD_DATADIR'; 238--disable_warnings 239DROP TABLE IF EXISTS t1; 240--enable_warnings 241# 242--replace_result $MYSQLTEST_VARDIR TEST_DIR 243--error 1 244eval CREATE TABLE t1(a INT) ENGINE=MYISAM 245INDEX DIRECTORY='$MYSQLTEST_VARDIR/master-data_var'; 246 247# 248# BUG#25677 - With --skip-symbolic-links option on, DATA DIRECTORY clause is 249# silently ignored 250# 251 252SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE='NO_DIR_IN_CREATE'; 253--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 254eval CREATE TABLE t1(a INT) DATA DIRECTORY='$MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY='$MYSQLTEST_VARDIR/tmp'; 255DROP TABLE t1; 256SET @@SQL_MODE=@OLD_SQL_MODE; 257 258--echo # 259--echo # BUG#40980 - Drop table can remove another MyISAM table's 260--echo # data and index files 261--echo # 262--mkdir $MYSQL_TMP_DIR/mysql 263--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR 264eval CREATE TABLE user(a INT) ENGINE=MYISAM DATA DIRECTORY='$MYSQL_TMP_DIR/mysql' 265 INDEX DIRECTORY='$MYSQL_TMP_DIR/mysql'; 266FLUSH TABLE user; 267--echo # Symlinking mysql database to tmpdir 268--remove_file $MYSQL_TMP_DIR/mysql/user.MYD 269--remove_file $MYSQL_TMP_DIR/mysql/user.MYI 270--rmdir $MYSQL_TMP_DIR/mysql 271--exec ln -s $MYSQLD_DATADIR/mysql $MYSQL_TMP_DIR/mysql 272FLUSH TABLE mysql.user; 273DROP TABLE user; 274FLUSH TABLE mysql.user; 275--disable_result_log 276SELECT * FROM mysql.user; 277--enable_result_log 278--remove_file $MYSQL_TMP_DIR/mysql 279 280--echo End of 5.1 tests 281 282 283--echo # 284--echo # Test for bug #11759990 - "52354: 'CREATE TABLE .. LIKE ... ' 285--echo # STATEMENTS FAIL". 286--echo # 287--disable_warnings 288drop table if exists t1, t2; 289--enable_warnings 290--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 291eval create table t1 (a int primary key) engine=myisam 292 data directory="$MYSQLTEST_VARDIR/tmp" 293 index directory="$MYSQLTEST_VARDIR/run"; 294--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 295show create table t1; 296--echo # CREATE TABLE LIKE statement on table with INDEX/DATA DIRECTORY 297--echo # options should not fail. Per documentation newly created table 298--echo # should not inherit value of these options from the original table. 299create table t2 like t1; 300show create table t2; 301drop tables t1, t2; 302 303--echo # 304--echo # Test for bug #25514146 DB_NAME IS IGNORED WHEN CREATING TABLE 305--echo # WITH DATA DIRECTORY 306--echo # 307 308--echo # Make sure we have no current database 309CREATE DATABASE x; 310USE x; 311DROP DATABASE x; 312 313--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR 314eval CREATE TABLE test.t1(id INT(11)) ENGINE MYISAM 315DATA DIRECTORY "$MYSQLTEST_VARDIR/tmp"; 316 317DROP TABLE test.t1; 318