polardbxengine/mysql-test/suite/parts/inc/partition_alter_12.inc

136 lines
5.6 KiB
PHP

################################################################################
# inc/partition_alter_12.inc #
# #
# Purpose: #
# Check ALTER partitioned table and the state of the table afterwards #
# The partitioning function use the PRIMARY KEY of the table KEY() #
# #
# For partitioning methods #
# PARTITION BY KEY #
# Enable later : PARTITION BY RANGE/LIST ... SUBPARTITION BY KEY #
# do #
# 1. Create the partitioned table #
# 2. Test Alter Table that changes the key. #
# - Insert rows into t1 to fill multiple partitions. #
# - Execute the ALTER TABLE statement #
# - Check Table status #
# - [Later] Execute the usability test include/partition_check.inc #
# - Drop the table t1 #
# done #
# #
# The parameters #
# $unique -- PRIMARY KEY or UNIQUE INDEXes to be created within the #
# CREATE TABLE STATEMENT #
# $alter -- ALTER TABLE statement, which has to be executed #
# have to be set before sourcing this routine. #
# Example: #
# let $unique= , PRIMARY KEY; #
# let $alter= ALTER TABLE t1 DROP UNIQUE INDEX uidx1; #
# inc/partition_alter1.inc #
# #
# Attention: This routine is created from include/partition_alter_11.inc #
# So if something has to be changed here it might be necessary to #
# do it also there. #
#------------------------------------------------------------------------------#
# Original Author: debanerj #
# Original Date: 2015-02-16 #
# Change Author: #
# Change Date: #
# Change: #
################################################################################
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
let $partitioning= ;
--echo #----------- PARTITION BY KEY
if ($with_partitioning) {
let $partitioning= PARTITION BY KEY() PARTITIONS 5;
}
eval CREATE TABLE t1 (
$column_list
$unique
)
$partitioning;
# The common framework partition_alter_1.inc uses same value/order for all the
# columns. This makes the distribution accross partition similar even after
# changing the partition key. For testing primary key() partition and alter
# using local data.
#--source suite/parts/inc/partition_alter_1.inc
INSERT INTO t1(f_int1, f_int2) values(100, 200);
INSERT INTO t1(f_int1, f_int2) values(200, 300);
INSERT INTO t1(f_int1, f_int2) values(300, 400);
INSERT INTO t1(f_int1, f_int2) values(400, 500);
INSERT INTO t1(f_int1, f_int2) values(500, 100);
CHECK TABLE t1;
# Execute ALTER TABLE statement: Error
if ($expect_inplace_error) {
--echo Execute ALTER: Expect Error 1845
--error 1845
eval $alter;
}
# Execute ALTER TABLE statement: Success
if ($expect_inplace_error == 0) {
--echo Execute ALTER: Expect Success
eval $alter;
}
CHECK TABLE t1;
SHOW CREATE TABLE t1;
DROP TABLE t1;
# SUBPARTITION BY KEY (unlike PARTITION BY KEY) does not currently support a
# default column. Enable when SUBPARTITION BY KEY() is supported.
if (0) {
--echo #----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
if ($with_partitioning)
{
let $partitioning= PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY()
(PARTITION part1 VALUES LESS THAN (0)
(SUBPARTITION subpart11, SUBPARTITION subpart12),
PARTITION part2 VALUES LESS THAN ($max_row_div4)
(SUBPARTITION subpart21, SUBPARTITION subpart22),
PARTITION part3 VALUES LESS THAN ($max_row_div2)
(SUBPARTITION subpart31, SUBPARTITION subpart32),
PARTITION part4 VALUES LESS THAN $MAX_VALUE
(SUBPARTITION subpart41, SUBPARTITION subpart42));
}
eval CREATE TABLE t1 (
$column_list
$unique
)
$partitioning;
#Replace with local INSERT and CHECK as shown above
#--source suite/parts/inc/partition_alter_1.inc
DROP TABLE t1;
--echo #----------- PARTITION BY LIST -- SUBPARTITION BY KEY
if ($with_partitioning) {
let $partitioning= PARTITION BY LIST(ABS(MOD(f_int1,2)))
SUBPARTITION BY KEY() SUBPARTITIONS $sub_part_no
(PARTITION part1 VALUES IN (0),
PARTITION part2 VALUES IN (1),
PARTITION part3 VALUES IN (NULL));
}
eval CREATE TABLE t1 (
$column_list
$unique
)
$partitioning;
#Replace with local INSERT and CHECK as shown above
#--source suite/parts/inc/partition_alter_1.inc
DROP TABLE t1;
}