Current Path : /usr/opt/mysql57/mysql-test/suite/innodb/t/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/opt/mysql57/mysql-test/suite/innodb/t/tablespace_per_table.test |
# # A series of tests to show the correct file-per-table tablespace behavior. # See also; parts.partition_basic_symlink_innodb.test for # partition related tests with remote tablespaces. # See innodb.innodb-restart for tablespace migration tests. # --source include/have_innodb.inc --source include/have_partition.inc SET default_storage_engine=InnoDB; --echo # --echo # TABLESPACE related tests. --echo # # Set up some variables LET $MYSQLD_DATADIR = `select @@datadir`; LET $INNODB_PAGE_SIZE = `select @@innodb_page_size`; LET $data_directory_clause = DATA DIRECTORY='$MYSQL_TMP_DIR/alt_dir'; LET $index_directory_clause = INDEX DIRECTORY='$MYSQL_TMP_DIR/alt_dir'; --echo # --echo # CREATE TABLE ... INDEX DIRECTORY --echo # In non-strict mode INDEX DIRECTORY is ignored. --echo # In strict mode INDEX DIRECTORY is rejected. --echo # SET SESSION innodb_strict_mode = OFF; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE TABLE t1 (a int KEY, b text) $index_directory_clause; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; SET SESSION innodb_strict_mode = ON; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR --error ER_ILLEGAL_HA eval CREATE TABLE t1 (a int KEY, b text) $index_directory_clause; SHOW WARNINGS; --echo # --echo # Innodb does not support DATA DIRECTORY without innodb_file_per_table=ON. --echo # In non-strict mode DATA DIRECTORY is ignored. --echo # In strict mode DATA DIRECTORY without innodb_file_per_table=ON is rejected. --echo # TABLESPACE='innodb_file_per_table' overrides the innodb_file_per_table=OFF setting. --echo # SET GLOBAL innodb_file_per_table=OFF; SET SESSION innodb_strict_mode = OFF; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE TABLE t1 (a int KEY, b text) $data_directory_clause; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; SET SESSION innodb_strict_mode = ON; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR --error ER_ILLEGAL_HA eval CREATE TABLE t1 (a int KEY, b text) $data_directory_clause; SHOW WARNINGS; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE TABLE t1 (a int KEY, b text) TABLESPACE=`innodb_file_per_table` $data_directory_clause; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR SHOW CREATE TABLE t1; DROP TABLE t1; --echo # Now set innodb_file_per_table so that DATA DIRECTORY can be tested. SET GLOBAL innodb_file_per_table=ON; --echo # --echo # Create the tablespace in MYSQL_TMP_DIR/alt_dir --echo # InnoDB will create the sub-directories if needed. --echo # --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE TABLE t1 (a int KEY, b text) $data_directory_clause; SHOW WARNINGS; INSERT INTO t1 VALUES (1, 'Create the tablespace'); SELECT * FROM t1; --echo # --echo # Check if link file exists in MYSQLD_DATADIR --echo # --echo ---- MYSQLD_DATADIR/test --list_files $MYSQLD_DATADIR/test --echo # Check if tablespace file exists where we specified in DATA DIRECTORY --echo ---- MYSQL_TMP_DIR/alt_dir/test --list_files $MYSQL_TMP_DIR/alt_dir/test --echo # --echo # Check that DATA DIRECTORY shows up in the SHOW CREATE TABLE results. --echo # --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR SHOW CREATE TABLE t1; --echo # Show that the system tables have this tablespace in them correctly --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo # --echo # Show that the system tables are updated on drop table --echo # DROP TABLE t1; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo # --echo # Create the same table a second time in the same place --echo # --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE TABLE t1 (a int KEY, b text) $data_directory_clause; INSERT INTO t1 VALUES (2, 'Create the same table a second time in the same place'); SELECT * FROM t1; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR SHOW CREATE TABLE t1; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir/test --list_files $MYSQL_TMP_DIR/alt_dir/test --echo # --echo # Truncate the table, then insert and verify --echo # TRUNCATE TABLE t1; INSERT INTO t1 VALUES (3, 'Truncate the table, then insert'); SELECT * FROM t1; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir/test --list_files $MYSQL_TMP_DIR/alt_dir/test --echo # --echo # Rename the table, then insert and verify --echo # RENAME TABLE t1 TO t2; INSERT INTO t2 VALUES (4, 'Rename the table, then insert'); SELECT * FROM t2; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir/test --list_files $MYSQL_TMP_DIR/alt_dir/test --echo # --echo # CREATE TABLE LIKE does not retain DATA DIRECTORY automatically. --echo # CREATE TABLE t3 LIKE t2; INSERT INTO t3 VALUES (5, 'CREATE TABLE LIKE'); SELECT * FROM t3; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --list_files $MYSQLD_DATADIR/test --echo # --echo # Now make sure the tables can be fully dropped. --echo # DROP TABLE t2, t3; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir/test --list_files $MYSQL_TMP_DIR/alt_dir/test --echo # --echo # Be sure SQL MODE 'NO_DIR_IN_CREATE' prevents the use of DATA DIRECTORY --echo # SET @org_mode=@@sql_mode; SET @@sql_mode='NO_DIR_IN_CREATE'; SELECT @@sql_mode; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE TABLE t1 (a int, b text) $data_directory_clause; SHOW WARNINGS; INSERT INTO t1 VALUES (6, 'SQL MODE NO_DIR_IN_CREATE prevents DATA DIRECTORY'); # Checking if tablespace exists in --datadir since DATA DIRECTORY was ignored. --file_exists $MYSQLD_DATADIR/test/t1.ibd DROP TABLE t1; set @@sql_mode=@org_mode; --echo # --echo # The server does not allow any DATA DIRECTORY name to be a relative path --echo # or to be located in or under MYSQLD_DATADIR. --echo # --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR --error ER_WRONG_TABLE_NAME eval CREATE TABLE t1 (a int KEY, b text) DATA DIRECTORY './'; SHOW WARNINGS; --error ER_WRONG_TABLE_NAME eval CREATE TABLE t1 (a int KEY, b text) DATA DIRECTORY '../'; SHOW WARNINGS; --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR --error ER_WRONG_ARGUMENTS eval CREATE TABLE t1 (a int KEY, b text) DATA DIRECTORY '$MYSQLD_DATADIR'; SHOW WARNINGS; --mkdir $MYSQLD_DATADIR/under --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR --error ER_WRONG_ARGUMENTS eval CREATE TABLE t1 (a int KEY, b text) DATA DIRECTORY '$MYSQLD_DATADIR/under'; SHOW WARNINGS; --rmdir $MYSQLD_DATADIR/under --echo # --echo # TEMPORARY tables are incompatible with DATA DIRECTORY --echo # In strict mode DATA DIRECTORY is rejected. In non-strict mode it --echo # is ignored. --echo # SET SESSION innodb_strict_mode = OFF; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE TEMPORARY TABLE t1 (a int KEY, b text) engine=InnoDB $data_directory_clause; SHOW WARNINGS; SHOW CREATE TABLE t1; DROP TABLE t1; SET SESSION innodb_strict_mode = ON; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR --error ER_ILLEGAL_HA eval CREATE TEMPORARY TABLE t1 (a int KEY, b text) engine=InnoDB $data_directory_clause; SHOW WARNINGS; --echo # --echo # Create the remote table via static DDL statements in a stored procedure --echo # DELIMITER |; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE PROCEDURE static_proc() BEGIN CREATE TABLE t1 (a int KEY, b text) $data_directory_clause; END | DELIMITER ;| CALL static_proc; --source suite/innodb/include/show_i_s_tablespaces.inc INSERT INTO t1 VALUES (7, 'Create the remote table via static DDL statements'); SELECT * FROM t1; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR SHOW CREATE TABLE t1; --echo ---- MYSQLD_DATADIR/test --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir/test --list_files $MYSQL_TMP_DIR/alt_dir/test DROP PROCEDURE static_proc; DROP TABLE t1; --echo # --echo # Create the remote table via dynamic DDL statements in a stored procedure --echo # DELIMITER |; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE PROCEDURE dynamic_proc() BEGIN PREPARE stmt1 FROM "CREATE TABLE t1 (a int KEY, b text) $data_directory_clause"; EXECUTE stmt1; END | DELIMITER ;| CALL dynamic_proc; INSERT INTO t1 VALUES (8, 'Create the remote table via dynamic DDL statements'); SELECT * FROM t1; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR SHOW CREATE TABLE t1; --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir/test --list_files $MYSQL_TMP_DIR/alt_dir/test DROP PROCEDURE dynamic_proc; DEALLOCATE PREPARE stmt1; DROP TABLE t1; --echo # --echo # CREATE, DROP, ADD and TRUNCATE PARTITION with DATA DIRECTORY --echo # --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval CREATE TABLE emp ( id INT NOT NULL, store_name VARCHAR(30), parts VARCHAR(30), store_id INT ) PARTITION BY LIST(store_id) ( PARTITION east VALUES IN (10,20,30) DATA DIRECTORY = '$MYSQL_TMP_DIR/alt_dir_east', PARTITION north VALUES IN (40,50,60) DATA DIRECTORY = '$MYSQL_TMP_DIR/alt_dir_north', PARTITION west VALUES IN (70,80,100) DATA DIRECTORY = '$MYSQL_TMP_DIR/alt_dir_west' ); INSERT INTO emp values(1,'Oracle','NUTT',10); INSERT INTO emp values(2,'HUAWEI','BOLT',40); INSERT INTO emp values(3,'IBM','NAIL',70); --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR SHOW CREATE TABLE emp; SELECT * FROM emp; # InnoDB always converts table names to lower case on Windows --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir_east/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_east/test --echo ---- MYSQL_TMP_DIR/alt_dir_north/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_north/test --echo ---- MYSQL_TMP_DIR/alt_dir_west/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_west/test --echo # --echo # DROP one PARTITION. --echo # ALTER TABLE emp DROP PARTITION west; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR SHOW CREATE TABLE emp; SELECT * FROM emp; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir_east/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_east/test --echo ---- MYSQL_TMP_DIR/alt_dir_north/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_north/test --echo ---- MYSQL_TMP_DIR/alt_dir_west/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_west/test --echo # --echo # ADD the PARTITION back. --echo # --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR eval ALTER TABLE emp ADD PARTITION ( PARTITION west VALUES IN (70,80,100) DATA DIRECTORY = '$MYSQL_TMP_DIR/alt_dir_west'); INSERT INTO emp VALUES(3,'IBM','NAIL',70); SELECT * FROM emp; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir_east/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_east/test --echo ---- MYSQL_TMP_DIR/alt_dir_north/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_north/test --echo ---- MYSQL_TMP_DIR/alt_dir_west/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_west/test --echo # --echo # TRUNCATE one PARTITION. --echo # --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR ALTER TABLE emp TRUNCATE PARTITION west; --replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR SHOW CREATE TABLE emp; INSERT INTO emp VALUES(3,'IBM','NAIL',70); SELECT * FROM emp; --source suite/innodb/include/show_i_s_tables.inc --source suite/innodb/include/show_i_s_tablespaces.inc --echo ---- MYSQLD_DATADIR/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQLD_DATADIR/test --echo ---- MYSQL_TMP_DIR/alt_dir_east/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_east/test --echo ---- MYSQL_TMP_DIR/alt_dir_north/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_north/test --echo ---- MYSQL_TMP_DIR/alt_dir_west/test --replace_regex /emp#P#/emp#p#/ --list_files $MYSQL_TMP_DIR/alt_dir_west/test DROP TABLE emp; --echo # --echo # Cleanup --echo # --rmdir $MYSQL_TMP_DIR/alt_dir_east/test --rmdir $MYSQL_TMP_DIR/alt_dir_east --rmdir $MYSQL_TMP_DIR/alt_dir_north/test --rmdir $MYSQL_TMP_DIR/alt_dir_north --rmdir $MYSQL_TMP_DIR/alt_dir_west/test --rmdir $MYSQL_TMP_DIR/alt_dir_west --rmdir $MYSQL_TMP_DIR/alt_dir/test --rmdir $MYSQL_TMP_DIR/alt_dir