DROP TABLE IF EXISTS t1; DROP DATABASE IF EXISTS mysqltest2; # # Test for WL#4445: EXCHANGE PARTITION # CREATE TABLE t1 (a INT) ENGINE = MyISAM PARTITION BY LIST (a) (PARTITION p0 VALUES IN (0) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp', PARTITION p2 VALUES IN (2)); CREATE TABLE t2 (a INT) ENGINE = MyISAM DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp'; SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY LIST (a) (PARTITION p0 VALUES IN (0) DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp' ENGINE = MyISAM, PARTITION p1 VALUES IN (1) DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp' ENGINE = MyISAM, PARTITION p2 VALUES IN (2) ENGINE = MyISAM) */ SHOW CREATE TABLE t2; Table Create Table t2 CREATE TABLE `t2` ( `a` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/tmp/' INSERT INTO t1 VALUES (0), (1), (2); ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2; ERROR HY000: Tables have different definitions ALTER TABLE t1 EXCHANGE PARTITION p2 WITH TABLE t2; ERROR HY000: Tables have different definitions SELECT * FROM t2; a DROP TABLE t1, t2; # Creating two non colliding tables mysqltest2.t1 and test.t1 # test.t1 have partitions in mysqltest2-directory! # user root: CREATE USER mysqltest_1@localhost; CREATE DATABASE mysqltest2; USE mysqltest2; CREATE TABLE t1 (a INT) ENGINE = MyISAM; INSERT INTO t1 VALUES (0); # user mysqltest_1: USE test; CREATE TABLE t1 (a INT) ENGINE = MyISAM PARTITION BY LIST (a) ( PARTITION p0 VALUES IN (0) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp', PARTITION p2 VALUES IN (2) ); # without the patch for bug#32091 this would create # files mysqltest2/t1.MYD + .MYI and possible overwrite # the mysqltest2.t1 table (depending on bug#32111) ALTER TABLE t1 REMOVE PARTITIONING; INSERT INTO t1 VALUES (1); SELECT * FROM t1; a 1 # user root: USE mysqltest2; FLUSH TABLES; # if the patch works, this should be different # and before the patch they were the same! SELECT * FROM t1; a 0 USE test; SELECT * FROM t1; a 1 DROP TABLE t1; DROP DATABASE mysqltest2; # test that symlinks can not overwrite files when CREATE TABLE # user root: CREATE DATABASE mysqltest2; USE mysqltest2; CREATE TABLE t1 (a INT) ENGINE = MyISAM PARTITION BY LIST (a) ( PARTITION p0 VALUES IN (0) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp' ); # user mysqltest_1: USE test; CREATE TABLE t1 (a INT) ENGINE = MyISAM PARTITION BY LIST (a) ( PARTITION p0 VALUES IN (0) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp' ); Got one of the listed errors CREATE TABLE t1 (a INT) ENGINE = MyISAM PARTITION BY LIST (a) ( PARTITION p0 VALUES IN (0) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp', PARTITION p1 VALUES IN (1) DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY 'MYSQLTEST_VARDIR/tmp' ); Got one of the listed errors # user root (cleanup): DROP DATABASE mysqltest2; USE test; DROP USER mysqltest_1@localhost; create table t2 (i int ) ENGINE = MyISAM 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; @@sql_mode NO_DIR_IN_CREATE create table t1 (i int ) ENGINE = MyISAM partition by range (i) ( partition p01 values less than (1000) data directory='/not/existing' index directory='/not/existing' ); Warnings: Warning 1618 option ignored Warning 1618 option ignored show create table t2; Table Create Table t2 CREATE TABLE `t2` ( `i` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (i) (PARTITION p01 VALUES LESS THAN (1000) ENGINE = MyISAM) */ DROP TABLE t1, t2; set @@sql_mode=@org_mode; create table t1 (a int) ENGINE = MyISAM partition by key (a) (partition p0 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data'); Got one of the listed errors create table t1 (a int) ENGINE = MyISAM partition by key (a) (partition p0, partition p1 DATA DIRECTORY 'part-data' INDEX DIRECTORY 'part-data'); Got one of the listed errors