polardbxengine/mysql-test/suite/parts/r/partition_basic_symlink_inn...

188 lines
5.3 KiB
Plaintext

#
# Verify that the DATA/INDEX DIR is stored and used if ALTER to MyISAM.
#
DROP TABLE IF EXISTS t1;
SET SESSION innodb_strict_mode = ON;
#
# InnoDB only supports DATA DIRECTORY with innodb_file_per_table=ON
#
SET GLOBAL innodb_file_per_table = OFF;
CREATE TABLE t1 (c1 INT) ENGINE = InnoDB
PARTITION BY HASH (c1) (
PARTITION p0
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'
);
ERROR HY000: Table storage engine for 't1' doesn't have this option
SHOW WARNINGS;
Level Code Message
Warning 1478 InnoDB: DATA DIRECTORY requires innodb_file_per_table.
Warning 1478 InnoDB: INDEX DIRECTORY is not supported
Error 1031 Table storage engine for 't1' doesn't have this option
#
# InnoDB is different from MyISAM in that instead of
# putting the file directly into the DATA DIRECTORY,
# it adds a folder under it with the name of the database.
# Since strict mode is off, InnoDB ignores the INDEX DIRECTORY
# and it is no longer part of the definition.
#
SET SESSION innodb_strict_mode = OFF;
SET GLOBAL innodb_file_per_table = ON;
CREATE TABLE t1 (c1 INT) ENGINE = InnoDB
PARTITION BY HASH (c1)
(PARTITION p0
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'
);
Warnings:
Warning 1618 <INDEX DIRECTORY> option ignored
Warning 1618 <INDEX DIRECTORY> option ignored
SHOW WARNINGS;
Level Code Message
Warning 1618 <INDEX DIRECTORY> option ignored
Warning 1618 <INDEX DIRECTORY> option ignored
# Also create a partitioned table with DATA DIRECTORY clasue at
# the table level.
CREATE TABLE t2 (c1 int) ENGINE = InnoDB
DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir'
PARTITION BY HASH (c1)
(PARTITION p0,
PARTITION p1
);
# Verifying .ibd files
---- MYSQLD_DATADIR/test
---- MYSQLTEST_VARDIR/mysql-test-data-dir/test
t1#P#p0.ibd
t1#P#p1.ibd
t2#P#p0.ibd
t2#P#p1.ibd
# The ibd tablespaces should not be directly under the DATA DIRECTORY
---- MYSQLTEST_VARDIR/mysql-test-data-dir
test
---- MYSQLTEST_VARDIR/mysql-test-idx-dir
FLUSH TABLES;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY HASH (`c1`)
(PARTITION p0 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir/' ENGINE = InnoDB,
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir/' ENGINE = InnoDB) */
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`c1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY HASH (`c1`)
(PARTITION p0 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir/' ENGINE = InnoDB,
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/mysql-test-data-dir/' ENGINE = InnoDB) */
#
# Verify how the DATA/INDEX DIRECTORY is stored and used if we
# ALTER TABLE to MyISAM.
#
ALTER TABLE t1 engine=MyISAM REMOVE PARTITIONING;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
ALTER TABLE t2 engine=MyISAM REMOVE PARTITIONING;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`c1` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
# Verifying .par and MyISAM files (.MYD, MYI)
---- MYSQLD_DATADIR/test
t1.MYD
t1.MYI
t1_XXX.sdi
t2.MYD
t2.MYI
t2_XXX.sdi
---- MYSQLTEST_VARDIR/mysql-test-data-dir
test
---- MYSQLTEST_VARDIR/mysql-test-idx-dir
#
# Now verify how the DATA DIRECTORY is used again if we
# ALTER TABLE back to InnoDB.
#
SET SESSION innodb_strict_mode = ON;
ALTER TABLE t1 engine=InnoDB;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
ALTER TABLE t2 engine=InnoDB;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`c1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
# Verifying InnoDB .ibd files
---- MYSQLD_DATADIR/test
t1.ibd
t2.ibd
---- MYSQLTEST_VARDIR/mysql-test-data-dir
test
---- MYSQLTEST_VARDIR/mysql-test-idx-dir
---- MYSQLTEST_VARDIR/mysql-test-data-dir/test
DROP TABLE t1;
DROP TABLE t2;
# Creating two non colliding tables test2.t1 and test.t1.
CREATE DATABASE test2;
USE test2;
CREATE TABLE t1 (a INT)
ENGINE = InnoDB
DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp'
PARTITION BY LIST (a) (
PARTITION p0 VALUES IN (0),
PARTITION p1 VALUES IN (1)
);
INSERT INTO t1 VALUES (0);
USE test;
CREATE TABLE t1 (a INT)
ENGINE = InnoDB
DATA DIRECTORY 'MYSQLTEST_VARDIR/tmp'
PARTITION BY LIST (a) (
PARTITION p0 VALUES IN (0),
PARTITION p1 VALUES IN (1)
);
INSERT INTO t1 VALUES (1);
ALTER TABLE test.t1 ENGINE= MyISAM REMOVE PARTITIONING;
# datadir/test:
t1.MYD
t1.MYI
t1_XXX.sdi
# datadir/test2:
ALTER TABLE test2.t1 ENGINE= MyISAM REMOVE PARTITIONING;
# datadir/test:
t1.MYD
t1.MYI
t1_XXX.sdi
# datadir/test2:
t1.MYD
t1.MYI
t1_XXX.sdi
FLUSH TABLES;
SELECT * FROM test.t1;
a
1
SELECT * FROM test2.t1;
a
0
DROP TABLE test2.t1;
DROP TABLE test.t1;
DROP DATABASE test2;
#
# Cleanup
#