初版
This commit is contained in:
205
build/lib/mysql/mysql-test/suite/parts/inc/methods1.inc
Normal file
205
build/lib/mysql/mysql-test/suite/parts/inc/methods1.inc
Normal file
@@ -0,0 +1,205 @@
|
||||
################################################################################
|
||||
# inc/partition_methods1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Create and check partitioned tables #
|
||||
# The partitioning function use the column f_int1 #
|
||||
# #
|
||||
# For all partitioning methods #
|
||||
# PARTITION BY HASH/KEY/LIST/RANGE #
|
||||
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
|
||||
# do #
|
||||
# 1. Create the partitioned table #
|
||||
# 2 Insert the content of the table t0_template into t1 #
|
||||
# 3. Execute inc/partition_check.inc #
|
||||
# 4. Drop the table t1 #
|
||||
# done #
|
||||
# #
|
||||
# The parameter #
|
||||
# $unique -- PRIMARY KEY or UNIQUE INDEXes to be created within the #
|
||||
# CREATE TABLE STATEMENT #
|
||||
# has to be set before sourcing this routine. #
|
||||
# Example: #
|
||||
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
|
||||
# inc/partition_method1s.inc #
|
||||
# #
|
||||
# Attention: The routine inc/partition_methods2.inc is very similar #
|
||||
# to this one. So if something has to be changed here it #
|
||||
# might be necessary to do it also there #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
let $partitioning= ;
|
||||
#----------- PARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY HASH(f_int1) PARTITIONS 2;
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY KEY(f_int1) PARTITIONS 5;
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY LIST
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(MOD(f_int1,4))
|
||||
(PARTITION part_3 VALUES IN (-3),
|
||||
PARTITION part_2 VALUES IN (-2),
|
||||
PARTITION part_1 VALUES IN (-1),
|
||||
PARTITION part_N VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2),
|
||||
PARTITION part3 VALUES IN (3));
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY RANGE
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux = 'PARTITION BY RANGE(f_int1)
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN ($max_row_div2 + $max_row_div4),
|
||||
PARTITION parte VALUES LESS THAN ($max_row),
|
||||
PARTITION partf VALUES LESS THAN $MAX_VALUE)';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux =
|
||||
'PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN $MAX_VALUE)';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux = 'PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
|
||||
(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))';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
(SUBPARTITION sp11, SUBPARTITION sp12),
|
||||
PARTITION part2 VALUES IN (1)
|
||||
(SUBPARTITION sp21, SUBPARTITION sp22),
|
||||
PARTITION part3 VALUES IN (2)
|
||||
(SUBPARTITION sp31, SUBPARTITION sp32),
|
||||
PARTITION part4 VALUES IN (NULL)
|
||||
(SUBPARTITION sp41, SUBPARTITION sp42));
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux =
|
||||
'PARTITION BY LIST(ABS(MOD(f_int1,2)))
|
||||
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS $sub_part_no
|
||||
(PARTITION part1 VALUES IN (0),
|
||||
PARTITION part2 VALUES IN (1),
|
||||
PARTITION part3 VALUES IN (NULL))';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
@@ -0,0 +1,261 @@
|
||||
################################################################################
|
||||
# t/partition_blocked_sql_funcs_main.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests around sql functions #
|
||||
# #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: HH #
|
||||
# Original Date: 2006-11-22 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--echo -------------------------------------------------------------------------
|
||||
--echo --- All SQL functions should be rejected, otherwise BUG (see 18198)
|
||||
--echo -------------------------------------------------------------------------
|
||||
|
||||
let $sqlfunc = ascii(col1);
|
||||
let $valsqlfunc = ascii('a');
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = ord(col1);
|
||||
let $valsqlfunc = ord('a');
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = greatest(col1,15);
|
||||
let $valsqlfunc = greatest(1,15);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = isnull(col1);
|
||||
let $valsqlfunc = isnull(15);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = least(col1,15);
|
||||
let $valsqlfunc = least(15,30);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = case when col1>15 then 20 else 10 end;
|
||||
let $valsqlfunc = case when 1>30 then 20 else 15 end;
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = ifnull(col1,30);
|
||||
let $valsqlfunc = ifnull(1,30);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = nullif(col1,30);
|
||||
let $valsqlfunc = nullif(1,30);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = bit_length(col1);
|
||||
let $valsqlfunc = bit_length(255);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = char_length(col1);
|
||||
let $valsqlfunc = char_length('a');
|
||||
#let $coltype = int;
|
||||
#--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = character_length(col1);
|
||||
let $valsqlfunc = character_length('a');
|
||||
let $coltype = char(30)
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = find_in_set(col1,'1,2,3,4,5,6,7,8,9');
|
||||
let $valsqlfunc = find_in_set('i','a,b,c,d,e,f,g,h,i');
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = instr(col1,'acb');
|
||||
let $valsqlfunc = instr('i','a,b,c,d,e,f,g,h,i');
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = length(col1);
|
||||
let $valsqlfunc = length('a,b,c,d,e,f,g,h,i');
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = locate('a',col1);
|
||||
let $valsqlfunc = locate('i','a,b,c,d,e,f,g,h,i');
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = octet_length(col1);
|
||||
let $valsqlfunc = octet_length('a,b,c,d,e,f,g,h,i');
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = position('a' in col1);
|
||||
let $valsqlfunc = position('i' in 'a,b,c,d,e,f,g,h,i');
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = strcmp(col1,'acb');
|
||||
let $valsqlfunc = strcmp('i','a,b,c,d,e,f,g,h,i');
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = crc32(col1);
|
||||
let $valsqlfunc = crc32('a,b,c,d,e,f,g,h,i');
|
||||
let $coltype = char(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = round(col1);
|
||||
let $valsqlfunc = round(15);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = sign(col1);
|
||||
let $valsqlfunc = sign(123);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = period_add(col1,5);
|
||||
let $valsqlfunc = period_add(9804,5);
|
||||
let $coltype = datetime;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = period_diff(col1,col2);
|
||||
let $valsqlfunc = period_diff(9809,199907);
|
||||
let $coltype = datetime,col2 datetime;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
let $coltype = int,col2 int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = timestampdiff(day,5,col1);
|
||||
let $valsqlfunc = timestampdiff(YEAR,'2002-05-01','2001-01-01');
|
||||
let $coltype = datetime;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
################################################################################
|
||||
# After the fix for bug #42849 the server behavior does not fit into this test's
|
||||
# architecture: for UNIX_TIMESTAMP() some of the queries in
|
||||
# suite/parts/inc/partition_blocked_sql_funcs.inc will fail with a different
|
||||
# error (ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR) and some will succeed where
|
||||
################################################################################
|
||||
#let $sqlfunc = unix_timestamp(col1);
|
||||
#let $valsqlfunc = unix_timestamp ('2002-05-01');
|
||||
#let $coltype = date;
|
||||
#--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = week(col1);
|
||||
let $valsqlfunc = week('2002-05-01');
|
||||
let $coltype = datetime;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = weekofyear(col1);
|
||||
let $valsqlfunc = weekofyear('2002-05-01');
|
||||
let $coltype = datetime;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = cast(col1 as signed);
|
||||
let $valsqlfunc = cast(123 as signed);
|
||||
let $coltype = varchar(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = convert(col1,unsigned);
|
||||
let $valsqlfunc = convert(123,unsigned);
|
||||
let $coltype = varchar(30);
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = col1 | 20;
|
||||
let $valsqlfunc = 10 | 20;
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = col1 & 20;
|
||||
let $valsqlfunc = 10 & 20;
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = col1 ^ 20;
|
||||
let $valsqlfunc = 10 ^ 20;
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = col1 << 20;
|
||||
let $valsqlfunc = 10 << 20;
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = col1 >> 20;
|
||||
let $valsqlfunc = 10 >> 20;
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = ~col1;
|
||||
let $valsqlfunc = ~20;
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = bit_count(col1);
|
||||
let $valsqlfunc = bit_count(20);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = inet_aton(col1);
|
||||
let $valsqlfunc = inet_aton('192.168.1.1');
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
set @var =20;
|
||||
let $sqlfunc = bit_length(col1)+@var-@var;
|
||||
let $valsqlfunc = bit_length(20)+@var-@var;
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
|
||||
|
||||
delimiter //;
|
||||
create function getmaxsigned_t1(col int) returns int
|
||||
begin
|
||||
declare done int default 0;
|
||||
declare v4 int;
|
||||
declare max int;
|
||||
declare cur1 cursor for
|
||||
select col from t1;
|
||||
declare continue handler for sqlstate '01000' set done = 1;
|
||||
declare continue handler for sqlstate '02000' set done = 1;
|
||||
open cur1;
|
||||
set max = 0;
|
||||
fetch cur1 into v4;
|
||||
wl_loop: WHILE NOT done DO
|
||||
fetch cur1 into v4;
|
||||
IF v4 > max
|
||||
then set max = v4;
|
||||
END IF;
|
||||
END WHILE wl_loop;
|
||||
close cur1;
|
||||
return max;
|
||||
end//
|
||||
delimiter ;//
|
||||
|
||||
let $sqlfunc = getmaxsigned_t1(col1);
|
||||
let $valsqlfunc = getmaxsigned(10);
|
||||
let $coltype = int;
|
||||
--source suite/parts/inc/partition_blocked_sql_funcs.inc
|
||||
drop function if exists getmaxsigned_t1;
|
||||
@@ -0,0 +1,60 @@
|
||||
################################################################################
|
||||
# t/part_supported_sql_funcs_delete.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Delete access of the tests frame for allowed sql functions #
|
||||
# #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: HH #
|
||||
# Original Date: 2006-11-22 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
--echo -------------------------------------------------------------------------
|
||||
--echo --- Delete rows and partitions of tables with $sqlfunc
|
||||
--echo -------------------------------------------------------------------------
|
||||
|
||||
eval delete from $t1 where col1=$val2;
|
||||
eval delete from $t2 where col1=$val2;
|
||||
eval delete from $t3 where col1=$val2;
|
||||
eval delete from $t4 where col1=$val2;
|
||||
eval delete from $t5 where col1=$val2;
|
||||
eval delete from $t6 where col1=$val2;
|
||||
|
||||
eval select * from $t1 order by col1;
|
||||
eval select * from $t2 order by col1;
|
||||
eval select * from $t3 order by col1;
|
||||
eval select * from $t4 order by colint;
|
||||
eval select * from $t5 order by colint;
|
||||
|
||||
eval insert into $t1 values ($val2);
|
||||
eval insert into $t2 values ($val2);
|
||||
eval insert into $t3 values ($val2);
|
||||
eval insert into $t4 values (60,$val2);
|
||||
eval insert into $t5 values (60,$val2);
|
||||
eval insert into $t6 values (60,$val2);
|
||||
|
||||
eval select * from $t1 order by col1;
|
||||
eval select * from $t2 order by col1;
|
||||
eval select * from $t3 order by col1;
|
||||
eval select * from $t4 order by colint;
|
||||
eval select * from $t5 order by colint;
|
||||
eval select * from $t6 order by colint;
|
||||
|
||||
if (!$drop_partition_not_supported)
|
||||
{
|
||||
eval alter table $t1 drop partition p0;
|
||||
eval alter table $t2 drop partition p0;
|
||||
eval alter table $t4 drop partition p0;
|
||||
eval alter table $t5 drop partition p0;
|
||||
eval alter table $t6 drop partition p0;
|
||||
|
||||
eval select * from $t1 order by col1;
|
||||
eval select * from $t2 order by col1;
|
||||
eval select * from $t3 order by col1;
|
||||
eval select * from $t4 order by colint;
|
||||
eval select * from $t5 order by colint;
|
||||
eval select * from $t6 order by colint;
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
################################################################################
|
||||
# t/partition_supported_sql_funcs_main.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests which SQL functions are allowed in partinioning clauses. #
|
||||
# #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: HH #
|
||||
# Original Date: 2006-11-22 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
# #
|
||||
# This test uses a test frame (partition_supported_sql_funcs.inc) for every #
|
||||
# SQL function allowed in the partitioning parts of CREATE and ALTE TABLE. #
|
||||
# The variales represent the #
|
||||
# - SQL function isself with a column (sqlfunc) and a literal (valsqlsunc), #
|
||||
# - the type of the column (coltype), #
|
||||
# - a file with test values of the coltype (infile) and #
|
||||
# - single test values (val1 to val4). #
|
||||
# The test frame includes CREATE/ALTER TABLE and some access statements. #
|
||||
# Column types are int, float(7,4), char(1), date and time depending on the #
|
||||
# SQL function. The test frame uses the include file #
|
||||
# "part_supported_sql_funcs_delete.inc" testing the deletion of #
|
||||
# partitions. #
|
||||
# The CREATE and ALTER TABLE statement do not cover the complete partitions #
|
||||
# functions, but will ashure that the SQL functions are basically working. #
|
||||
################################################################################
|
||||
|
||||
|
||||
let $sqlfunc = abs(col1);
|
||||
let $valsqlfunc = abs(15);
|
||||
let $coltype = int;
|
||||
let $infile = part_supported_sql_funcs_int_int.inc;
|
||||
let $val1 = 5 ;
|
||||
let $val2 = 13 ;
|
||||
let $val3 = 17 ;
|
||||
let $val4 = 15 ;
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = mod(col1,10);
|
||||
let $valsqlfunc = mod(15,10);
|
||||
let $coltype = int;
|
||||
let $infile = part_supported_sql_funcs_int_int.inc;
|
||||
let $val1 = 5;
|
||||
let $val2 = 19;
|
||||
let $val3 = 17;
|
||||
let $val4 = 15 ;
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = day(col1);
|
||||
let $valsqlfunc = day('2006-12-21');
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-02-03';
|
||||
let $val2 = '2006-01-17';
|
||||
let $val3 = '2006-01-25';
|
||||
let $val4 = '2006-02-05';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = dayofmonth(col1);
|
||||
let $valsqlfunc = dayofmonth('2006-12-24');
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-02-03';
|
||||
let $val2 = '2006-01-17';
|
||||
let $val3 = '2006-01-25';
|
||||
let $val4 = '2006-02-05';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = dayofweek(col1);
|
||||
let $valsqlfunc = dayofweek('2006-12-24');
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-01-03';
|
||||
let $val2 = '2006-02-17';
|
||||
let $val3 = '2006-01-25';
|
||||
let $val4 = '2006-02-05';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = dayofyear(col1);
|
||||
let $valsqlfunc = dayofyear('2006-12-25');
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-01-03';
|
||||
let $val2 = '2006-01-17';
|
||||
let $val3 = '2006-02-25';
|
||||
let $val4 = '2006-02-05';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
# Disabled after fixing bug#54483.
|
||||
#let $coltype = char(30);
|
||||
#--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = extract(month from col1);
|
||||
let $valsqlfunc = extract(year from '1998-11-23');
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-01-03';
|
||||
let $val2 = '2006-02-17';
|
||||
let $val3 = '2006-01-25';
|
||||
let $val4 = '2006-02-05';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = hour(col1);
|
||||
let $valsqlfunc = hour('18:30');
|
||||
let $coltype = time;
|
||||
let $infile = part_supported_sql_funcs_int_time.inc;
|
||||
let $val1 = '09:09';
|
||||
let $val2 = '14:30';
|
||||
let $val3 = '21:59';
|
||||
let $val4 = '10:30';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = microsecond(col1);
|
||||
let $valsqlfunc = microsecond('10:30:10.000010');
|
||||
let $coltype = time;
|
||||
let $infile = part_supported_sql_funcs_int_time.inc;
|
||||
let $val1 = '09:09:15.000002';
|
||||
let $val2 = '04:30:01.000018';
|
||||
let $val3 = '00:59:22.000024';
|
||||
let $val4 = '05:30:34.000037';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = minute(col1);
|
||||
let $valsqlfunc = minute('18:30');
|
||||
let $coltype = time;
|
||||
let $val1 = '09:09:15';
|
||||
let $val2 = '14:30:45';
|
||||
let $val3 = '21:59:22';
|
||||
let $val4 = '10:24:23';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = second(col1);
|
||||
let $valsqlfunc = second('18:30:14');
|
||||
let $coltype = time;
|
||||
let $infile = part_supported_sql_funcs_int_time.inc;
|
||||
let $val1 = '09:09:09';
|
||||
let $val2 = '14:30:20';
|
||||
let $val3 = '21:59:22';
|
||||
let $val4 = '10:22:33';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
# second(non_time_col) is disabled after bug#54483.
|
||||
#let $coltype = char(30);
|
||||
#--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = month(col1);
|
||||
let $valsqlfunc = month('2006-10-14');
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-01-03';
|
||||
let $val2 = '2006-12-17';
|
||||
let $val3 = '2006-05-25';
|
||||
let $val4 = '2006-11-06';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = quarter(col1);
|
||||
let $valsqlfunc = quarter('2006-10-14');
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-01-03';
|
||||
let $val2 = '2006-12-17';
|
||||
let $val3 = '2006-09-25';
|
||||
let $val4 = '2006-07-30';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = time_to_sec(col1)-(time_to_sec(col1)-20);
|
||||
let $valsqlfunc = time_to_sec('18:30:14')-(time_to_sec('17:59:59'));
|
||||
let $coltype = time;
|
||||
let $infile = part_supported_sql_funcs_int_time.inc;
|
||||
let $val1 = '09:09:15';
|
||||
let $val2 = '14:30:45';
|
||||
let $val3 = '21:59:22';
|
||||
let $val4 = '10:33:11';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
# to_days(non_date_col) is disabled after bug#54483.
|
||||
#let $sqlfunc = to_days(col1)-to_days('2006-01-01');
|
||||
#let $valsqlfunc = to_days('2006-02-02')-to_days('2006-01-01');
|
||||
#let $coltype = date;
|
||||
#let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
#let $val1 = '2006-02-03';
|
||||
#let $val2 = '2006-01-17';
|
||||
#let $val3 = '2006-01-25';
|
||||
#let $val4 = '2006-02-06';
|
||||
#--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
# to_days(non_date_col) is disabled after bug#54483.
|
||||
# DATEDIFF() is implemented as (TO_DAYS(d1) - TO_DAYS(d2))
|
||||
#let $sqlfunc = datediff(col1, '2006-01-01');
|
||||
#let $valsqlfunc = datediff('2006-02-02', '2006-01-01');
|
||||
#let $coltype = date;
|
||||
#let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
#let $val1 = '2006-02-03';
|
||||
#let $val2 = '2006-01-17';
|
||||
#let $val3 = '2006-01-25';
|
||||
#let $val4 = '2006-02-06';
|
||||
#--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = weekday(col1);
|
||||
let $valsqlfunc = weekday('2006-10-14');
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-12-03';
|
||||
let $val2 = '2006-11-17';
|
||||
let $val3 = '2006-05-25';
|
||||
let $val4 = '2006-02-06';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = year(col1)-1990;
|
||||
let $valsqlfunc = year('2005-10-14')-1990;
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '1996-01-03';
|
||||
let $val2 = '2000-02-17';
|
||||
let $val3 = '2004-05-25';
|
||||
let $val4 = '2002-02-15';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
|
||||
let $sqlfunc = yearweek(col1)-200600;
|
||||
let $valsqlfunc = yearweek('2006-10-14')-200600;
|
||||
let $coltype = date;
|
||||
let $infile = part_supported_sql_funcs_int_date.inc;
|
||||
let $val1 = '2006-01-03';
|
||||
let $val2 = '2006-08-17';
|
||||
let $val3 = '2006-03-25';
|
||||
let $val4 = '2006-11-15';
|
||||
--source suite/parts/inc/partition_supported_sql_funcs.inc
|
||||
445
build/lib/mysql/mysql-test/suite/parts/inc/partition.pre
Normal file
445
build/lib/mysql/mysql-test/suite/parts/inc/partition.pre
Normal file
@@ -0,0 +1,445 @@
|
||||
################################################################################
|
||||
# inc/partition.pre #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Auxiliary script creating prerequisites needed by the partitioning tests #
|
||||
# The name of the toplevel scripts sourcing this one is #
|
||||
# t/partition_<feature>_<storage engine>.test #
|
||||
# #
|
||||
# Several parameters have to be set before this file is sourced. #
|
||||
# Please refer to the README. #
|
||||
# #
|
||||
# The README for the partitioning testcases is at the end of this file. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: mleich #
|
||||
# Change Date: 2007-10-08 #
|
||||
# Change: Minor cleanup and fix for #
|
||||
# Bug#31243 Test "partition_basic_myisam" truncates path names#
|
||||
# - Blow column file_list up to VARBINARY(10000) #
|
||||
# - remove reference to fixed bugs #17455, #19305 #
|
||||
################################################################################
|
||||
|
||||
# Set the session storage engine
|
||||
eval SET @@session.storage_engine = $engine;
|
||||
|
||||
##### Disabled/affected testcases, because of open bugs #####
|
||||
# --echo
|
||||
# --echo #------------------------------------------------------------------------
|
||||
# --echo # There are several testcases disabled because of the open bugs
|
||||
# if (`SELECT @@session.storage_engine IN('ndbcluster')`)
|
||||
# {
|
||||
# --echo # #18730
|
||||
# }
|
||||
# --echo #------------------------------------------------------------------------
|
||||
# # Attention: Only bugs appearing in all storage engines should be mentioned above.
|
||||
# # The top level test wrapper (example: t/partition_basic_ndb.test)
|
||||
# # may set the $fixed_bug<nnnnn> variable to 0 after sourcing
|
||||
# # this file.
|
||||
# # Bug#18730: Partitions: NDB, crash on SELECT MIN(<unique column>)
|
||||
# # Attention: NDB testcases set this variable later to 0
|
||||
# let $fixed_bug18730= 1;
|
||||
|
||||
--echo
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 0. Setting of auxiliary variables + Creation of an auxiliary tables
|
||||
--echo # needed in many testcases
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Set the variable $no_debug depending on the current value of $debug;
|
||||
--disable_query_log
|
||||
eval SET @aux = $debug;
|
||||
let $no_debug= `SELECT @aux = 0`;
|
||||
--enable_query_log
|
||||
if ($debug)
|
||||
{
|
||||
--echo # Attention: Script debugging is swiched on.
|
||||
--echo # - all statements will be protocolled
|
||||
--echo # - some additional will be executed
|
||||
--echo # It is to be expected, that we get huge differences.
|
||||
}
|
||||
|
||||
let $ER_DUP_KEY= 1022;
|
||||
let $ER_GET_ERRNO= 1030;
|
||||
let $ER_BAD_NULL_ERROR= 1048;
|
||||
let $ER_DUP_ENTRY= 1062;
|
||||
let $ER_PARSE_ERROR= 1064;
|
||||
let $ER_TOO_MANY_PARTITIONS_ERROR= 1499;
|
||||
let $ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF= 1503;
|
||||
let $ER_NO_PARTS_ERROR= 1504;
|
||||
let $ER_DROP_PARTITION_NON_EXISTENT= 1507;
|
||||
let $ER_SAME_NAME_PARTITION= 1517;
|
||||
let $ER_NO_PARTITION_FOR_GIVEN_VALUE= 1526;
|
||||
|
||||
# Set the variable $engine_other to a storage engine <> $engine
|
||||
--disable_query_log
|
||||
eval SELECT UPPER($engine) = 'MEMORY' INTO @aux;
|
||||
let $aux= `SELECT @aux`;
|
||||
if ($aux)
|
||||
{
|
||||
let $engine_other= 'MyISAM';
|
||||
}
|
||||
if (!$aux)
|
||||
{
|
||||
let $engine_other= 'MEMORY';
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
# Numbers used for
|
||||
# - partitioning Example: ... PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
# - INSERT/SELECT/UPDATE/DELETE Example: ... WHERE f_int1 > @max_row_div3
|
||||
let $max_row= `SELECT @max_row`;
|
||||
SELECT @max_row DIV 2 INTO @max_row_div2;
|
||||
let $max_row_div2= `SELECT @max_row_div2`;
|
||||
SELECT @max_row DIV 3 INTO @max_row_div3;
|
||||
let $max_row_div3= `SELECT @max_row_div3`;
|
||||
SELECT @max_row DIV 4 INTO @max_row_div4;
|
||||
let $max_row_div4= `SELECT @max_row_div4`;
|
||||
SET @max_int_4 = 2147483647;
|
||||
let $max_int_4= `SELECT @max_int_4`;
|
||||
|
||||
# Three insert statements used in many testcases.
|
||||
let $insert_first_half= INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div2 - 1;
|
||||
let $insert_second_half= INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN @max_row_div2 AND @max_row;
|
||||
#
|
||||
let $insert_first_third= INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 1 AND @max_row_div3 - 1;
|
||||
let $insert_second_third= INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN @max_row_div3 AND 2 * @max_row_div3 - 1;
|
||||
let $insert_third_third= INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template
|
||||
WHERE f_int1 BETWEEN 2 * @max_row_div3 AND @max_row;
|
||||
#
|
||||
let $insert_all= INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
|
||||
# Column list with definition for all tables to be checked
|
||||
let $column_list= f_int1 INTEGER,
|
||||
f_int2 INTEGER,
|
||||
f_char1 CHAR(20),
|
||||
f_char2 CHAR(20),
|
||||
f_charbig VARCHAR(1000);
|
||||
|
||||
# Currently (April 2006) the default compiled NDB cannot manage
|
||||
# no_of_partitions (no subpartitioning) > 8
|
||||
# no_of_partitions * no_of_subpartitions > 8
|
||||
# This NDB specific limitation will cause
|
||||
# 1005: Can't create table 'test.t1' (errno: 1224)
|
||||
# in partition_methods[1|2].inc and partition_alter_1[1|3].inc
|
||||
# when $sub_part_no is set to >= 3.
|
||||
let $sub_part_no= 3;
|
||||
if (`SELECT @@session.storage_engine = 'ndbcluster'`)
|
||||
{
|
||||
let $sub_part_no= 2;
|
||||
}
|
||||
|
||||
# Auxiliary table used for many experiments (INSERT INTO t1 ... SELECT ...)
|
||||
# on the tables to be checked
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t0_template;
|
||||
--enable_warnings
|
||||
eval CREATE TABLE t0_template (
|
||||
$column_list ,
|
||||
PRIMARY KEY(f_int1))
|
||||
ENGINE = MEMORY;
|
||||
--echo # Logging of <max_row> INSERTs into t0_template suppressed
|
||||
--disable_query_log
|
||||
let $num= `SELECT @max_row`;
|
||||
while ($num)
|
||||
{
|
||||
eval INSERT INTO t0_template
|
||||
SET f_int1 = $num, f_int2 = $num, f_char1 = '$num', f_char2 = '$num',
|
||||
f_charbig = '===$num===';
|
||||
|
||||
dec $num;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
# Auxiliary table used for comparisons of table definitions and file lists
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t0_definition;
|
||||
--enable_warnings
|
||||
CREATE TABLE t0_definition (
|
||||
state CHAR(3),
|
||||
create_command VARBINARY(5000),
|
||||
file_list VARBINARY(10000),
|
||||
PRIMARY KEY (state)
|
||||
) ENGINE = MEMORY;
|
||||
|
||||
# Auxiliary table used for trigger experiments
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t0_aux;
|
||||
--enable_warnings
|
||||
eval CREATE TABLE t0_aux ( $column_list )
|
||||
ENGINE = MEMORY;
|
||||
|
||||
# Prevent that a change of defaults breaks the tests.
|
||||
SET AUTOCOMMIT= 1;
|
||||
SET @@session.sql_mode= '';
|
||||
|
||||
--echo # End of basic preparations needed for all tests
|
||||
--echo #-----------------------------------------------
|
||||
|
||||
if (0)
|
||||
{
|
||||
# README for the partioning tests (t/partition_<feature>_<engine>.test)
|
||||
# ========================================================================
|
||||
#
|
||||
# 1. Explanation of the variables to be assigned in the top-level storage engine
|
||||
# specific scripts
|
||||
#------------------------------------------------------------------------------#
|
||||
#
|
||||
# Options, for mostly test(script+logic+result) debugging support:
|
||||
# $debug= 0 (default)
|
||||
# --> The protocolling of auxiliary stuff is suppressed.
|
||||
# The file with expected results fits to this setting.
|
||||
# $debug= 1
|
||||
# --> All executed statements will be printed into the protocol.
|
||||
# That means statements which
|
||||
# - are most time of low interest and do auxiliary stuff
|
||||
# like generating the next SQL statement to be executed
|
||||
# - additional statements giving informations about table
|
||||
# contents or the value of some variables
|
||||
# You will get huge differences, because the file with the
|
||||
# expected results was created with $debug = 0 .
|
||||
#
|
||||
# $with_partitioning= 1 (default)
|
||||
# --> Do the test with really partitioned tables.
|
||||
# $with_partitioning= 0
|
||||
# --> Do not use partitioned tables. This means omit the
|
||||
# "PARTITION BY ... SUBPARTITION BY ..." part of the CREATE TABLE
|
||||
# statement. This setting has only an effect on tests where
|
||||
# partition_methods1.inc and/or partition_methods2.inc are sourced.
|
||||
#
|
||||
# You will get differences when the CREATE TABLE statements
|
||||
# and table related files are printed or testcases check
|
||||
# partition borders, but most server responses and result
|
||||
# sets should be usable as reference for the test with the
|
||||
# partioned tables.
|
||||
# Please make a run with $with_partitioning= 0, whenever
|
||||
# - you do not trust the scripts (routines checking server codes/
|
||||
# result sets)
|
||||
# - fear that there is a new bug affecting partitioned and non
|
||||
# partitioned tables
|
||||
#
|
||||
#
|
||||
# Execute the test of "table" files
|
||||
# $do_file_tests= 1 (default for
|
||||
# - all storage engines within the extended QA test
|
||||
# - only MyISAM within the main regression tests)
|
||||
# --> Collect the file list and compare the file list before and after
|
||||
# OPTIMIZE/REPAIR/TRUNCATE
|
||||
# $do_file_tests= 0 (default for non MyISAM storage engines within the
|
||||
# main regression tests)
|
||||
# --> Do not collect the file list.
|
||||
# Only MyISAM has files per PARTITION/SUBPARTITION, PRIMARY KEY, INDEX, ..
|
||||
# There is a low probability that this tests detects bugs when used in
|
||||
# connection with other storage engines.
|
||||
#
|
||||
# Option, for displaying files:
|
||||
# $ls= 1 (default)
|
||||
# --> Display the table related directory content via
|
||||
# "ls $MYSQLTEST_VARDIR/mysqld.1/data/test/t1*"
|
||||
# if these informations were collected.
|
||||
# This is probably not portable to some OS.
|
||||
# $ls= 0
|
||||
# --> Omit displaying the directory
|
||||
#
|
||||
#
|
||||
# Number of rows for the INSERT/UPDATE/DELETE/SELECT experiments
|
||||
# on partitioned tables:
|
||||
# @max_row is the number of rows which will be filled into the auxiliary
|
||||
# MEMORY table t0_template. This table is used for INSERT ... SELECT
|
||||
# experiments. The typical test table t1 contains most of the time
|
||||
# about @max_row DIV 2 rows.
|
||||
# Too small values of @max_row should be avoided, because some statements
|
||||
# should affect several rows and partitions.
|
||||
# Too big values of @max_row should be avoided, because of runtime issues.
|
||||
# @max_row= 20 (default for the main regression tests)
|
||||
# The file with expected results fits to this amount of rows.
|
||||
# @max_row= 300 (default for extended QA test)
|
||||
# --> Use <number rows>.
|
||||
# There should be only a few systematic differences to the file
|
||||
# with expected results, because most SQL statements use @max_row and
|
||||
# variables like max_row_div2 instead of a constant with the actual
|
||||
# number of rows.
|
||||
# I assume a value of 300 rows should be
|
||||
#
|
||||
#
|
||||
# Perform the variant with extended tests:
|
||||
# $more_trigger_tests, $more_pk_ui_tests(PK=PRIMARY KEY,UI=UNIQUE INDEX),
|
||||
# =0 (default for the main regression tests)
|
||||
# - There is a very low probability, that the omitted tests reveal a
|
||||
# bug which cannot be detected with the other tests.
|
||||
# - Limiting the partitioning tests solves issues with runtime and
|
||||
# protocol size.
|
||||
# =1 (default for extended QA test)
|
||||
#
|
||||
#
|
||||
# Perform PRIMARY KEY specific tests:
|
||||
# $do_pk_tests= 0;
|
||||
# --> Do not execute the PRIMARY KEY related tests.
|
||||
# $do_pk_tests= 1 (default for extended QA test)
|
||||
# --> Execute the PRIMARY KEY related tests.
|
||||
# The default setting for the main regression tests depends on the
|
||||
# storage engine. The PRIMARY KEY tests must be executed for every storage
|
||||
# engine, where the existence of a PRIMARY KEY affects the kind how the
|
||||
# table rows are stored.
|
||||
# Examples for the main rgression tests:
|
||||
# InnoDB - The PRIMARY KEY is a clustered index where the data for the
|
||||
# rows are stored. $do_pk_tests= 1
|
||||
# NDB - The PRIMARY KEY is used for implicit partitioning (NDB).
|
||||
# $do_pk_tests= 1
|
||||
# MyISAM - AFAIK there is no effect on the tree containing the rows.
|
||||
# $do_pk_tests= 0
|
||||
#
|
||||
# Assign a big number smaller than the maximum value for partitions
|
||||
# and smaller than the maximum value of SIGNED INTEGER
|
||||
# The NDB handler only supports 32 bit integers in VALUES
|
||||
# 2147483647 seems to be too big.
|
||||
# $MAX_VALUE= (2147483646);
|
||||
#
|
||||
#
|
||||
# 2. Typical architecture of a test:
|
||||
#------------------------------------------------------------------------------#
|
||||
# 2.1. storage engine specific script on top level
|
||||
# (t/partition_<feature>_<engine>.test)
|
||||
# a) General not engine specific settings and requirements
|
||||
# $debug, $ls, @max_row, $more_trigger_tests, .....
|
||||
# --source inc/have_partition.inc
|
||||
# b) Engine specific settings and requirements
|
||||
# $do_pk_tests, $MAX_VALUE, $engine
|
||||
# SET SESSION storage_engine
|
||||
# $engine_other
|
||||
# c) Generate the prerequisites ($variables, @variables, tables) needed
|
||||
# via
|
||||
# --source inc/partition.pre
|
||||
# d) Set "fixed_bug<number>" variables to 1 if there are open engine
|
||||
# specific bugs which need worarounds.
|
||||
# e) Execute the feature specific testscript via
|
||||
# --source inc/partition_<feature>.inc
|
||||
# f) Perform a cleanup by removing all objects created within the tests
|
||||
# --source inc/partition_cleanup.inc
|
||||
#
|
||||
# 2.2. script generating the prerequisites needed in all tests
|
||||
# (inc/partition.pre)
|
||||
# a) Message about open bugs causing that
|
||||
# - some testcases are disabled
|
||||
# - it cannot be avoided that the file with expected results suffers
|
||||
# from open bugs
|
||||
# This should not occur often !
|
||||
# Example: There is extreme often an auxiliary testscript sourced,
|
||||
# but the the conditions vary. We get under a certain combination
|
||||
# of conditions a wrong result set or server response.
|
||||
# b) Set "fixed_bug<number>" variables to 0 if there are open engine
|
||||
# specific bugs. They are later set to 1 within the toplevel script.
|
||||
# Set "fixed_bug<number>" variables to 1 if there are open NOT engine
|
||||
# specific bugs.
|
||||
# c) Setting of auxiliary variables
|
||||
# d) Creation of auxiliary tables ....
|
||||
#
|
||||
# 2.3. script checking a feature
|
||||
# (inc/partition_<feature.inc>.inc)
|
||||
# Example:
|
||||
# a) "set/compute" a CREATE TABLE t1 .. and an ALTER TABLE ... statement
|
||||
# b) CREATE TABLE t1 ...
|
||||
# c) INSERT INTO t1 (.....) SELECT .... FROM t0_template WHERE ...
|
||||
# The first 50 % of all t0_template rows will be inserted into t1.
|
||||
# d) ALTER TABLE t1 (Example: ADD/DROP UNIQUE INDEX)
|
||||
# e) INSERT INTO t1 (.....) SELECT .... FROM t0_template WHERE ...
|
||||
# The second 50 % of all t0_template rows will be inserted into t1.
|
||||
# Now t1 and t0_template should have the same content.
|
||||
# f) Check the "usability" of the current table t1
|
||||
# via
|
||||
# --source inc/partition_check.pre
|
||||
# g) DROP TABLE t1
|
||||
# Switch to other CREATE and ALTER statements and run sequence a)-g) again
|
||||
# ...
|
||||
#
|
||||
# 2.4. script checking if a certain table shows the expected behaviour
|
||||
# ("usability" check): inc/partition_check.inc
|
||||
# - SELECT/INSERT/UPDATE/DELETE affecting single and multiple records
|
||||
# - check of values of special interest like NULL etc.
|
||||
# - INSERT/UPDATE with BEFORE/AFTER triggers
|
||||
# - violations of UNIQUE constraints, if there are any defined
|
||||
# - transactions ...
|
||||
# - TRUNCATE/OPTIMIZE/..
|
||||
# - ...
|
||||
#
|
||||
#
|
||||
# 2.5. There are some auxiliary scripts with sub tests where we cannot predict
|
||||
# if we get an error and if we get one, which one.
|
||||
# Example: INSERT a record where the value for a certain column equals
|
||||
# some existing record.
|
||||
# Depending on existing/not existing PRIMARY KEYs, UNIQUE INDEXes
|
||||
# the response might be "no error", ER_DUP_KEY, ER_DUP_ENTRY.
|
||||
# Our requirements:
|
||||
# 1. We cannot abort whenever get an error message from the server.
|
||||
# 2. We want the exact server message into the protocol.
|
||||
# 3. We want abort testing if we know that a certain error must not happen.
|
||||
# Common but unusable Solutions:
|
||||
# a) --error 0, ER_DUP_KEY, ER_DUP_ENTRY
|
||||
# <statment>
|
||||
# We get no error message even if the statement fails.
|
||||
# b) --error ER_DUP_KEY, ER_DUP_ENTRY
|
||||
# <statment>
|
||||
# We might get "got one of the expected errors".
|
||||
# There are situations where the statement must be successful.
|
||||
# c) --disable_abort_on_error
|
||||
# <statment>
|
||||
# --enable_abort_on_error
|
||||
# And nothing extra
|
||||
# We do not abort in case of unexpected server errors.
|
||||
#
|
||||
# Final solution:
|
||||
# --disable_abort_on_error
|
||||
# <statment>
|
||||
# --enable_abort_on_error
|
||||
# Check via error number if the error is not totally unexpected.
|
||||
# The sub tests use $ER_DUP_KEY, $ER_DUP_ENTRY, etc.
|
||||
# Assignment of values happen in this file.
|
||||
#
|
||||
#
|
||||
# 3. How to analyze a partitioning bug revealed with these tests/ How to build
|
||||
# a small replay script from the monstrous protocols ?
|
||||
#------------------------------------------------------------------------------#
|
||||
# a) crash -- use the file var/mysqld.1/data/mysql/general_log.CSV
|
||||
# b) no crash, but unexpected server response (there is no "reject file)
|
||||
# -- use the file r/<testcase>.log
|
||||
# Please be aware that the option $debug= 0 suppresses the
|
||||
# protocolling of some queries.
|
||||
# c) no crash, but unexpected result set
|
||||
# -- use the file r/<testcase>.reject
|
||||
# Please be aware that the option $debug= 0 suppresses the
|
||||
# protocolling of some queries.
|
||||
# In most cases you will find that the r/<testcase>.<log/reject> contains at
|
||||
# least a line "# # check <something>: 0".
|
||||
# That means that a check within inc/partition_check did not got the
|
||||
# expected result.
|
||||
# A good start for a replay script would be
|
||||
# 1. Copy t/partition_<feature>_<engine>.test to t/my_test.test
|
||||
# 2. Edit t/my_test.test
|
||||
# - set $debug to 1
|
||||
# - replace the line
|
||||
# "--source inc/partition_<feature>.inc"
|
||||
# with all statements between the last
|
||||
# CREATE TABLE t1 statement (included this)
|
||||
# and the line
|
||||
# "# Start usability test (inc/partition_check.inc)"
|
||||
# - add the content of inc/partition_check.inc at the end.
|
||||
#
|
||||
# Please excuse that the partitioning tests generate such huge protocols which
|
||||
# and are not very handy when it comes to bug analysis. I tried to squeez out
|
||||
# as much test coverage as possible by writing some hopefully smart routines
|
||||
# and reusing them in various combinations.
|
||||
#
|
||||
# Matthias
|
||||
#
|
||||
}
|
||||
67
build/lib/mysql/mysql-test/suite/parts/inc/partition_10.inc
Normal file
67
build/lib/mysql/mysql-test/suite/parts/inc/partition_10.inc
Normal file
@@ -0,0 +1,67 @@
|
||||
# inc/partition_10.inc
|
||||
#
|
||||
# Do some basic checks on a table.
|
||||
#
|
||||
# FIXME: Do not write the statements and results, if SQL return code = 0
|
||||
# and result set like expected. Write a message, that all is like
|
||||
# expected instead.
|
||||
#
|
||||
# All SELECTs are so written, that we get my_value = 1, when everything
|
||||
# is like expected.
|
||||
#
|
||||
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
|
||||
####### Variations with multiple records
|
||||
# Select on empty table
|
||||
SELECT COUNT(*) = 0 AS my_value FROM t1;
|
||||
# (mass) Insert of $max_row records
|
||||
eval INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN 1 AND $max_row;
|
||||
# Select
|
||||
eval SELECT (COUNT(*) = $max_row) AND (MIN(f1) = 1) AND (MAX(f1) = $max_row)
|
||||
AS my_value FROM t1;
|
||||
# DEBUG SELECT COUNT(*),MIN(f1),MAX(f1) FROM t1;
|
||||
# (mass) Update $max_row_div4 * 2 + 1 records
|
||||
eval UPDATE t1 SET f1 = f1 + $max_row
|
||||
WHERE f1 BETWEEN $max_row_div2 - $max_row_div4 AND $max_row_div2 + $max_row_div4;
|
||||
# Select
|
||||
eval SELECT (COUNT(*) = $max_row) AND (MIN(f1) = 1) AND (MAX(f1) = $max_row_div2 + $max_row_div4 + $max_row )
|
||||
AS my_value FROM t1;
|
||||
# DEBUG SELECT COUNT(*),MIN(f1),MAX(f1) FROM t1;
|
||||
# (mass) Delete $max_row_div4 * 2 + 1 records
|
||||
eval DELETE FROM t1
|
||||
WHERE f1 BETWEEN $max_row_div2 - $max_row_div4 + $max_row AND $max_row_div2 + $max_row_div4 + $max_row;
|
||||
# Select
|
||||
eval SELECT (COUNT(*) = $max_row - $max_row_div4 - $max_row_div4 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = $max_row)
|
||||
AS my_value FROM t1;
|
||||
# DEBUG SELECT COUNT(*),MIN(f1),MAX(f1) FROM t1;
|
||||
|
||||
####### Variations with single records
|
||||
# Insert one record at beginning
|
||||
INSERT INTO t1 SET f1 = 0 , f2 = '#######';
|
||||
# Select this record
|
||||
SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
|
||||
# Insert one record at end
|
||||
eval INSERT INTO t1 SET f1 = $max_row + 1, f2 = '#######';
|
||||
# Select this record
|
||||
eval SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = $max_row + 1 AND f2 = '#######';
|
||||
# Update one record
|
||||
eval UPDATE t1 SET f1 = $max_row + 2, f2 = 'ZZZZZZZ'
|
||||
WHERE f1 = 0 AND f2 = '#######';
|
||||
# Select
|
||||
eval SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = $max_row + 2 AND f2 = 'ZZZZZZZ';
|
||||
# Bug #15968: Partitions: crash when INSERT with f1 = -1 into PARTITION BY HASH(f1)
|
||||
eval UPDATE t1 SET f1 = 0 - 1, f2 = 'ZZZZZZZ'
|
||||
WHERE f1 = $max_row + 1 AND f2 = '#######';
|
||||
# Select
|
||||
SELECT COUNT(*) AS my_value FROM t1 WHERE f1 = 0 - 1 AND f2 = 'ZZZZZZZ';
|
||||
# Delete
|
||||
eval DELETE FROM t1 WHERE f1 = $max_row + 2 AND f2 = 'ZZZZZZZ';
|
||||
DELETE FROM t1 WHERE f1 = 0 - 1 AND f2 = 'ZZZZZZZ';
|
||||
# Select
|
||||
SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
|
||||
|
||||
# Truncate
|
||||
TRUNCATE t1;
|
||||
# Select on empty table
|
||||
SELECT COUNT(*) = 0 AS my_value FROM t1;
|
||||
34
build/lib/mysql/mysql-test/suite/parts/inc/partition_11.inc
Normal file
34
build/lib/mysql/mysql-test/suite/parts/inc/partition_11.inc
Normal file
@@ -0,0 +1,34 @@
|
||||
# inc/partition_11.inc
|
||||
#
|
||||
# Try to create a table with the given partition number
|
||||
#
|
||||
|
||||
eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
|
||||
PARTITION BY HASH(f1) PARTITIONS $part_number;
|
||||
--disable_query_log
|
||||
eval SET @my_errno= $mysql_errno ;
|
||||
let $run= `SELECT @my_errno = 0`;
|
||||
--enable_query_log
|
||||
#
|
||||
# If this operation was successfull, check + drop this table
|
||||
if ($run)
|
||||
{
|
||||
--source suite/parts/inc/partition_10.inc
|
||||
eval DROP TABLE t1;
|
||||
}
|
||||
#### Try to create a table with the given subpartition number
|
||||
eval CREATE TABLE t1 ( f1 INTEGER, f2 char(20))
|
||||
PARTITION BY RANGE(f1) SUBPARTITION BY HASH(f1)
|
||||
SUBPARTITIONS $part_number
|
||||
(PARTITION part1 VALUES LESS THAN ($max_row_div2), PARTITION part2 VALUES LESS THAN ($max_int_4));
|
||||
--disable_query_log
|
||||
eval SET @my_errno= $mysql_errno ;
|
||||
let $run= `SELECT @my_errno = 0`;
|
||||
--enable_query_log
|
||||
#
|
||||
# If this operation was successfull, check + drop this table
|
||||
if ($run)
|
||||
{
|
||||
--source suite/parts/inc/partition_10.inc
|
||||
eval DROP TABLE t1;
|
||||
}
|
||||
59
build/lib/mysql/mysql-test/suite/parts/inc/partition_12.inc
Normal file
59
build/lib/mysql/mysql-test/suite/parts/inc/partition_12.inc
Normal file
@@ -0,0 +1,59 @@
|
||||
# inc/partition_12.inc
|
||||
#
|
||||
# Do some basic things on a table, if the SQL command executed just before
|
||||
# sourcing this file was successful.
|
||||
#
|
||||
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
|
||||
####### Variations with multiple records
|
||||
# (mass) Insert max_row_div2 + 1 records
|
||||
eval INSERT INTO t1 SELECT * FROM t0_template WHERE f1 BETWEEN $max_row_div2 AND $max_row;
|
||||
# Select
|
||||
eval SELECT (COUNT(*) = $max_row) AND (MIN(f1) = 1) AND (MAX(f1) = $max_row)
|
||||
AS my_value FROM t1;
|
||||
# DEBUG SELECT COUNT(*),MIN(f1),MAX(f1) FROM t1;
|
||||
# (mass) Update $max_row_div4 * 2 + 1 records
|
||||
eval UPDATE t1 SET f1 = f1 + $max_row
|
||||
WHERE f1 BETWEEN $max_row_div2 - $max_row_div4 AND $max_row_div2 + $max_row_div4;
|
||||
# Select
|
||||
eval SELECT (COUNT(*) = $max_row) AND (MIN(f1) = 1) AND (MAX(f1) = $max_row_div2 + $max_row_div4 + $max_row )
|
||||
AS my_value FROM t1;
|
||||
# DEBUG SELECT COUNT(*),MIN(f1),MAX(f1) FROM t1;
|
||||
# (mass) Delete $max_row_div4 * 2 + 1 records
|
||||
eval DELETE FROM t1
|
||||
WHERE f1 BETWEEN $max_row_div2 - $max_row_div4 + $max_row AND $max_row_div2 + $max_row_div4 + $max_row;
|
||||
# Select
|
||||
eval SELECT (COUNT(*) = $max_row - $max_row_div4 - $max_row_div4 - 1) AND (MIN(f1) = 1) AND (MAX(f1) = $max_row)
|
||||
AS my_value FROM t1;
|
||||
# DEBUG SELECT COUNT(*),MIN(f1),MAX(f1) FROM t1;
|
||||
|
||||
####### Variations with single records
|
||||
# Insert one record at beginning
|
||||
INSERT INTO t1 SET f1 = 0 , f2 = '#######';
|
||||
# Select this record
|
||||
SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = 0 AND f2 = '#######';
|
||||
# Insert one record at end
|
||||
eval INSERT INTO t1 SET f1 = $max_row + 1, f2 = '#######';
|
||||
# Select this record
|
||||
eval SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = $max_row + 1 AND f2 = '#######';
|
||||
# Update one record
|
||||
eval UPDATE t1 SET f1 = $max_row + 2, f2 = 'ZZZZZZZ'
|
||||
WHERE f1 = 0 AND f2 = '#######';
|
||||
# Select
|
||||
eval SELECT COUNT(*) = 1 AS my_value FROM t1 WHERE f1 = $max_row + 2 AND f2 = 'ZZZZZZZ';
|
||||
# Bug #15968: Partitions: crash when INSERT with f1 = -1 into PARTITION BY HASH(f1)
|
||||
eval UPDATE t1 SET f1 = 0 - 1, f2 = 'ZZZZZZZ'
|
||||
WHERE f1 = $max_row + 1 AND f2 = '#######';
|
||||
# Select
|
||||
SELECT COUNT(*) AS my_value FROM t1 WHERE f1 = 0 - 1 AND f2 = 'ZZZZZZZ';
|
||||
# Delete
|
||||
eval DELETE FROM t1 WHERE f1 = $max_row + 2 AND f2 = 'ZZZZZZZ';
|
||||
DELETE FROM t1 WHERE f1 = 0 - 1 AND f2 = 'ZZZZZZZ';
|
||||
# Select
|
||||
SELECT COUNT(*) = 0 AS my_value FROM t1 WHERE f2 = 'ZZZZZZZ';
|
||||
|
||||
# Truncate
|
||||
TRUNCATE t1;
|
||||
# Select on empty table
|
||||
SELECT COUNT(*) = 0 AS my_value FROM t1;
|
||||
43
build/lib/mysql/mysql-test/suite/parts/inc/partition_20.inc
Normal file
43
build/lib/mysql/mysql-test/suite/parts/inc/partition_20.inc
Normal file
@@ -0,0 +1,43 @@
|
||||
################################################################################
|
||||
# inc/partition_20.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Auxiliary script, only useful when sourced by #
|
||||
# suite/parts/inc/partition_check.inc. #
|
||||
# #
|
||||
# 1. Check if the preceding statement caused that the expected number of #
|
||||
# records was #
|
||||
# - inserted #
|
||||
# - updated or deleted+inserted #
|
||||
# 2. Revert the modifications #
|
||||
# #
|
||||
# The parameters #
|
||||
# @try_count = total number of inserted and updated or deleted+inserted #
|
||||
# records #
|
||||
# @clash_count = number of records where a DUPLICATE KEY appears #
|
||||
# must be set before sourcing this routine. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT '# check unique-$num-a success: ' AS "", COUNT(*) = @clash_count AS ""
|
||||
FROM t1 WHERE f_charbig = 'was updated';
|
||||
eval SELECT '# check unique-$num-b success: ' AS "", COUNT(*) = @try_count AS ""
|
||||
FROM t1 WHERE f_charbig IN ('was updated','was inserted');
|
||||
--enable_query_log
|
||||
# Revert the modification
|
||||
DELETE FROM t1 WHERE f_charbig = 'was inserted';
|
||||
UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
|
||||
f_int2 = CAST(f_char1 AS SIGNED INT),
|
||||
f_charbig = CONCAT('===',f_char1,'===')
|
||||
WHERE f_charbig = 'was updated';
|
||||
inc $num;
|
||||
@@ -0,0 +1,67 @@
|
||||
################################################################################
|
||||
# inc/partition_alter1_1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# ADD/DROP PRIMARY KEYs and/or UNIQUE INDEXes tests on partitioned tables #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 1. ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX
|
||||
--echo #========================================================================
|
||||
# Rule: The table does not have a PRIMARY KEY or UNIQUE INDEX.
|
||||
# ---> $unique must be empty
|
||||
# ---> The PRIMARY KEY or UNIQUE INDEX to be created must contain
|
||||
# the columns used for partitioning.
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.1 ADD PRIMARY KEY or UNIQUE INDEX to table with one column (f_int1)
|
||||
--echo # within the partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: Only f_int1 is used within the partitioning function
|
||||
# ---> inc/partition_alter_11.inc
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
# The value of the following test is maybe covered by 1.1.3.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
--echo # 1.1.1 PRIMARY KEY consisting of one column
|
||||
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
# This must fail, because PRIMARY KEY does not contain f_int1
|
||||
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
# The value of the following test is maybe covered by 1.1.4.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
--echo # 1.1.2 UNIQUE INDEX consisting of one column
|
||||
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
# This must fail, because UNIQUE INDEX does not contain f_int1
|
||||
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 1.1.3 PRIMARY KEY consisting of two columns
|
||||
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
--echo # 1.1.4 UNIQUE INDEX consisting of two columns
|
||||
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
################################################################################
|
||||
# inc/partition_alter1_1_2.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# ADD/DROP PRIMARY KEYs and/or UNIQUE INDEXes tests on partitioned tables #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 1. ALTER TABLE ADD PRIMARY KEY and/or UNIQUE INDEX
|
||||
--echo #========================================================================
|
||||
# Rule: The table does not have a PRIMARY KEY or UNIQUE INDEX.
|
||||
# ---> $unique must be empty
|
||||
# ---> The PRIMARY KEY or UNIQUE INDEX to be created must contain
|
||||
# the columns used for partitioning.
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.2 ADD PRIMARY KEY or UNIQUE INDEX to table with two columns
|
||||
--echo # (f_int1 and f_int2) within the partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: f_int1 and f_int2 is used within the partitioning function
|
||||
# ---> inc/partition_alter_13.inc
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 1.2.1 PRIMARY KEY consisting of two columns
|
||||
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
--echo # 1.2.2 UNIQUE INDEX consisting of two columns
|
||||
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 1.2.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns
|
||||
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int1,f_int2), ADD PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $alter= ALTER TABLE t1 ADD UNIQUE INDEX uidx1 (f_int2,f_int1), ADD PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
################################################################################
|
||||
# inc/partition_alter1_2.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# ADD/DROP PRIMARY KEYs and/or UNIQUE INDEXes tests on partitioned tables #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
#
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 2 DROP PRIMARY KEY or UNIQUE INDEX
|
||||
--echo #========================================================================
|
||||
# Rule: The table must have a PRIMARY KEY or UNIQUE INDEX.
|
||||
# ---> $unique must not be empty
|
||||
# ---> The PRIMARY KEY or UNIQUE INDEX to be dropped must contain
|
||||
# the columns used for partitioning.
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.1 Partitioning function contains one column(f_int1)
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: Only f_int1 is used within the partitioning function
|
||||
# ---> inc/partition_alter_11.inc
|
||||
# The value of the following test is maybe covered by 2.1.5.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.1.1 DROP PRIMARY KEY consisting of one column
|
||||
let $unique= , PRIMARY KEY(f_int1);
|
||||
let $alter= ALTER TABLE t1 DROP PRIMARY KEY;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
#
|
||||
--echo # 2.1.2 DROP UNIQUE INDEX consisting of one column
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1);
|
||||
let $alter= ALTER TABLE t1 DROP INDEX uidx1;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.1.3 DROP PRIMARY KEY consisting of two columns
|
||||
let $alter= ALTER TABLE t1 DROP PRIMARY KEY;
|
||||
let $unique= , PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
#
|
||||
--echo # 2.1.4 DROP UNIQUE INDEX consisting of two columns
|
||||
let $alter= ALTER TABLE t1 DROP INDEX uidx1;
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.1.5 DROP PRIMARY KEY + UNIQUE INDEX consisting of two columns
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1);
|
||||
let $alter= ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2);
|
||||
let $alter= ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1);
|
||||
let $alter= ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.2 Partitioning function contains two columns (f_int1,f_int2)
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: f_int1 and f_int2 is used within the partitioning function
|
||||
# ---> inc/partition_alter_13.inc
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.2.1 DROP PRIMARY KEY consisting of two columns
|
||||
let $alter= ALTER TABLE t1 DROP PRIMARY KEY;
|
||||
let $unique= , PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
#
|
||||
--echo # 2.2.2 DROP UNIQUE INDEX consisting of two columns
|
||||
let $alter= ALTER TABLE t1 DROP INDEX uidx1;
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.2.3 DROP PRIMARY KEY + UNIQUE INDEX consisting of two columns
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1);
|
||||
let $alter= ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2);
|
||||
let $alter= ALTER TABLE t1 DROP PRIMARY KEY, DROP INDEX uidx1;
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1);
|
||||
let $alter= ALTER TABLE t1 DROP INDEX uidx1, DROP INDEX uidx2;
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
|
||||
if (0)
|
||||
{
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 3. ALTER TABLE "ALTER" PRIMARY KEY
|
||||
--echo # mleich: I think that an ALTER TABLE statement where a PRIMARY
|
||||
--echo # KEY is dropped and recreated (with different layout) might
|
||||
--echo # be of interest, if the tree containing the table data has
|
||||
--echo # to be reorganized during this operation.
|
||||
--echo # To be implemented
|
||||
--echo #========================================================================
|
||||
--echo
|
||||
}
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
################################################################################
|
||||
# inc/partition_alter2_1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests where the columns used within the partitioning function are altered. #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. .#
|
||||
# Part 1: increasing size of column
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: MattiasJ #
|
||||
# Change Date: 2008-09-08 #
|
||||
# Change: Splitted the test in two different parts (increasing/decreasing col) #
|
||||
################################################################################
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 1 Increase the size of the column used in the partitioning
|
||||
--echo # function and/or PRIMARY KEY and/or UNIQUE INDEX
|
||||
--echo #========================================================================
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.1 ALTER column f_int2 not used in partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: Only f_int1 is used within the partitioning function
|
||||
# ---> inc/partition_alter_11.inc
|
||||
let $alter= ALTER TABLE t1 MODIFY f_int2 BIGINT;
|
||||
--echo # 1.1.1 no PRIMARY KEY or UNIQUE INDEX exists
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 1.1.2 PRIMARY KEY exists
|
||||
# The value of the direct following test is maybe covered by the test with
|
||||
# the PRIMARY KEY containing two columns.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
let $unique= , PRIMARY KEY (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , PRIMARY KEY (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , PRIMARY KEY (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
#
|
||||
--echo # 1.1.3 UNIQUE INDEX exists
|
||||
# The value of the direct following test is maybe covered by the test with
|
||||
# the UNIQUE INDEX containing two columns
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
#
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
# The value of the tests 1.2 is maybe covered by the tests 1.3
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.2 ALTER column f_int1 used in partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: Only f_int1 is used within the partitioning function
|
||||
# ---> inc/partition_alter_11.inc
|
||||
let $alter= ALTER TABLE t1 MODIFY f_int1 BIGINT;
|
||||
--echo # 1.2.1 no PRIMARY KEY or UNIQUE INDEX exists
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 1.2.2 PRIMARY KEY exists
|
||||
let $unique= , PRIMARY KEY (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , PRIMARY KEY (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , PRIMARY KEY (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
#
|
||||
--echo # 1.2.3 UNIQUE INDEX exists
|
||||
let $unique= , UNIQUE INDEX uidx (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , UNIQUE INDEX uidx (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.3 ALTER column f_int1 and f_int2
|
||||
--echo # f_int1 or (f_int1 and f_int2) used in partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: f_int1 and f_int2 is used within the partitioning function
|
||||
# ---> inc/partition_alter_13.inc
|
||||
let $alter= ALTER TABLE t1 MODIFY f_int1 BIGINT, MODIFY f_int2 BIGINT;
|
||||
--echo # 1.3.1 no PRIMARY KEY or UNIQUE INDEX exists
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 1.3.2 PRIMARY KEY exists
|
||||
# The value of the direct following test is maybe covered by the test with
|
||||
# the PRIMARY KEY containing two columns.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
let $unique= , PRIMARY KEY (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , PRIMARY KEY (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , PRIMARY KEY (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
#
|
||||
--echo # 1.3.3 UNIQUE INDEX exists
|
||||
# The value of the direct following test is maybe covered by the test with
|
||||
# the UNIQUE INDEX containing two columns.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
let $unique= , UNIQUE INDEX uidx (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , UNIQUE INDEX uidx (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
|
||||
if (0)
|
||||
{
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 3 ALTER the type of the column used in the partitioning
|
||||
--echo # function and/or PRIMARY KEY and/or UNIQUE INDEX
|
||||
--echo # INTEGER --> FLOAT
|
||||
--echo # INTEGER --> DECIMAL
|
||||
--echo # INTEGER --> VARCHAR
|
||||
--echo # mleich: I assume that at least the first two variants are of
|
||||
--echo # some interest. But I am unsure if the server allows such
|
||||
--echo # conversions. I also think that such operations have a
|
||||
--echo # conversions very small likelihood.
|
||||
--echo # To be implemented.
|
||||
--echo #========================================================================
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
################################################################################
|
||||
# inc/partition_alter2_2.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests where the columns used within the partitioning function are altered. #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. .#
|
||||
# Part 2: decreasing size of column
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: MattiasJ #
|
||||
# Change Date: 2008-09-08 #
|
||||
# Change: Splitted the test in two different parts (increasing/decreasing col) #
|
||||
################################################################################
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 2 Decrease the size of the column used in the partitioning
|
||||
--echo # function and/or PRIMARY KEY and/or UNIQUE INDEX
|
||||
--echo #========================================================================
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.1 ALTER column f_int2 not used in partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: Only f_int1 is used within the partitioning function
|
||||
# ---> inc/partition_alter_11.inc
|
||||
let $alter= ALTER TABLE t1 MODIFY f_int2 MEDIUMINT;
|
||||
--echo # 2.1.1 no PRIMARY KEY or UNIQUE INDEX exists
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
# The value of the direct following test is maybe covered by the test with
|
||||
# the PRIMARY KEY containing two columns.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
--echo # 2.1.2 PRIMARY KEY exists
|
||||
let $unique= , PRIMARY KEY (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , PRIMARY KEY (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , PRIMARY KEY (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
#
|
||||
--echo # 2.1.3 UNIQUE INDEX exists
|
||||
# The value of the direct following test is maybe covered by the test with
|
||||
# the UNIQUE INDEX containing two columns.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
#
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
# The value of the tests 2.2 is maybe covered by the tests 2.3
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.2 ALTER column f_int1 used in partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: Only f_int1 is used within the partitioning function
|
||||
# ---> inc/partition_alter_11.inc
|
||||
let $alter= ALTER TABLE t1 MODIFY f_int1 MEDIUMINT;
|
||||
--echo # 2.2.1 no PRIMARY KEY or UNIQUE INDEX exists
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.2.2 PRIMARY KEY exists
|
||||
let $unique= , PRIMARY KEY (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , PRIMARY KEY (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , PRIMARY KEY (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
#
|
||||
--echo # 2.2.3 UNIQUE INDEX exists
|
||||
let $unique= , UNIQUE INDEX uidx (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
let $unique= , UNIQUE INDEX uidx (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.3 ALTER column f_int1 and f_int2 used in partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Rule: f_int1 and f_int2 is used within the partitioning function
|
||||
# ---> inc/partition_alter_13.inc
|
||||
let $alter= ALTER TABLE t1 MODIFY f_int1 MEDIUMINT, MODIFY f_int2 MEDIUMINT;
|
||||
--echo # 2.3.1 no PRIMARY KEY or UNIQUE INDEX exists
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.3.2 PRIMARY KEY exists
|
||||
# The value of the direct following test is maybe covered by the test with
|
||||
# the PRIMARY KEY containing two columns.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
let $unique= , PRIMARY KEY (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , PRIMARY KEY (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , PRIMARY KEY (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
}
|
||||
#
|
||||
--echo # 2.3.3 UNIQUE INDEX exists
|
||||
# The value of the direct following test is maybe covered by the test with
|
||||
# the UNIQUE INDEX containing two columns.
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
let $unique= , UNIQUE INDEX uidx (f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
}
|
||||
let $unique= , UNIQUE INDEX uidx (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
let $unique= , UNIQUE INDEX uidx (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_alter_11.inc
|
||||
--source suite/parts/inc/partition_alter_13.inc
|
||||
#
|
||||
|
||||
if (0)
|
||||
{
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 3 ALTER the type of the column used in the partitioning
|
||||
--echo # function and/or PRIMARY KEY and/or UNIQUE INDEX
|
||||
--echo # INTEGER --> FLOAT
|
||||
--echo # INTEGER --> DECIMAL
|
||||
--echo # INTEGER --> VARCHAR
|
||||
--echo # mleich: I assume that at least the first two variants are of
|
||||
--echo # some interest. But I am unsure if the server allows such
|
||||
--echo # conversions. I also think that such operations have a
|
||||
--echo # conversions very small likelihood.
|
||||
--echo # To be implemented.
|
||||
--echo #========================================================================
|
||||
}
|
||||
199
build/lib/mysql/mysql-test/suite/parts/inc/partition_alter3.inc
Normal file
199
build/lib/mysql/mysql-test/suite/parts/inc/partition_alter3.inc
Normal file
@@ -0,0 +1,199 @@
|
||||
################################################################################
|
||||
# inc/partition_alter3.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests for partition management commands for HASH and KEY partitioning #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-04-11 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 1. Partition management commands on HASH partitioned table
|
||||
--echo # column in partitioning function is of type DATE
|
||||
--echo #========================================================================
|
||||
# 1. Create the table
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
eval CREATE TABLE t1 (f_date DATE, f_varchar VARCHAR(30));
|
||||
# 2. Fill the table t1 with records
|
||||
INSERT INTO t1 (f_date, f_varchar)
|
||||
SELECT CONCAT(CAST((f_int1 + 999) AS CHAR),'-02-10'), CAST(f_char1 AS CHAR)
|
||||
FROM t0_template
|
||||
WHERE f_int1 + 999 BETWEEN 1000 AND 9999;
|
||||
# 3. Calculate the number of inserted records.
|
||||
SELECT IF(9999 - 1000 + 1 > @max_row, @max_row , 9999 - 1000 + 1)
|
||||
INTO @exp_row_count;
|
||||
# DEBUG SELECT @exp_row_count;
|
||||
# 4. Print the layout, check Readability
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.1 Increase number of PARTITIONS
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.1.1 ADD PARTITION to not partitioned table --> must fail
|
||||
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
#
|
||||
--echo # 1.1.2 Assign HASH partitioning
|
||||
ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date));
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
#
|
||||
--echo # 1.1.3 Assign other HASH partitioning to already partitioned table
|
||||
--echo # + test and switch back + test
|
||||
ALTER TABLE t1 PARTITION BY HASH(DAYOFYEAR(f_date));
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date));
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
#
|
||||
--echo # 1.1.4 Add PARTITIONS not fitting to HASH --> must fail
|
||||
--error ER_PARTITION_WRONG_VALUES_ERROR
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1 VALUES IN (0));
|
||||
--error ER_PARTITION_WRONG_VALUES_ERROR
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0));
|
||||
#
|
||||
--echo # 1.1.5 Add two named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
#
|
||||
--echo # 1.1.6 Add two named partitions, name clash --> must fail
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
#
|
||||
--echo # 1.1.7 Add one named partition + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
#
|
||||
--echo # 1.1.8 Add four not named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.2 Decrease number of PARTITIONS
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.2.1 DROP PARTITION is not supported for HASH --> must fail
|
||||
--error ER_ONLY_ON_RANGE_LIST_PARTITION
|
||||
ALTER TABLE t1 DROP PARTITION part1;
|
||||
#
|
||||
--echo # 1.2.2 COALESCE PARTITION partitionname is not supported
|
||||
--error ER_PARSE_ERROR
|
||||
ALTER TABLE t1 COALESCE PARTITION part1;
|
||||
#
|
||||
--echo # 1.2.3 Decrease by 0 is non sense --> must fail
|
||||
--error ER_COALESCE_PARTITION_NO_PARTITION
|
||||
ALTER TABLE t1 COALESCE PARTITION 0;
|
||||
#
|
||||
--echo # 1.2.4 COALESCE one partition + test loop
|
||||
let $loop= 7;
|
||||
while ($loop)
|
||||
{
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
dec $loop;
|
||||
}
|
||||
--echo # 1.2.5 COALESCE of last partition --> must fail
|
||||
--error ER_DROP_LAST_PARTITION
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
#
|
||||
--echo # 1.2.6 Remove partitioning
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read1.inc
|
||||
#
|
||||
--echo # 1.2.7 Remove partitioning from not partitioned table --> ????
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 2. Partition management commands on KEY partitioned table
|
||||
--echo #========================================================================
|
||||
# 1. Create the table
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
);
|
||||
# 2. Fill the table t1 with some records
|
||||
eval $insert_all;
|
||||
# 4. Print the layout, check Readability
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read2.inc
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.1 Increase number of PARTITIONS
|
||||
--echo # Some negative testcases are omitted (already checked with HASH).
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.1.1 Assign KEY partitioning
|
||||
ALTER TABLE t1 PARTITION BY KEY(f_int1);
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read2.inc
|
||||
#
|
||||
--echo # 2.1.2 Add PARTITIONS not fitting to KEY --> must fail
|
||||
--error ER_PARTITION_WRONG_VALUES_ERROR
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1 VALUES IN (0));
|
||||
--error ER_PARTITION_WRONG_VALUES_ERROR
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0));
|
||||
#
|
||||
--echo # 2.1.3 Add two named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read2.inc
|
||||
#
|
||||
--echo # 2.1.4 Add one named partition + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read2.inc
|
||||
#
|
||||
--echo # 2.1.5 Add four not named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read2.inc
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.2 Decrease number of PARTITIONS
|
||||
--echo # Some negative testcases are omitted (already checked with HASH).
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.2.1 DROP PARTITION is not supported for KEY --> must fail
|
||||
--error ER_ONLY_ON_RANGE_LIST_PARTITION
|
||||
ALTER TABLE t1 DROP PARTITION part1;
|
||||
#
|
||||
--echo # 2.2.4 COALESCE one partition + test loop
|
||||
let $loop= 7;
|
||||
while ($loop)
|
||||
{
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read2.inc
|
||||
dec $loop;
|
||||
}
|
||||
--echo # 2.2.5 COALESCE of last partition --> must fail
|
||||
--error ER_DROP_LAST_PARTITION
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
#
|
||||
--echo # 2.2.6 Remove partitioning
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
--source suite/parts/inc/partition_layout.inc
|
||||
--source suite/parts/inc/partition_check_read2.inc
|
||||
#
|
||||
--echo # 2.2.7 Remove partitioning from not partitioned table --> ????
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
120
build/lib/mysql/mysql-test/suite/parts/inc/partition_alter4.inc
Normal file
120
build/lib/mysql/mysql-test/suite/parts/inc/partition_alter4.inc
Normal file
@@ -0,0 +1,120 @@
|
||||
################################################################################
|
||||
# inc/partition_alter1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Execute ALTER ... OPTIMIZE/CHECK/REBUID/ANALYZE statements (maintenance) #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: HH #
|
||||
# Original Date: 2006-07-27 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 1.1.1.12 ALTER TABLE <maintenance> PARTITION
|
||||
--echo #========================================================================
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1 ALTER ... ANALYZE PARTITION
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.1 ALTER ... ANALYZE PARTITION part_1;
|
||||
let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 1.2 ALTER ... ANALYZE PARTITION part_1,part_2;
|
||||
let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1,part_2;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 1.3 ALTER ... ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 1.4 ALTER ... ANALYZE PARTITION part_1,part_1,part_1;
|
||||
let $alter= ALTER TABLE t1 ANALYZE PARTITION part_1,part_1,part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 1.5 ALTER ... ANALYZE PARTITION ALL;
|
||||
let $alter= ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2 ALTER ... CHECK PARTITION
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.1 ALTER ... CHECK PARTITION part_1;
|
||||
let $alter= ALTER TABLE t1 CHECK PARTITION part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 2.2 ALTER ... CHECK PARTITION part_1,part_2;
|
||||
let $alter= ALTER TABLE t1 CHECK PARTITION part_1,part_2;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 2.3 ALTER ... CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
let $alter= ALTER TABLE t1 CHECK PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 2.4 ALTER ... CHECK PARTITION part_1,part_1,part_1;
|
||||
let $alter= ALTER TABLE t1 CHECK PARTITION part_1,part_1,part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 2.5 ALTER ... CHECK PARTITION ALL;
|
||||
let $alter= ALTER TABLE t1 CHECK PARTITION ALL;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3 ALTER ... OPTIMIZE PARTITION
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3.1 ALTER ... OPTIMIZE PARTITION part_1;
|
||||
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 3.2 ALTER ... OPTIMIZE PARTITION part_1,part_2;
|
||||
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 3.3 ALTER ... OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 3.4 ALTER ... OPTIMIZE PARTITION part_1,part_1,part_1;
|
||||
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION part_1,part_1,part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 3.5 ALTER ... OPTIMIZE PARTITION ALL;
|
||||
let $alter= ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 4 ALTER ... REBUILD PARTITION
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 4.1 ALTER ... REBUILD PARTITION part_1;
|
||||
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 4.2 ALTER ... REBUILD PARTITION part_1,part_2;
|
||||
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_2;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 4.3 ALTER ... REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 4.4 ALTER ... REBUILD PARTITION part_1,part_1,part_1;
|
||||
let $alter= ALTER TABLE t1 REBUILD PARTITION part_1,part_1,part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 4.5 ALTER ... REBUILD PARTITION ALL;
|
||||
let $alter= ALTER TABLE t1 REBUILD PARTITION ALL;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 5 ALTER ... REPAIR PARTITION
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 5.1 ALTER ... REPAIR PARTITION part_1;
|
||||
let $alter= ALTER TABLE t1 REPAIR PARTITION part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 5.2 ALTER ... REPAIR PARTITION part_1,part_2;
|
||||
let $alter= ALTER TABLE t1 REPAIR PARTITION part_1,part_2;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 5.3 ALTER ... REPAIR PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
let $alter= ALTER TABLE t1 REPAIR PARTITION part_1,part_2,part_5,part_6,part_10;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 5.4 ALTER ... REPAIR PARTITION part_1,part_1,part_1;
|
||||
let $alter= ALTER TABLE t1 REPAIR PARTITION part_1,part_1,part_1;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
--echo # 5.5 ALTER ... REPAIR PARTITION ALL;
|
||||
let $alter= ALTER TABLE t1 REPAIR PARTITION ALL;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 6 ALTER ... REMOVE PARTITIONING
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 6.1 ALTER ... REMOVE PARTITIONING;
|
||||
let $alter= ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
--source suite/parts/inc/partition_alter_41.inc
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
################################################################################
|
||||
# inc/partition_alter_1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Alter a partioned table and check the usability afterwards #
|
||||
# This script is only usefule when sourced by #
|
||||
# inc/partition_alter_1[1|3].inc #
|
||||
# #
|
||||
# 0. Expect there is a table t1 #
|
||||
# 1. Insert the first half of the table t0_template into t1 #
|
||||
# 2. Execute the ALTER TABLE statement within the variable $alter #
|
||||
# Case SQL code in #
|
||||
# 0: 1. Insert the second half of the table t0_template into t1 #
|
||||
# 2. Execute the usability test inc/partition_check.inc #
|
||||
# >0, but expected: nothing #
|
||||
# >0 and unexpected: abort #
|
||||
# 3. DROP the table t1 #
|
||||
# #
|
||||
# The parameter $alter has to be set before sourcing this script. #
|
||||
# Example: #
|
||||
# CREATE TABLE t1 (f_int1 INT,f_int2 INT, .... ); #
|
||||
# let $alter= ALTER TABLE t1 ADD PRIMARY KEY(f_int2); #
|
||||
# inc/partition_alter_1.inc #
|
||||
# #
|
||||
# The parameters $insert_first_half and $insert_second_half #
|
||||
# are also to be set outside (source ./inc/partition.pre). #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: mleich #
|
||||
# Change Date: 2007-10-08 #
|
||||
# Change: Fix for #
|
||||
# Bug#31481 test suite parts: Many tests fail because of #
|
||||
# changed server error codes #
|
||||
################################################################################
|
||||
|
||||
eval $insert_first_half;
|
||||
# Possible/Expected return codes for ALTER TABLE ...
|
||||
# 0
|
||||
# 1030: ER_GET_ERRNO
|
||||
# 1502: ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
# 1506: ER_DROP_PARTITION_NON_EXISTENT
|
||||
--disable_abort_on_error
|
||||
eval $alter;
|
||||
--enable_abort_on_error
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SET @my_errno = $mysql_errno;
|
||||
let $run_test= `SELECT @my_errno = 0`;
|
||||
if (`SELECT @my_errno NOT IN (0,$ER_GET_ERRNO,
|
||||
$ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF,
|
||||
$ER_DROP_PARTITION_NON_EXISTENT)`);
|
||||
{
|
||||
--echo # The last command got an unexepected error response.
|
||||
--echo # Expected/handled SQL codes are 0,$ER_GET_ERRNO,$ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF,$ER_DROP_PARTITION_NON_EXISTENT
|
||||
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
|
||||
--echo # Sorry, have to abort.
|
||||
--echo # Please check the error name to number mapping in inc/partition.pre.
|
||||
exit;
|
||||
--echo
|
||||
}
|
||||
--enable_query_log
|
||||
# Prevent execution of following usage tests, when ALTER TABLE failed
|
||||
if ($run_test)
|
||||
{
|
||||
eval $insert_second_half;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
}
|
||||
DROP TABLE t1;
|
||||
@@ -0,0 +1,180 @@
|
||||
################################################################################
|
||||
# inc/partition_alter_11.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Check ALTER partitioned table and the state of the table afterwards #
|
||||
# The partitioning function use the column f_int1 #
|
||||
# #
|
||||
# For all partitioning methods #
|
||||
# PARTITION BY HASH/KEY/LIST/RANGE #
|
||||
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
|
||||
# do #
|
||||
# 1. Create the partitioned table #
|
||||
# 2. Execute inc/partition_alter_1.inc, which will #
|
||||
# - Insert the first half of the table t0_template into t1 #
|
||||
# - Execute the ALTER TABLE statement #
|
||||
# - Insert the second half of the table t0_template into t1 #
|
||||
# - 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= , UNIQUE INDEX uidx1 (f_int1); #
|
||||
# let $alter= ALTER TABLE t1 DROP UNIQUE INDEX uidx1; #
|
||||
# inc/partition_alter1.inc #
|
||||
# #
|
||||
# Attention: The routine include/partition_alter_13.inc is very similar #
|
||||
# to this one. So if something has to be changed here it #
|
||||
# might be necessary to do it also there #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
let $partitioning= ;
|
||||
#----------- PARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY HASH(f_int1) PARTITIONS 2;
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY KEY(f_int1) PARTITIONS 5;
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(MOD(f_int1,4))
|
||||
(PARTITION part_3 VALUES IN (-3),
|
||||
PARTITION part_2 VALUES IN (-2),
|
||||
PARTITION part_1 VALUES IN (-1),
|
||||
PARTITION part_N VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2),
|
||||
PARTITION part3 VALUES IN (3));
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1)
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN ($max_row_div2 + $max_row_div4),
|
||||
PARTITION parte VALUES LESS THAN ($max_row),
|
||||
PARTITION partf VALUES LESS THAN $MAX_VALUE);
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN $MAX_VALUE);
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
|
||||
(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;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
(SUBPARTITION sp11, SUBPARTITION sp12),
|
||||
PARTITION part2 VALUES IN (1)
|
||||
(SUBPARTITION sp21, SUBPARTITION sp22),
|
||||
PARTITION part3 VALUES IN (2)
|
||||
(SUBPARTITION sp31, SUBPARTITION sp32),
|
||||
PARTITION part4 VALUES IN (NULL)
|
||||
(SUBPARTITION sp41, SUBPARTITION sp42));
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(ABS(MOD(f_int1,2)))
|
||||
SUBPARTITION BY KEY(f_int1) 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;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
@@ -0,0 +1,194 @@
|
||||
################################################################################
|
||||
# inc/partition_alter_13.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Check ALTER partitioned table and the state of the table afterwards #
|
||||
# The partitioning function uses the columns f_int1 and f_int2 #
|
||||
# #
|
||||
# For all partitioning methods #
|
||||
# PARTITION BY HASH/KEY/LIST/RANGE #
|
||||
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
|
||||
# do #
|
||||
# 1. Create the partitioned table #
|
||||
# 2. Execute inc/partition_alter_1.inc, which will #
|
||||
# - Insert the first half of the table t0_template into t1 #
|
||||
# - Execute the ALTER TABLE statement #
|
||||
# - Insert the second half of the table t0_template into t1 #
|
||||
# - 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= , UNIQUE INDEX uidx1 (f_int1); #
|
||||
# let $alter= ALTER TABLE t1 DROP UNIQUE INDEX uidx1; #
|
||||
# inc/partition_alter1.inc #
|
||||
# #
|
||||
# Attention: The routine include/partition_alter_11.inc is very similar #
|
||||
# to this one. So if something has to be changed here it #
|
||||
# might be necessary to do it also there #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
let $partitioning= ;
|
||||
#----------- PARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(MOD(f_int1 + f_int2,4))
|
||||
(PARTITION part_3 VALUES IN (-3),
|
||||
PARTITION part_2 VALUES IN (-2),
|
||||
PARTITION part_1 VALUES IN (-1),
|
||||
PARTITION part_N VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2),
|
||||
PARTITION part3 VALUES IN (3));
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux = 'PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN ($max_row_div2 + $max_row_div4),
|
||||
PARTITION parte VALUES LESS THAN ($max_row),
|
||||
PARTITION partf VALUES LESS THAN $MAX_VALUE)';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux =
|
||||
'PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN $MAX_VALUE)';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux = 'PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
|
||||
(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))';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
(SUBPARTITION sp11, SUBPARTITION sp12),
|
||||
PARTITION part2 VALUES IN (1)
|
||||
(SUBPARTITION sp21, SUBPARTITION sp22),
|
||||
PARTITION part3 VALUES IN (2)
|
||||
(SUBPARTITION sp31, SUBPARTITION sp32),
|
||||
PARTITION part4 VALUES IN (NULL)
|
||||
(SUBPARTITION sp41, SUBPARTITION sp42));
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux =
|
||||
'PARTITION BY LIST(ABS(MOD(f_int1,2)))
|
||||
SUBPARTITION BY KEY(f_int2) SUBPARTITIONS $sub_part_no
|
||||
(PARTITION part1 VALUES IN (0),
|
||||
PARTITION part2 VALUES IN (1),
|
||||
PARTITION part3 VALUES IN (NULL))';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
@@ -0,0 +1,194 @@
|
||||
################################################################################
|
||||
# inc/partition_alter_11.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Check ALTER partitioned table and the state of the table afterwards #
|
||||
# The partitioning function use the column f_int1 #
|
||||
# #
|
||||
# For all partitioning methods #
|
||||
# PARTITION BY HASH/KEY/LIST/RANGE #
|
||||
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
|
||||
# do #
|
||||
# 1. Create the partitioned table #
|
||||
# 2. Execute inc/partition_alter_1.inc, which will #
|
||||
# - Insert the first half of the table t0_template into t1 #
|
||||
# - Execute the ALTER TABLE statement #
|
||||
# - Insert the second half of the table t0_template into t1 #
|
||||
# - Execute the usability test inc/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= , UNIQUE INDEX uidx1 (f_int1); #
|
||||
# let $alter= ALTER TABLE t1 DROP UNIQUE INDEX uidx1; #
|
||||
# inc/partition_alter1.inc #
|
||||
# #
|
||||
# Attention: The routine inc/partition_alter_13.inc is very similar #
|
||||
# to this one. So if something has to be changed here it #
|
||||
# might be necessary to do it also there #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
let $partitioning= ;
|
||||
#----------- PARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY HASH(f_int1) PARTITIONS 2 (partition part_1, partition part_2);
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY KEY(f_int1) PARTITIONS 5 (partition part_1, partition part_2, partition part_3, partition part_4, partition part_5);
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(MOD(f_int1,4))
|
||||
(PARTITION part_3 VALUES IN (-3),
|
||||
PARTITION part_2 VALUES IN (-2),
|
||||
PARTITION part_1 VALUES IN (-1),
|
||||
PARTITION part_N VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2),
|
||||
PARTITION part3 VALUES IN (3));
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux = 'PARTITION BY RANGE(f_int1)
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION part_1 VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION part_2 VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION part_3 VALUES LESS THAN ($max_row_div2 + $max_row_div4),
|
||||
PARTITION part_4 VALUES LESS THAN ($max_row),
|
||||
PARTITION part_5 VALUES LESS THAN $MAX_VALUE)';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux =
|
||||
'PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
(PARTITION part_1 VALUES LESS THAN (0),
|
||||
PARTITION part_2 VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION part_3 VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION part_4 VALUES LESS THAN $MAX_VALUE)';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux = 'PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
|
||||
(PARTITION part_1 VALUES LESS THAN (0)
|
||||
(SUBPARTITION subpart11, SUBPARTITION subpart12),
|
||||
PARTITION part_2 VALUES LESS THAN ($max_row_div4)
|
||||
(SUBPARTITION subpart21, SUBPARTITION subpart22),
|
||||
PARTITION part_3 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart31, SUBPARTITION subpart32),
|
||||
PARTITION part_4 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart41, SUBPARTITION subpart42))';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
|
||||
(PARTITION part_1 VALUES IN (0)
|
||||
(SUBPARTITION sp11, SUBPARTITION sp12),
|
||||
PARTITION part_2 VALUES IN (1)
|
||||
(SUBPARTITION sp21, SUBPARTITION sp22),
|
||||
PARTITION part_3 VALUES IN (2)
|
||||
(SUBPARTITION sp31, SUBPARTITION sp32),
|
||||
PARTITION part_4 VALUES IN (NULL)
|
||||
(SUBPARTITION sp41, SUBPARTITION sp42));
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
--disable_query_log
|
||||
eval SET @aux =
|
||||
'PARTITION BY LIST(ABS(MOD(f_int1,2)))
|
||||
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS $sub_part_no
|
||||
(PARTITION part_1 VALUES IN (0),
|
||||
PARTITION part_2 VALUES IN (1),
|
||||
PARTITION part_3 VALUES IN (NULL))';
|
||||
let $partitioning= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
}
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
--source suite/parts/inc/partition_alter_1.inc
|
||||
@@ -0,0 +1,884 @@
|
||||
# inc/partition_auto_increment.inc
|
||||
#
|
||||
# auto_increment test
|
||||
# used variables: $engine
|
||||
#
|
||||
|
||||
-- disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
-- enable_warnings
|
||||
|
||||
-- echo # test without partitioning for reference
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE=$engine;
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
INSERT INTO t1 VALUES (0);
|
||||
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
|
||||
INSERT INTO t1 VALUES (5), (16);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (19), (NULL);
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (NULL), (10), (NULL);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET INSERT_ID = 30;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET INSERT_ID = 29;
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
if (!$skip_update)
|
||||
{
|
||||
# InnoDB Does not handle this correctly, see bug#14793, bug#21641
|
||||
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
||||
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
||||
FLUSH TABLES;
|
||||
UPDATE t1 SET c1 = 40 WHERE c1 = 50;
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
}
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
DROP TABLE t1;
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE=$engine;
|
||||
SHOW CREATE TABLE t1;
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES (4);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
if (!$skip_delete)
|
||||
{
|
||||
DELETE FROM t1;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
if (!$skip_truncate)
|
||||
{
|
||||
TRUNCATE TABLE t1;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
INSERT INTO t1 VALUES (100);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
if (!$skip_delete)
|
||||
{
|
||||
DELETE FROM t1 WHERE c1 >= 100;
|
||||
}
|
||||
# InnoDB does reset auto_increment on OPTIMIZE, Bug#18274
|
||||
# Archive does reset auto_increment on OPTIMIZE, Bug#40216
|
||||
OPTIMIZE TABLE t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
if (!$skip_update)
|
||||
{
|
||||
eval CREATE TABLE t1
|
||||
(a INT NULL AUTO_INCREMENT,
|
||||
UNIQUE KEY (a))
|
||||
ENGINE=$engine;
|
||||
SET LAST_INSERT_ID = 999;
|
||||
SET INSERT_ID = 0;
|
||||
INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM t1;
|
||||
INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM t1;
|
||||
UPDATE t1 SET a = 1 WHERE a IS NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM t1;
|
||||
UPDATE t1 SET a = NULL WHERE a = 1;
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
SET INSERT_ID = 1;
|
||||
}
|
||||
|
||||
-- echo # Simple test with NULL
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE=$engine
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test with sql_mode and first insert as 0
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE=$engine
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
|
||||
INSERT INTO t1 VALUES (1, 1), (99, 99);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
let $old_sql_mode = `select @@session.sql_mode`;
|
||||
SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
SELECT * FROM t1 ORDER BY c1, c2;
|
||||
DROP TABLE t1;
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE=$engine
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (1, 1), (1, NULL);
|
||||
INSERT INTO t1 VALUES (2, NULL), (4, 7);
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
SELECT * FROM t1 ORDER BY c1, c2;
|
||||
eval SET @@session.sql_mode = '$old_sql_mode';
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
-- echo # Simple test with NULL, 0 and explicit values both incr. and desc.
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE=$engine
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (2), (4), (NULL);
|
||||
INSERT INTO t1 VALUES (0);
|
||||
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
|
||||
INSERT INTO t1 VALUES (5), (16);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (17), (19), (NULL);
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (NULL), (10), (NULL);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (NULL), (9);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (59), (55);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL), (90);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
if (!$skip_update)
|
||||
{
|
||||
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
||||
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
||||
FLUSH TABLES;
|
||||
UPDATE t1 SET c1 = 140 WHERE c1 = 150;
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
}
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test with auto_increment_increment and auto_increment_offset.
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE=$engine
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
let $old_increment = `SELECT @@session.auto_increment_increment`;
|
||||
let $old_offset = `SELECT @@session.auto_increment_offset`;
|
||||
SET @@session.auto_increment_increment = 10;
|
||||
SET @@session.auto_increment_offset = 5;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
SET @@session.auto_increment_increment = 5;
|
||||
SET @@session.auto_increment_offset = 3;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
let $new_val = `SELECT LAST_INSERT_ID()`;
|
||||
eval INSERT INTO t1 VALUES ($new_val + 1);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
let $new_val = `SELECT LAST_INSERT_ID()`;
|
||||
eval INSERT INTO t1 VALUES ($new_val + 2);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
let $new_val = `SELECT LAST_INSERT_ID()`;
|
||||
eval INSERT INTO t1 VALUES ($new_val + 3);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
let $new_val = `SELECT LAST_INSERT_ID()`;
|
||||
eval INSERT INTO t1 VALUES ($new_val + 4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
let $new_val = `SELECT LAST_INSERT_ID()`;
|
||||
eval INSERT INTO t1 VALUES ($new_val + 5);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
let $new_val = `SELECT LAST_INSERT_ID()`;
|
||||
eval INSERT INTO t1 VALUES ($new_val + 6);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
eval SET @@session.auto_increment_increment = $old_increment;
|
||||
eval SET @@session.auto_increment_offset = $old_offset;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
-- echo # Test reported auto_increment value
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE=$engine
|
||||
PARTITION BY HASH (c1)
|
||||
PARTITIONS 2;
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
INSERT INTO t1 VALUES (2);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (19);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (10);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (15);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
if (!$skip_delete)
|
||||
{
|
||||
DELETE FROM t1;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
if (!$skip_truncate)
|
||||
{
|
||||
TRUNCATE TABLE t1;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
INSERT INTO t1 VALUES (100);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
if (!$skip_delete)
|
||||
{
|
||||
DELETE FROM t1 WHERE c1 >= 100;
|
||||
}
|
||||
# InnoDB does reset auto_increment on OPTIMIZE, Bug#18274
|
||||
OPTIMIZE TABLE t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test with two threads
|
||||
connection default;
|
||||
-- echo # con default
|
||||
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
connect(con1, localhost, root,,);
|
||||
connection con1;
|
||||
-- echo # con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (10);
|
||||
connection default;
|
||||
-- echo # con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
-- echo # con1
|
||||
connection con1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
connection default;
|
||||
-- echo # con default
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
-- echo # con1
|
||||
connection con1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
disconnect con1;
|
||||
connection default;
|
||||
-- echo # con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test with two threads + start transaction NO PARTITIONING
|
||||
connect(con1, localhost, root,,);
|
||||
connection default;
|
||||
-- echo # con default
|
||||
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = $engine;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
connection con1;
|
||||
-- echo # con1
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (10);
|
||||
connection default;
|
||||
-- echo # con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
-- echo # con1
|
||||
connection con1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
connection default;
|
||||
-- echo # con default
|
||||
-- error 0, ER_DUP_KEY
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
-- echo # con1
|
||||
connection con1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
-- echo # con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test with two threads + start transaction
|
||||
connect(con1, localhost, root,,);
|
||||
connection default;
|
||||
-- echo # con default
|
||||
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
connection con1;
|
||||
-- echo # con1
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (NULL), (10);
|
||||
connection default;
|
||||
-- echo # con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL), (NULL), (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
-- echo # con1
|
||||
connection con1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
connection default;
|
||||
-- echo # con default
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
-- echo # con1
|
||||
connection con1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
-- echo # con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
DROP TABLE t1;
|
||||
|
||||
if (!$only_ai_pk)
|
||||
{
|
||||
-- echo # Test with another column after
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
c2 INT,
|
||||
PRIMARY KEY (c1,c2))
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
INSERT INTO t1 VALUES (NULL, 1), (NULL, 2), (NULL, 3);
|
||||
INSERT INTO t1 VALUES (NULL, 3);
|
||||
INSERT INTO t1 VALUES (2, 0), (NULL, 2);
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
INSERT INTO t1 VALUES (2, 22);
|
||||
INSERT INTO t1 VALUES (NULL, 2);
|
||||
SELECT * FROM t1 ORDER BY c1,c2;
|
||||
DROP TABLE t1;
|
||||
}
|
||||
|
||||
-- echo # Test with another column before
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
INSERT INTO t1 VALUES (2, NULL), (3, 11), (3, NULL), (2, 0);
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (2, 22);
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
SELECT * FROM t1 ORDER BY c1,c2;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test with auto_increment on secondary column in multi-column-index
|
||||
-- disable_abort_on_error
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1,c2))
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
-- enable_abort_on_error
|
||||
-- disable_query_log
|
||||
eval SET @my_errno= $mysql_errno ;
|
||||
let $run = `SELECT @my_errno = 0`;
|
||||
# ER_WRONG_AUTO_KEY is 1075
|
||||
let $ER_WRONG_AUTO_KEY= 1075;
|
||||
if (`SELECT @my_errno NOT IN (0,$ER_WRONG_AUTO_KEY)`)
|
||||
{
|
||||
-- echo # Unknown error code, exits
|
||||
exit;
|
||||
}
|
||||
-- enable_query_log
|
||||
if ($run)
|
||||
{
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
-- error 0, ER_DUP_KEY, ER_DUP_ENTRY
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
INSERT INTO t1 VALUES (3, NULL);
|
||||
INSERT INTO t1 VALUES (3, NULL), (2, 0), (2, NULL);
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole/NDB) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (2, 22), (2, NULL);
|
||||
SELECT * FROM t1 ORDER BY c1,c2;
|
||||
DROP TABLE t1;
|
||||
}
|
||||
|
||||
-- echo # Test AUTO_INCREMENT in CREATE
|
||||
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = $engine
|
||||
AUTO_INCREMENT = 15
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 (c1) VALUES (0);
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
|
||||
-- echo # Test sql_mode 'NO_AUTO_VALUE_ON_ZERO'
|
||||
let $old_sql_mode = `select @@session.sql_mode`;
|
||||
SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
INSERT INTO t1 (c1) VALUES (300);
|
||||
SHOW CREATE TABLE t1;
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 (c1) VALUES (0);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Archive) mysql_errno: $mysql_errno;
|
||||
}
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
eval SET @@session.sql_mode = '$old_sql_mode';
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test SET INSERT_ID
|
||||
eval CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
SET INSERT_ID = 23;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SET INSERT_ID = 22;
|
||||
-- error 0, ER_DUP_ENTRY, ER_DUP_KEY
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
if (!$mysql_errno)
|
||||
{
|
||||
echo # ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY;
|
||||
echo # mysql_errno: $mysql_errno;
|
||||
}
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Testing with FLUSH TABLE
|
||||
eval CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE=$engine
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES (4);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
DROP TABLE t1;
|
||||
|
||||
if (!$skip_negative_auto_inc)
|
||||
{
|
||||
--echo #############################################################################
|
||||
--echo # Bug #45823 - Assertion failure in file row/row0mysql.c line 1386
|
||||
--echo # Bug #43988 - AUTO_INCREMENT errors with partitioned InnoDB tables in 5.1.31
|
||||
--echo ##############################################################################
|
||||
|
||||
--echo # Inserting negative autoincrement values into a partition table (partitions >= 4)
|
||||
|
||||
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||
|
||||
INSERT INTO t(c2) VALUES (10);
|
||||
INSERT INTO t(c2) VALUES (20);
|
||||
INSERT INTO t VALUES (-1,-10);
|
||||
INSERT INTO t(c2) VALUES (30);
|
||||
INSERT INTO t(c2) VALUES (40);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # Reading from a partition table (partitions >= 2 ) after inserting a negative
|
||||
--echo # value into the auto increment column
|
||||
|
||||
|
||||
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 2;
|
||||
|
||||
INSERT INTO t VALUES (-2,-20);
|
||||
INSERT INTO t(c2) VALUES (30);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # Inserting negative auto increment value into a partition table (partitions >= 2)
|
||||
--echo # auto increment value > 2.
|
||||
|
||||
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 2;
|
||||
|
||||
INSERT INTO t VALUES (-4,-20);
|
||||
INSERT INTO t(c2) VALUES (30);
|
||||
INSERT INTO t(c2) VALUES (40);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # Inserting -1 into autoincrement column of a partition table (partition >= 4)
|
||||
|
||||
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||
|
||||
INSERT INTO t(c2) VALUES (10);
|
||||
INSERT INTO t(c2) VALUES (20);
|
||||
INSERT INTO t VALUES (-1,-10);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
INSERT INTO t(c2) VALUES (30);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # Deleting from an auto increment table after inserting negative values
|
||||
|
||||
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||
|
||||
INSERT INTO t(c2) VALUES (10);
|
||||
INSERT INTO t(c2) VALUES (20);
|
||||
INSERT INTO t VALUES (-1,-10);
|
||||
INSERT INTO t(c2) VALUES (30);
|
||||
INSERT INTO t VALUES (-3,-20);
|
||||
INSERT INTO t(c2) VALUES (40);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
if (!$skip_delete)
|
||||
{
|
||||
DELETE FROM t WHERE c1 > 1;
|
||||
}
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # Inserting a positive value that exceeds maximum allowed value for an
|
||||
--echo # Auto Increment column (positive maximum)
|
||||
|
||||
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||
|
||||
INSERT INTO t(c2) VALUES (10);
|
||||
INSERT INTO t(c2) VALUES (20);
|
||||
INSERT INTO t VALUES (126,30);
|
||||
INSERT INTO t VALUES (127,40);
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t VALUES (128,50);
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t VALUES (129,60);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # Inserting a negative value that goes below minimum allowed value for an
|
||||
--echo # Auto Increment column (negative minimum)
|
||||
|
||||
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||
|
||||
INSERT INTO t(c2) VALUES (10);
|
||||
INSERT INTO t(c2) VALUES (20);
|
||||
INSERT INTO t VALUES (-127,30);
|
||||
INSERT INTO t VALUES (-128,40);
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t VALUES (-129,50);
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t VALUES (-130,60);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # Updating the partition table with a negative Auto Increment value
|
||||
|
||||
eval CREATE TABLE t (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||
|
||||
INSERT INTO t(c2) VALUES (10);
|
||||
INSERT INTO t(c2) VALUES (20);
|
||||
INSERT INTO t VALUES (-1,-10);
|
||||
INSERT INTO t(c2) VALUES (30);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
if (!$skip_update)
|
||||
{
|
||||
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||
}
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
INSERT INTO t(c2) VALUES (40);
|
||||
INSERT INTO t(c2) VALUES (50);
|
||||
|
||||
if (!$skip_update)
|
||||
{
|
||||
UPDATE t SET c1 = -6 WHERE c1 = 2;
|
||||
}
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # Updating the partition table with a value that crosses the upper limits
|
||||
--echo # on both the positive and the negative side.
|
||||
|
||||
eval CREATE TABLE t (c1 TINYINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(c1),
|
||||
c2 INT) ENGINE=$engine PARTITION BY HASH(c1) PARTITIONS 4;
|
||||
|
||||
INSERT INTO t(c2) VALUES (10);
|
||||
INSERT INTO t(c2) VALUES (20);
|
||||
INSERT INTO t VALUES (126,30);
|
||||
INSERT INTO t VALUES (127,40);
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
if (!$skip_update)
|
||||
{
|
||||
UPDATE t SET c1 = 130 where c1 = 127;
|
||||
}
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
if (!$skip_update)
|
||||
{
|
||||
UPDATE t SET c1 = -140 where c1 = 126;
|
||||
}
|
||||
|
||||
SELECT * FROM t ORDER BY c1 ASC;
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
if (!$skip_update)
|
||||
{
|
||||
eval CREATE TABLE t1
|
||||
(a INT NULL AUTO_INCREMENT,
|
||||
UNIQUE KEY (a))
|
||||
ENGINE=$engine
|
||||
PARTITION BY KEY(a) PARTITIONS 2;
|
||||
SET LAST_INSERT_ID = 999;
|
||||
SET INSERT_ID = 0;
|
||||
INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM t1;
|
||||
INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM t1;
|
||||
UPDATE t1 SET a = 1 WHERE a IS NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM t1;
|
||||
UPDATE t1 SET a = NULL WHERE a = 1;
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
}
|
||||
|
||||
|
||||
--echo ##############################################################################
|
||||
}
|
||||
113
build/lib/mysql/mysql-test/suite/parts/inc/partition_basic.inc
Normal file
113
build/lib/mysql/mysql-test/suite/parts/inc/partition_basic.inc
Normal file
@@ -0,0 +1,113 @@
|
||||
################################################################################
|
||||
# inc/partition_basic.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Basic tests around create partitioned table with/without PRIMARY KEY and #
|
||||
# /or UNIQUE INDEX #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
--enable_abort_on_error
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # Check partitioning methods on just created tables
|
||||
--echo # The tables should be defined without/with PRIMARY KEY and
|
||||
--echo # UNIQUE INDEXes.
|
||||
--echo # Every test round has to check
|
||||
--echo # PARTITION BY HASH/KEY/LIST/RANGE
|
||||
--echo # PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ...
|
||||
--echo #========================================================================
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1 Tables without PRIMARY KEY or UNIQUE INDEXes
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.1 The partitioning function contains one column.
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
#
|
||||
--echo # 1.2 The partitioning function contains two columns.
|
||||
let $unique= ;
|
||||
--source suite/parts/inc/partition_methods2.inc
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2 Tables with PRIMARY KEY and/or UNIQUE INDEXes
|
||||
--echo # The partitioning function contains one column.
|
||||
--echo #------------------------------------------------------------------------
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.1 PRIMARY KEY consisting of one column
|
||||
let $unique= , PRIMARY KEY(f_int1);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
}
|
||||
--echo # 2.2 UNIQUE INDEX consisting of one column
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
#
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 2.3 PRIMARY KEY consisting of two columns
|
||||
let $unique= , PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
let $unique= , PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
}
|
||||
#
|
||||
--echo # 2.4 UNIQUE INDEX consisting of two columns
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
#
|
||||
}
|
||||
--echo # 2.5 PRIMARY KEY + UNIQUE INDEX consisting of two columns
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
}
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_methods1.inc
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3 Tables with PRIMARY KEY and/or UNIQUE INDEXes
|
||||
--echo # The partitioning function contains two columns.
|
||||
--echo #------------------------------------------------------------------------
|
||||
#
|
||||
if ($more_pk_ui_tests)
|
||||
{
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
--echo # 3.1 PRIMARY KEY consisting of two columns
|
||||
let $unique= , PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_methods2.inc
|
||||
|
||||
let $unique= , PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_methods2.inc
|
||||
}
|
||||
#
|
||||
--echo # 3.2 UNIQUE INDEX consisting of two columns
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_methods2.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_methods2.inc
|
||||
}
|
||||
#
|
||||
--echo # 3.3 PRIMARY KEY and UNIQUE INDEX consisting of two columns
|
||||
if ($do_pk_tests)
|
||||
{
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), PRIMARY KEY(f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_methods2.inc
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int2,f_int1), PRIMARY KEY(f_int1,f_int2);
|
||||
--source suite/parts/inc/partition_methods2.inc
|
||||
}
|
||||
let $unique= , UNIQUE INDEX uidx1 (f_int1,f_int2), UNIQUE INDEX uidx2 (f_int2,f_int1);
|
||||
--source suite/parts/inc/partition_methods2.inc
|
||||
@@ -0,0 +1,44 @@
|
||||
################################################################################
|
||||
# inc/partition_basic_symlink.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Basic tests around create partitioned table with/without PRIMARY KEY and #
|
||||
# /or UNIQUE INDEX #
|
||||
# Also includes test for DATA/INDEX DIR which requires symlinked files #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: mattiasj #
|
||||
# Change Date: 2008-02-06 #
|
||||
# Change: copied it from partition_basic.inc and kept DATA/INDEX DIR #
|
||||
################################################################################
|
||||
--enable_abort_on_error
|
||||
|
||||
--echo
|
||||
let $unique= ;
|
||||
|
||||
# DATA DIRECTORY
|
||||
# Make directory for partition data
|
||||
let $data_dir_path= $MYSQLTEST_VARDIR/mysql-test-data-dir;
|
||||
--mkdir $data_dir_path
|
||||
let $data_directory= DATA DIRECTORY = '$data_dir_path';
|
||||
|
||||
#INDEX DIRECTORY
|
||||
# Make directory for partition index
|
||||
let $idx_dir_path= $MYSQLTEST_VARDIR/mysql-test-idx-dir;
|
||||
--mkdir $idx_dir_path
|
||||
let $index_directory= INDEX DIRECTORY = '$idx_dir_path';
|
||||
|
||||
let $with_directories= 1;
|
||||
--echo #========================================================================
|
||||
--echo # 0.5 use partition_basic with DATA/INDEX DIRECTORY
|
||||
--echo #========================================================================
|
||||
--source suite/parts/inc/partition_basic.inc
|
||||
--echo #========================================================================
|
||||
--echo # 5 use partition_directory with DATA/INDEX DIRECTORY
|
||||
--echo #========================================================================
|
||||
--source suite/parts/inc/partition_directory.inc
|
||||
--rmdir $data_dir_path
|
||||
--rmdir $idx_dir_path
|
||||
let $with_directories= 0;
|
||||
@@ -0,0 +1,54 @@
|
||||
eval create table t1 (a bigint unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE), (18446744073709551613), (18446744073709551612), (1), (2), (65535);
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
select * from t1 where a=-2;
|
||||
delete from t1 where a=-2;
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
select * from t1 where a=18446744073709551615;
|
||||
delete from t1 where a=18446744073709551615;
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a bigint unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 8;
|
||||
show create table t2;
|
||||
insert into t2 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE), (18446744073709551613), (18446744073709551612);
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
select * from t2 where a=18446744073709551615;
|
||||
delete from t2 where a=18446744073709551615;
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=$maxrows;
|
||||
--echo $maxrows inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values ($count);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a bigint not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 7;
|
||||
show create table t3;
|
||||
insert into t3 values (9223372036854775807), (9223372036854775806), (9223372036854775805), (9223372036854775804), (-9223372036854775808), (-9223372036854775807), (1), (-1), (0);
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
select * from t3 where a=9223372036854775806;
|
||||
delete from t3 where a=9223372036854775806;
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
@@ -0,0 +1,88 @@
|
||||
--echo ---- Partitioning and binary data type
|
||||
|
||||
eval create table t1 (a binary(255) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (repeat('a',255)), ('b'), (repeat('a',128)), (repeat('b',64));
|
||||
select hex(a) from t1;
|
||||
select a from t1 where substr(a,1,2)='b\0';
|
||||
update t1 set a='cc' where substr(a,1,2)= 'b\0';
|
||||
select a from t1 where substr(a,1,1)='c';
|
||||
delete from t1 where substr(a,1,2)='cc';
|
||||
select hex(a) from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a binary(255) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 27;
|
||||
show create table t2;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t2;
|
||||
select hex(a) from t2;
|
||||
drop table t2;
|
||||
|
||||
# mleich: Several partitioning functions are no more allowed.
|
||||
if (0)
|
||||
{
|
||||
eval create table t3 (a binary(255) not null, primary key(a)) engine=$engine
|
||||
partition by range (ascii(a)) subpartition by key (a) subpartitions 4 (
|
||||
partition pa16 values less than (16),
|
||||
partition pa32 values less than (32),
|
||||
partition pa64 values less than (64),
|
||||
partition pa128 values less than (128),
|
||||
partition pa256 values less than (256)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select hex(a) from t3;
|
||||
drop table t3;
|
||||
|
||||
|
||||
eval create table t4 (a binary(255) not null, primary key(a)) engine=$engine
|
||||
partition by list (ascii(a)) subpartition by key (a) subpartitions 4 (
|
||||
partition pa16 values in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),
|
||||
partition pa32 values in (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32),
|
||||
partition pa64 values in (33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64),
|
||||
partition pa128 values in (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128),
|
||||
partition pa256 values in (129,130,131,132,133,134,135,136,137,138,139,140
|
||||
,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
|
||||
select count(*) from t4;
|
||||
select hex(a) from t4;
|
||||
drop table t4;
|
||||
}
|
||||
# End of tests with disallowed partitioning functions.
|
||||
110
build/lib/mysql/mysql-test/suite/parts/inc/partition_bit.inc
Normal file
110
build/lib/mysql/mysql-test/suite/parts/inc/partition_bit.inc
Normal file
@@ -0,0 +1,110 @@
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
--error ER_TOO_BIG_DISPLAYWIDTH
|
||||
eval create table t1 (a bit(65), primary key (a)) engine=$engine partition by key (a);
|
||||
|
||||
eval create table t1 (a bit(0), primary key (a)) engine=$engine partition by key (a);
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t1 (a bit(0), primary key (a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1,
|
||||
partition pa2);
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t1 (a bit(64), primary key (a)) engine=$engine
|
||||
partition by key (a) partitions 2;
|
||||
show create table t1;
|
||||
insert into t1 values
|
||||
(b'1111111111111111111111111111111111111111111111111111111111111111'),
|
||||
(b'1000000000000000000000000000000000000000000000000000000000000000'),
|
||||
(b'0000000000000000000000000000000000000000000000000000000000000001'),
|
||||
(b'1010101010101010101010101010101010101010101010101010101010101010'),
|
||||
(b'0101010101010101010101010101010101010101010101010101010101010101');
|
||||
--sorted_result
|
||||
select hex(a) from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t1 (a bit(64), primary key (a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values
|
||||
(b'1111111111111111111111111111111111111111111111111111111111111111'),
|
||||
(b'1000000000000000000000000000000000000000000000000000000000000000'),
|
||||
(b'0000000000000000000000000000000000000000000000000000000000000001'),
|
||||
(b'1010101010101010101010101010101010101010101010101010101010101010'),
|
||||
(b'0101010101010101010101010101010101010101010101010101010101010101');
|
||||
select hex(a) from t1 where a=b'0101010101010101010101010101010101010101010101010101010101010101';
|
||||
delete from t1 where a=b'0101010101010101010101010101010101010101010101010101010101010101';
|
||||
--sorted_result
|
||||
select hex(a) from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a bit, primary key (a)) engine=$engine
|
||||
partition by key (a) partitions 4;
|
||||
show create table t2;
|
||||
insert into t2 values (b'0'), (b'1');
|
||||
--sorted_result
|
||||
select hex(a) from t2;
|
||||
alter table t2 drop primary key;
|
||||
show create table t2;
|
||||
--sorted_result
|
||||
select hex(a) from t2;
|
||||
alter table t2 add primary key (a);
|
||||
show create table t2;
|
||||
--sorted_result
|
||||
select hex(a) from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a bit(8), primary key (a)) engine=$engine
|
||||
partition by range (a) subpartition by key (a) subpartitions 2 (
|
||||
partition pa1 values less than (3),
|
||||
partition pa2 values less than (16),
|
||||
partition pa3 values less than (64),
|
||||
partition pa4 values less than (256));
|
||||
show create table t3;
|
||||
let $count=255;
|
||||
--echo $count inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values ($count);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select hex(a) from t3 where a=b'01010101';
|
||||
delete from t3 where a=b'01010101';
|
||||
select count(*) from t3;
|
||||
--sorted_result
|
||||
select hex(a) from t3;
|
||||
drop table t3;
|
||||
|
||||
eval create table t4 (a bit(8), primary key (a)) engine=$engine
|
||||
partition by list (a) subpartition by key (a) subpartitions 2 (
|
||||
partition pa1 values in (0,1,2,3),
|
||||
partition pa2 values in (4,5,6,7,8,9,10,11,12,13,14,15,16),
|
||||
partition pa3 values in (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32));
|
||||
show create table t4;
|
||||
let $count=32;
|
||||
--echo $count inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values ($count);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select hex(a) from t4 where a=b'00000001';
|
||||
delete from t4 where a=b'00000001';
|
||||
select count(*) from t4;
|
||||
--sorted_result
|
||||
select hex(a) from t4;
|
||||
drop table t4;
|
||||
@@ -0,0 +1,50 @@
|
||||
--echo ---- Partitioning and blob data type
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t1 (a blob not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
|
||||
#show create table t1;
|
||||
#insert into t1 values (repeat('a',1000)), ('b'), (repeat('a',500)), (repeat('b',64));
|
||||
#select * from t1;
|
||||
#select * from t1 where a='b';
|
||||
#update t1 set a='bb' where a='b';
|
||||
#delete from t1 where a='bb';
|
||||
#select * from t1;
|
||||
#drop table t1;
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t2 (a blob not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) partitions 30;
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t2 (a tinyblob not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) partitions 30;
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t2 (a mediumblob not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) partitions 30;
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t2 (a longblob not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) partitions 30;
|
||||
|
||||
#show create table t2;
|
||||
#let $count=30;
|
||||
#let $letter=0;
|
||||
#--echo $count inserts;
|
||||
#--disable_query_log
|
||||
#while ($count)
|
||||
#{
|
||||
#eval insert into t2 values (repeat(char(ascii('a')+$letter),$count*$count));
|
||||
#dec $count;
|
||||
#inc $letter;
|
||||
#}
|
||||
#select count(*) from t2;
|
||||
#select * from t2;
|
||||
#drop table t2;
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
################################################################################
|
||||
# t/partition_blocked_sql_funcs.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests around sql functions #
|
||||
# #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: HH #
|
||||
# Original Date: 2006-11-22 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
--echo -------------------------------------------------------------------------
|
||||
--echo --- $sqlfunc in partition with coltype $coltype
|
||||
--echo -------------------------------------------------------------------------
|
||||
--echo must all fail!
|
||||
--disable_warnings
|
||||
drop table if exists t1 ;
|
||||
drop table if exists t2 ;
|
||||
drop table if exists t3 ;
|
||||
drop table if exists t4 ;
|
||||
drop table if exists t5 ;
|
||||
drop table if exists t6 ;
|
||||
--enable_warnings
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval create table t1 (col1 $coltype) engine=$engine
|
||||
partition by range($sqlfunc)
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval create table t2 (col1 $coltype) engine=$engine
|
||||
partition by list($sqlfunc)
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval create table t3 (col1 $coltype) engine=$engine
|
||||
partition by hash($sqlfunc);
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval create table t4 (colint int, col1 $coltype) engine=$engine
|
||||
partition by range(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 2
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval create table t5 (colint int, col1 $coltype) engine=$engine
|
||||
partition by list(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 2
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval create table t6 (colint int, col1 $coltype) engine=$engine
|
||||
partition by range(colint)
|
||||
(partition p0 values less than ($valsqlfunc),
|
||||
partition p1 values less than maxvalue);
|
||||
|
||||
--disable_abort_on_error
|
||||
--disable_warnings
|
||||
drop table if exists t11 ;
|
||||
drop table if exists t22 ;
|
||||
drop table if exists t33 ;
|
||||
drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
--enable_warnings
|
||||
|
||||
eval create table t11 (col1 $coltype) engine=$engine ;
|
||||
|
||||
eval create table t22 (col1 $coltype) engine=$engine ;
|
||||
|
||||
eval create table t33 (col1 $coltype) engine=$engine ;
|
||||
|
||||
eval create table t44 (colint int, col1 $coltype) engine=$engine ;
|
||||
|
||||
eval create table t55 (colint int, col1 $coltype) engine=$engine ;
|
||||
|
||||
eval create table t66 (colint int, col1 $coltype) engine=$engine ;
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval alter table t11
|
||||
partition by range($sqlfunc)
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval alter table t22
|
||||
partition by list($sqlfunc)
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval alter table t33
|
||||
partition by hash($sqlfunc);
|
||||
--enable_abort_on_error
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval alter table t44
|
||||
partition by range(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 2
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than (31));
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval alter table t55
|
||||
partition by list(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 2
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30));
|
||||
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED,ER_PARSE_ERROR
|
||||
eval alter table t66
|
||||
partition by range(colint)
|
||||
(partition p0 values less than ($valsqlfunc),
|
||||
partition p1 values less than maxvalue);
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1 ;
|
||||
drop table if exists t2 ;
|
||||
drop table if exists t3 ;
|
||||
drop table if exists t4 ;
|
||||
drop table if exists t5 ;
|
||||
drop table if exists t6 ;
|
||||
drop table if exists t11 ;
|
||||
drop table if exists t22 ;
|
||||
drop table if exists t33 ;
|
||||
drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
--enable_warnings
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
--echo ---- Partitioning and char data type
|
||||
|
||||
eval create table t1 (a char(255) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (repeat('a',255)), ('b'), (repeat('a',128)), (repeat('b',64));
|
||||
select * from t1;
|
||||
select * from t1 where a='b';
|
||||
update t1 set a='bb' where a='b';
|
||||
delete from t1 where a='bb';
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a char(255) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 27;
|
||||
show create table t2;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
# mleich: Several partitioning functions are no more allowed.
|
||||
if (0)
|
||||
{
|
||||
eval create table t3 (a char(255) not null, primary key(a)) engine=$engine
|
||||
partition by range (ascii(a)) subpartition by key (a) subpartitions 4 (
|
||||
partition pa16 values less than (16),
|
||||
partition pa32 values less than (32),
|
||||
partition pa64 values less than (64),
|
||||
partition pa128 values less than (128),
|
||||
partition pa256 values less than (256)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select a from t3;
|
||||
drop table t3;
|
||||
|
||||
eval create table t4 (a char(255) not null, primary key(a)) engine=$engine
|
||||
partition by list (ascii(a)) subpartition by key (a) subpartitions 4 (
|
||||
partition pa16 values in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),
|
||||
partition pa32 values in (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32),
|
||||
partition pa64 values in (33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64),
|
||||
partition pa128 values in (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128),
|
||||
partition pa256 values in (129,130,131,132,133,134,135,136,137,138,139,140
|
||||
,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t4;
|
||||
select a from t4;
|
||||
drop table t4;
|
||||
}
|
||||
# End of tests with disallowed partitioning functions.
|
||||
1159
build/lib/mysql/mysql-test/suite/parts/inc/partition_check.inc
Normal file
1159
build/lib/mysql/mysql-test/suite/parts/inc/partition_check.inc
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,75 @@
|
||||
################################################################################
|
||||
# inc/partition_check_drop.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Check that a drop table removes all files belonging to this table. #
|
||||
# Remaining unused files can be caused by imperfect DROP TABLE or #
|
||||
# ALTER TABLE <alter partitioning>. #
|
||||
# #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-05-12 #
|
||||
################################################################################
|
||||
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
|
||||
# Get the MySQL Servers datadir without ending slash
|
||||
let $MYSQLD_DATADIR= `select LEFT(@@datadir, LENGTH(@@datadir)-1)`;
|
||||
#echo MYSQLD_DATADIR: $MYSQLD_DATADIR;
|
||||
|
||||
if ($do_file_tests)
|
||||
{
|
||||
let $ls_file= $MYSQLD_DATADIR/test/tmp2;
|
||||
# List the files belonging to the table t1
|
||||
--list_files_write_file $ls_file $MYSQLD_DATADIR/test t1*
|
||||
--chmod 0644 $ls_file
|
||||
if ($with_directories)
|
||||
{
|
||||
--list_files_append_file $ls_file $MYSQLTEST_VARDIR/tmp t1*
|
||||
}
|
||||
eval SET @aux = load_file('$ls_file');
|
||||
|
||||
# clean up
|
||||
remove_file $ls_file;
|
||||
}
|
||||
if (!$do_file_tests)
|
||||
{
|
||||
SET @aux = '--- not determined ---';
|
||||
}
|
||||
|
||||
# UPDATE the current filelist of the table t1 within t0_definition
|
||||
# Note: This list should be empty, because the table t1 was dropped !
|
||||
eval INSERT INTO t0_definition SET state = 'old', file_list = @aux
|
||||
ON DUPLICATE KEY UPDATE file_list = @aux;
|
||||
# eval UPDATE t0_definition SET file_list = @aux WHERE state = 'old';
|
||||
|
||||
# Check if filelist is empty.
|
||||
let $found_garbage= `SELECT file_list <> '' FROM t0_definition WHERE state = 'old'`;
|
||||
if ($found_garbage)
|
||||
{
|
||||
# Unfortunately the DROP TABLE did not remove the unused files
|
||||
if ($ls)
|
||||
{
|
||||
--echo # Attention: There are unused files.
|
||||
--echo # Either the DROP TABLE or a preceding ALTER TABLE
|
||||
--echo # <alter partitioning> worked incomplete.
|
||||
--echo # We found:
|
||||
# Print the list of files into the protocol
|
||||
eval SELECT REPLACE(file_list,'$MYSQLTEST_VARDIR','\$MYSQLTEST_VARDIR')
|
||||
AS "unified filelist"
|
||||
FROM t0_definition WHERE state = 'old';
|
||||
}
|
||||
# Do a manual cleanup, because the following tests should not suffer from
|
||||
# remaining files
|
||||
--remove_files_wildcard $MYSQLD_DATADIR/test t1*
|
||||
if ($with_directories)
|
||||
{
|
||||
--remove_files_wildcard $MYSQLTEST_VARDIR/tmp t1*
|
||||
}
|
||||
}
|
||||
--enable_query_log
|
||||
@@ -0,0 +1,89 @@
|
||||
################################################################################
|
||||
# inc/partition_check_read.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Read table t1 row by row #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. #
|
||||
# #
|
||||
# Note: If this routine is successful, at least the following is fullfilled #
|
||||
# - select single row via $col_to_check basically works -- no crash #
|
||||
# - the table contains all expected rows #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
let $success= 1;
|
||||
|
||||
## Read all existing records
|
||||
let $num= `SELECT @max_row`;
|
||||
while ($num)
|
||||
{
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT COUNT(*) <> 1 INTO @aux FROM t1 WHERE $col_to_check = $num;
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> 1 FROM t1 WHERE $col_to_check = $num;
|
||||
let $success= 0;
|
||||
}
|
||||
dec $num;
|
||||
}
|
||||
## Read some not existing records
|
||||
let $num= `SELECT @max_row_div2`;
|
||||
while ($num)
|
||||
{
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT COUNT(*) = 1 INTO @aux FROM t1 WHERE $col_to_check = @max_row + $num;
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> 1 FROM t1 WHERE $col_to_check = @max_row + $num;
|
||||
let $success= 0;
|
||||
}
|
||||
dec $num;
|
||||
}
|
||||
let $num= `SELECT @max_row_div2`;
|
||||
while ($num)
|
||||
{
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT COUNT(*) = 1 INTO @aux FROM t1 WHERE $col_to_check = 1 - $num;
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> 1 FROM t1 WHERE $col_to_check = 1 - $num;
|
||||
let $success= 0;
|
||||
}
|
||||
dec $num;
|
||||
}
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
--echo # check read via $col_to_check success: $success
|
||||
# mleich: The following is omitted because of not reported mysqltest bug
|
||||
# (@max_row time the success message)
|
||||
if (0)
|
||||
{
|
||||
eval SELECT '# check read via $col_to_check success: ' AS "", $success AS "" FROM t1;
|
||||
}
|
||||
--enable_query_log
|
||||
@@ -0,0 +1,79 @@
|
||||
################################################################################
|
||||
# inc/partition_check_read1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Read rows from table t1 in different ways #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. #
|
||||
# #
|
||||
# The parameter #
|
||||
# @exp_row_count -- expected number of rows within t1 #
|
||||
# must be set before sourcing this routine. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-04-11 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
## EXPLAIN PARTITIONS SELECT for one single row
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
|
||||
## Check SELECT for one single row
|
||||
let $success= 1;
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
SELECT COUNT(*) <> 1 INTO @aux FROM t1 WHERE f_date = '1000-02-10';
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> 1 FROM t1 WHERE f_date = '1000-02-10';
|
||||
let $success= 0;
|
||||
}
|
||||
--echo # check read single success: $success
|
||||
|
||||
## Read all existing records in one step
|
||||
let $success= 1;
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT COUNT(*) <> @exp_row_count INTO @aux FROM t1;
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> @exp_row_count FROM t1;
|
||||
let $success= 0;
|
||||
}
|
||||
--echo # check read all success: $success
|
||||
|
||||
## Read all existing records row by row
|
||||
let $success= 1;
|
||||
let $num= `SELECT @exp_row_count`;
|
||||
while ($num)
|
||||
{
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT COUNT(*) <> 1 INTO @aux FROM t1
|
||||
WHERE f_date = CONCAT(CAST(999 + $num AS CHAR),'-02-10');
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> 1 FROM t1
|
||||
WHERE f_date = CONCAT(CAST(999 + $num AS CHAR),'-02-10');
|
||||
let $success= 0;
|
||||
}
|
||||
dec $num;
|
||||
}
|
||||
--echo # check read row by row success: $success
|
||||
@@ -0,0 +1,75 @@
|
||||
################################################################################
|
||||
# inc/partition_check_read2.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Read rows from table t1 in different ways #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-04-11 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
## EXPLAIN PARTITIONS SELECT for one single row
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
|
||||
## Check SELECT for one single row
|
||||
let $success= 1;
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
SELECT COUNT(*) <> 1 INTO @aux FROM t1 WHERE f_int1 = 3;
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
let $success= 0;
|
||||
}
|
||||
--echo # check read single success: $success
|
||||
|
||||
## Read all existing records in one step
|
||||
let $success= 1;
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT COUNT(*) <> @max_row INTO @aux FROM t1;
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> @max_row FROM t1;
|
||||
let $success= 0;
|
||||
}
|
||||
--echo # check read all success: $success
|
||||
|
||||
## Read all existing records row by row
|
||||
let $success= 1;
|
||||
let $num= `SELECT @max_row`;
|
||||
while ($num)
|
||||
{
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT COUNT(*) <> 1 INTO @aux FROM t1
|
||||
WHERE f_int1 = 3;
|
||||
--enable_query_log
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # Unexpected result on SELECT
|
||||
eval SELECT COUNT(*) <> 1 FROM t1
|
||||
WHERE f_int1 = 3;
|
||||
let $success= 0;
|
||||
}
|
||||
dec $num;
|
||||
}
|
||||
--echo # check read row by row success: $success
|
||||
@@ -0,0 +1,22 @@
|
||||
################################################################################
|
||||
# inc/partition_cleanup.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Removal of the objects created by the t/partition_<feature>_<engine>.test #
|
||||
# scripts. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--disable_warnings
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t0_aux;
|
||||
DROP TABLE IF EXISTS t0_definition;
|
||||
DROP TABLE IF EXISTS t0_template;
|
||||
--enable_warnings
|
||||
@@ -0,0 +1,77 @@
|
||||
eval create table t1 (a date not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values ('1975-01-01'), ('2020-12-31'), ('1980-10-14'), ('2000-06-15');
|
||||
select * from t1;
|
||||
select * from t1 where a=19801014;
|
||||
delete from t1 where a=19801014;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a date not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 12;
|
||||
show create table t2;
|
||||
insert into t2 values ('1975-01-01'), ('2020-12-31'), ('1980-10-14'), ('2000-06-15');
|
||||
select * from t2;
|
||||
select * from t2 where a='1980-10-14';
|
||||
delete from t2 where a='1980-10-14';
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=28;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (19700101+$count-1);
|
||||
eval insert into t2 values (19700201+$count-1);
|
||||
eval insert into t2 values (19700301+$count-1);
|
||||
dec $count;
|
||||
}
|
||||
#--enable_query_log
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a date not null, primary key(a)) engine=$engine
|
||||
partition by range (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values less than (4),
|
||||
partition quarter2 values less than (7),
|
||||
partition quarter3 values less than (10),
|
||||
partition quarter4 values less than (13)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=12;
|
||||
--echo $count inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values (adddate(19700101,interval $count-1 month));
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
|
||||
eval create table t4 (a date not null, primary key(a)) engine=$engine
|
||||
partition by list (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values in (1,2,3),
|
||||
partition quarter2 values in (4,5,6),
|
||||
partition quarter3 values in (7,8,9),
|
||||
partition quarter4 values in (10,11,12)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=12;
|
||||
--echo $count inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values (adddate(19700101,interval $count-1 month));
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t4;
|
||||
select * from t4;
|
||||
drop table t4;
|
||||
@@ -0,0 +1,74 @@
|
||||
eval create table t1 (a datetime not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values ('1975-01-01 21:21:21'), ('2020-12-31 12:10:30'), ('1980-10-14 03:03'), ('2000-06-15 23:59');
|
||||
select * from t1;
|
||||
select * from t1 where a=19801014030300;
|
||||
delete from t1 where a=19801014030300;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a datetime not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 12;
|
||||
show create table t2;
|
||||
insert into t2 values ('1975-01-01 0:1:1'), ('2020-12-31 10:11:12'), ('1980-10-14 13:14:15'), ('2000-06-15 14:15:16');
|
||||
select * from t2;
|
||||
select * from t2 where a='1980-10-14 13:14:15';
|
||||
delete from t2 where a='1980-10-14 13:14:15';
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=59;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (19700101000000+$count);
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a datetime not null, primary key(a)) engine=$engine
|
||||
partition by range (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values less than (4),
|
||||
partition quarter2 values less than (7),
|
||||
partition quarter3 values less than (10),
|
||||
partition quarter4 values less than (13)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=12;
|
||||
--echo $count inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values (adddate(19700101000000,interval $count-1 month));
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
|
||||
eval create table t4 (a datetime not null, primary key(a)) engine=$engine
|
||||
partition by list (month(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values in (1,2,3),
|
||||
partition quarter2 values in (4,5,6),
|
||||
partition quarter3 values in (7,8,9),
|
||||
partition quarter4 values in (10,11,12)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=12;
|
||||
--echo $count inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values (adddate(19700101000000,interval $count-1 month));
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t4;
|
||||
select * from t4;
|
||||
drop table t4;
|
||||
@@ -0,0 +1,85 @@
|
||||
eval create table t1 (a decimal(10,4) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (999999.9999), (-999999.9999), (123456.7899), (-123456.7899), (-1.5), (1), (0), (-1), (1.5), (1234.567), (-1234.567);
|
||||
select * from t1;
|
||||
select * from t1 where a=1234.567;
|
||||
delete from t1 where a=1234.567;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a decimal(18,9) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 10;
|
||||
show create table t2;
|
||||
insert into t2 values (999999999.999999999), (-999999999.999999999), (-1.5), (-1), (0), (1.5), (1234.567), (-1234.567);
|
||||
select * from t2;
|
||||
select * from t2 where a=1234.567;
|
||||
delete from t2 where a=1234.567;
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=$maxrows;
|
||||
--echo $count*3 inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values ($count);
|
||||
eval insert into t2 values ($count+0.333333333);
|
||||
eval insert into t2 values ($count+0.755555555);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
drop table t2;
|
||||
|
||||
# Bug 30577: FLOOR() and CEILING() not usable as partition functions
|
||||
# Partition functions are required to return INT_RESULT; FLOOR() and
|
||||
# CEILING() do not, unless they have an INT or DECIMAL argument.
|
||||
|
||||
|
||||
eval create table t3 (a decimal(18,9) not null, primary key(a)) engine=$engine
|
||||
partition by range (floor(a)) subpartition by key (a) subpartitions 2 (
|
||||
partition pa2 values less than (2),
|
||||
partition pa4 values less than (4),
|
||||
partition pa6 values less than (6),
|
||||
partition pa8 values less than (8),
|
||||
partition pa10 values less than (10)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=9;
|
||||
--echo $count*3 inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values ($count);
|
||||
eval insert into t3 values ($count+0.333333333);
|
||||
eval insert into t3 values ($count+0.755555555);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t3;
|
||||
drop table t3;
|
||||
|
||||
eval create table t4 (a decimal(18,9) not null, primary key(a)) engine=$engine
|
||||
partition by list (ceiling(a)) subpartition by key (a) subpartitions 2 (
|
||||
partition pa2 values in (1,2),
|
||||
partition pa4 values in (3,4),
|
||||
partition pa6 values in (5,6),
|
||||
partition pa8 values in (7,8),
|
||||
partition pa10 values in (9,10)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=9;
|
||||
--echo $count*3 inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values ($count);
|
||||
eval insert into t4 values ($count+0.333333333);
|
||||
eval insert into t4 values ($count+0.755555555);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t4;
|
||||
drop table t4;
|
||||
@@ -0,0 +1,219 @@
|
||||
################################################################################
|
||||
# inc/partition_directory.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Create and check partitioned tables #
|
||||
# The partitioning function use the column f_int1 #
|
||||
# #
|
||||
# For all Data/Index directory combinations #
|
||||
# do #
|
||||
# 1. Create the partitioned table #
|
||||
# 2 Insert the content of the table t0_template into t1 #
|
||||
# 3. Execute inc/partition_check.inc #
|
||||
# 4. Drop the table t1 #
|
||||
# done #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: HH #
|
||||
# Original Date: 2006-05-11 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
let $partitioning= ;
|
||||
#----------- PARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY HASH(f_int1) PARTITIONS 2;
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY HASH(f_int1) PARTITIONS 2
|
||||
(PARTITION p1
|
||||
$index_directory,
|
||||
PARTITION p2
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY KEY(f_int1) PARTITIONS 5;
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY HASH(f_int1) PARTITIONS 5
|
||||
(PARTITION p1
|
||||
$data_directory,
|
||||
PARTITION p2
|
||||
$index_directory,
|
||||
PARTITION p3
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p4,
|
||||
PARTITION p5
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY LIST
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(MOD(f_int1,4))
|
||||
(PARTITION part_3 VALUES IN (-3)
|
||||
$index_directory,
|
||||
PARTITION part_2 VALUES IN (-2)
|
||||
$data_directory,
|
||||
PARTITION part_1 VALUES IN (-1)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part_N VALUES IN (NULL)
|
||||
$data_directory,
|
||||
PARTITION part0 VALUES IN (0)
|
||||
$index_directory,
|
||||
PARTITION part1 VALUES IN (1)
|
||||
,
|
||||
PARTITION part2 VALUES IN (2)
|
||||
$data_directory,
|
||||
PARTITION part3 VALUES IN (3)
|
||||
$data_directory $index_directory);
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY RANGE
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1)
|
||||
(PARTITION parta VALUES LESS THAN (0)
|
||||
$index_directory,
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4)
|
||||
$data_directory,
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partd VALUES LESS THAN ($max_row_div2 + $max_row_div4),
|
||||
PARTITION parte VALUES LESS THAN ($max_row)
|
||||
$data_directory,
|
||||
PARTITION partf VALUES LESS THAN $MAX_VALUE
|
||||
$index_directory);
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
(PARTITION parta VALUES LESS THAN (0)
|
||||
$index_directory,
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4)
|
||||
$data_directory,
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN $MAX_VALUE
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
# use the new (from bug#14326) partitioning format (i.e. multi-line comments)
|
||||
let $partitioning=
|
||||
/*!50100 PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY KEY(f_int1)
|
||||
(PARTITION part1 VALUES LESS THAN (0) $data_directory
|
||||
(SUBPARTITION subpart11,
|
||||
SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN ($max_row_div4) $index_directory
|
||||
(SUBPARTITION subpart21,
|
||||
SUBPARTITION subpart22),
|
||||
PARTITION part3 VALUES LESS THAN ($max_row_div2) $data_directory $index_directory
|
||||
(SUBPARTITION subpart31,
|
||||
SUBPARTITION subpart32),
|
||||
PARTITION part4 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart41,
|
||||
SUBPARTITION subpart42)) */;
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
# use the old (pre bug#14326) format (i.e. one line comment)
|
||||
let $partitioning= /*!50100 PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1) (PARTITION part1 VALUES IN (0) $index_directory (SUBPARTITION sp11 $data_directory, SUBPARTITION sp12 $index_directory), PARTITION part2 VALUES IN (1) $data_directory (SUBPARTITION sp21 $data_directory, SUBPARTITION sp22 $index_directory), PARTITION part3 VALUES IN (2) $data_directory $index_directory (SUBPARTITION sp31, SUBPARTITION sp32), PARTITION part4 VALUES IN (NULL) (SUBPARTITION sp41 $data_directory $index_directory, SUBPARTITION sp42 $data_directory $index_directory)) */;
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
let $with_directories= FALSE;
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
eval create table t1 (a double not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (-2.2250738585072014E+208), (-2.2250738585072014E-208), (-1.5), (-1), (0), (1.5), (1234.567), (2.2250738585072014E+208);
|
||||
select * from t1;
|
||||
select * from t1 where a=1.5;
|
||||
delete from t1 where a=1.5;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a double not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 10;
|
||||
show create table t2;
|
||||
insert into t2 values (-2.2250738585072014E+208), (-2.2250738585072014E-208), (-1.5), (-1), (0), (1.5), (1234.567), (2.2250738585072014E+208);
|
||||
select * from t2;
|
||||
select * from t2 where a=1234.567;
|
||||
delete from t2 where a=1234.567;
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=$maxrows;
|
||||
--echo $maxrows*3 inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values ($count);
|
||||
eval insert into t2 values ($count+0.33);
|
||||
eval insert into t2 values ($count+0.75);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
drop table t2;
|
||||
289
build/lib/mysql/mysql-test/suite/parts/inc/partition_engine.inc
Normal file
289
build/lib/mysql/mysql-test/suite/parts/inc/partition_engine.inc
Normal file
@@ -0,0 +1,289 @@
|
||||
################################################################################
|
||||
# inc/partition_engine.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests around Create/Alter partitioned tables and storage engine settings #
|
||||
# at different places within the statement. #
|
||||
# This routine is only useful for the partition_<feature>_<engine> tests. #
|
||||
# #
|
||||
# Note: There were some problems in history. #
|
||||
# It looks like a table holds informations about the storage engine #
|
||||
# for #
|
||||
# "the whole table" -> in statement after column list before partitioning #
|
||||
# a partition -> in statement after definition of partition #
|
||||
# a subpartition -> in statement after definition of subpartition #
|
||||
# If there is a CREATE TABLE statement where not at all of these place #
|
||||
# a storage engine is assigned, the server must decide by itself whic #
|
||||
# storage engine to use. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # Checks where the engine is assigned on all supported (CREATE TABLE
|
||||
--echo # statement) positions + basic operations on the tables
|
||||
--echo # Storage engine mixups are currently (2005-12-23) not supported
|
||||
--echo #========================================================================
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1 Assignment of storage engine just after column list only
|
||||
--echo #------------------------------------------------------------------------
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
) ENGINE = $engine
|
||||
PARTITION BY HASH(f_int1) PARTITIONS 2;
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2 Assignment of storage engine just after partition or subpartition
|
||||
--echo # name only
|
||||
--echo #------------------------------------------------------------------------
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 STORAGE ENGINE = $engine,
|
||||
PARTITION part2 STORAGE ENGINE = $engine
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart11 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart12 STORAGE ENGINE = $engine),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart22 STORAGE ENGINE = $engine)
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3 Some but not all named partitions or subpartitions get a storage
|
||||
--echo # engine assigned
|
||||
--echo #------------------------------------------------------------------------
|
||||
--error ER_MIX_HANDLER_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 STORAGE ENGINE = $engine,
|
||||
PARTITION part2
|
||||
);
|
||||
--error ER_MIX_HANDLER_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 ,
|
||||
PARTITION part2 STORAGE ENGINE = $engine
|
||||
);
|
||||
--error ER_MIX_HANDLER_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart11,
|
||||
SUBPARTITION subpart12 STORAGE ENGINE = $engine),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart22 STORAGE ENGINE = $engine)
|
||||
);
|
||||
--error ER_MIX_HANDLER_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart11 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart12 STORAGE ENGINE = $engine),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21,
|
||||
SUBPARTITION subpart22 )
|
||||
);
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
ENGINE = $engine
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart11 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart12 STORAGE ENGINE = $engine),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21,
|
||||
SUBPARTITION subpart22 )
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 4 Storage engine assignment after partition name + after name of
|
||||
--echo # subpartitions belonging to another partition
|
||||
--echo #------------------------------------------------------------------------
|
||||
--error ER_MIX_HANDLER_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart11,
|
||||
SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart22 STORAGE ENGINE = $engine)
|
||||
);
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
ENGINE = $engine
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2) ENGINE = $engine
|
||||
(SUBPARTITION subpart11,
|
||||
SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21,
|
||||
SUBPARTITION subpart22 STORAGE ENGINE = $engine)
|
||||
);
|
||||
DROP TABLE t1;
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2) ENGINE = $engine
|
||||
(SUBPARTITION subpart11,
|
||||
SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart22 STORAGE ENGINE = $engine)
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart11 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart12 STORAGE ENGINE = $engine),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE ENGINE = $engine
|
||||
(SUBPARTITION subpart21 ENGINE = $engine,
|
||||
SUBPARTITION subpart22)
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 5 Precedence of storage engine assignments (if there is any)
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 5.1 Storage engine assignment after column list + after partition
|
||||
--echo # or subpartition name
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
) ENGINE = $engine
|
||||
PARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 STORAGE ENGINE = $engine,
|
||||
PARTITION part2 STORAGE ENGINE = $engine
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart11 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart12 STORAGE ENGINE = $engine),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart22 STORAGE ENGINE = $engine)
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--echo # 6.2 Storage engine assignment after partition name + after
|
||||
--echo # subpartition name
|
||||
--echo # in partition part + in sub partition part
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN ($max_row_div2) STORAGE ENGINE = $engine
|
||||
(SUBPARTITION subpart11 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart12 STORAGE ENGINE = $engine),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart22 STORAGE ENGINE = $engine)
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 6 Session default engine differs from engine used within create table
|
||||
--echo #------------------------------------------------------------------------
|
||||
eval SET SESSION storage_engine=$engine_other;
|
||||
# Bug#16775 Partitions: strange effects on subpartitioned tables, mixed storage engines
|
||||
# Bug#15966 Partitions: crash if session default engine <> engine used in create table
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1) ( PARTITION part1 ENGINE = $engine);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
# Bug#15966 Partitions: crash if session default engine <> engine used in create table
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11 STORAGE ENGINE = $engine,
|
||||
SUBPARTITION subpart12 STORAGE ENGINE = $engine));
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
eval SET SESSION storage_engine=$engine;
|
||||
@@ -0,0 +1,68 @@
|
||||
--echo ---- Partitioning and enum data type
|
||||
|
||||
eval create table t1 (a enum('A','B','C','D','E','F','G','H','I','J','K','L') not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values ('A'),('D'),('L'),('G');
|
||||
select * from t1;
|
||||
select * from t1 where a='A';
|
||||
update t1 set a='E' where a='L';
|
||||
select * from t1;
|
||||
delete from t1 where a='E';
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a enum (
|
||||
'1','2','3','4','5','6','7','8','9','0',
|
||||
'A','B','C','D','E','F','G','H','I','J','K','L',
|
||||
'M','N','O','P','Q','R','S','T','U','V','W','X',
|
||||
'Y','Z'
|
||||
) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 27;
|
||||
show create table t2;
|
||||
let $letter=26;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($letter)
|
||||
{
|
||||
eval insert into t2 values (char(ascii('A')+$letter));
|
||||
dec $letter;
|
||||
}
|
||||
insert into t2 values ('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('0');
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
# mleich: Several partitioning functions are no more allowed.
|
||||
if (0)
|
||||
{
|
||||
eval create table t3 (a enum (
|
||||
'1','2','3','4','5','6','7','8','9','0',
|
||||
'A','B','C','D','E','F','G','H','I','J','K','L',
|
||||
'M','N','O','P','Q','R','S','T','U','V','W','X',
|
||||
'Y','Z'
|
||||
) not null, primary key(a)) engine=$engine
|
||||
partition by range (a) subpartition by key (a) subpartitions 3 (
|
||||
partition pa9 values less than (10),
|
||||
partition pa18 values less than (19),
|
||||
partition pa27 values less than (28),
|
||||
partition pa36 values less than (37)
|
||||
);
|
||||
show create table t3;
|
||||
let $letter=36;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($letter)
|
||||
{
|
||||
#eval insert into t3 values ($letter);
|
||||
dec $letter;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
}
|
||||
# End of tests with disallowed partitioning functions.
|
||||
@@ -0,0 +1,40 @@
|
||||
eval create table t1 (a float not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (-3.402823466E+38), (3.402823466E+38), (-1.5), (-1), (0), (1), (1.5);
|
||||
select * from t1;
|
||||
select * from t1 where a=1.5;
|
||||
delete from t1 where a=1.5;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a float not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 10;
|
||||
show create table t2;
|
||||
insert into t2 values (-3.402823466E+38), (-3.402823466E+37), (-123.456), (0), (1234546.789), (123.456), (1.5);
|
||||
select * from t2;
|
||||
#result set is empty: Not a bug with float!!
|
||||
select * from t2 where a=123.456;
|
||||
delete from t2 where a=123.456;
|
||||
select * from t2;
|
||||
select * from t2 where a=1.5;
|
||||
delete from t2 where a=1.5;
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=$maxrows;
|
||||
--echo $maxrows*3 inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values ($count);
|
||||
eval insert into t2 values ($count+0.33);
|
||||
eval insert into t2 values ($count+0.75);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
drop table t2;
|
||||
50
build/lib/mysql/mysql-test/suite/parts/inc/partition_int.inc
Normal file
50
build/lib/mysql/mysql-test/suite/parts/inc/partition_int.inc
Normal file
@@ -0,0 +1,50 @@
|
||||
eval create table t1 (a int unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (4294967295), (4294967294), (4294967293), (4294967292), (1), (2), (65535);
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
select * from t1 where a=4294967293;
|
||||
delete from t1 where a=4294967293;
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a int unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 8;
|
||||
show create table t2;
|
||||
insert into t2 values (4294967295), (4294967294), (4294967293), (4294967292);
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
select * from t2 where a=4294967293;
|
||||
delete from t2 where a=4294967293;
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=$maxrows;
|
||||
--echo $count inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values ($count);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a int not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 7;
|
||||
show create table t3;
|
||||
insert into t3 values (2147483647), (2147483646), (2147483645), (2147483644), (-2147483648), (-2147483647), (1), (-1), (0);
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
select * from t3 where a=2147483645;
|
||||
delete from t3 where a=2147483645;
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
@@ -0,0 +1,15 @@
|
||||
eval create table t1 (a date not null, b varchar(50) not null, c varchar(50) not null, d enum('m', 'w') not null, e int not null, f decimal (18,2) not null, g bigint not null, h tinyint not null, a1 date not null, b1 varchar(50) not null, c1 varchar(50) not null, d1 enum('m', 'w') not null, e1 int not null, f1 decimal (18,2) not null, g1 bigint not null, h1 tinyint not null, i char(255), primary key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1)) engine=$engine
|
||||
partition by key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values
|
||||
('1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113,'1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113, 'tbhth nrzh ztfghgfh fzh ftzhj fztjh'),
|
||||
('1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127,'1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, 'liuugbzvdmrlti b itiortudirtfgtibm dfi'),
|
||||
('1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124,'1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, 'd,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr'),
|
||||
('2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, '2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, 'pib mdotkbm.m');
|
||||
select * from t1;
|
||||
select * from t1 where a<19851231;
|
||||
drop table t1;
|
||||
@@ -0,0 +1,27 @@
|
||||
--error ER_TOO_MANY_KEY_PARTS
|
||||
eval create table t1 (a date not null, b varchar(50) not null, c varchar(50) not null, d enum('m', 'w') not null, e int not null, f decimal (18,2) not null, g bigint not null, h tinyint not null, a1 date not null, b1 varchar(50) not null, c1 varchar(50) not null, d1 enum('m', 'w') not null, e1 int not null, f1 decimal (18,2) not null, g1 bigint not null, h1 tinyint not null, a2 date not null, b2 varchar(50) not null, c2 varchar(50) not null, d2 enum('m', 'w') not null, e2 int not null, f2 decimal (18,2) not null, g2 bigint not null, h2 tinyint not null, a3 date not null, b3 varchar(50) not null, c3 varchar(50) not null, d3 enum('m', 'w') not null, e3 int not null, f3 decimal (18,2) not null, g3 bigint not null, h3 tinyint not null, i char(255), primary key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1,a2,b2,c2,d2,e2,f2,g2,h2,a3,b3,c3,d3,e3,f3,g3,h3)) engine=$engine
|
||||
partition by key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1,a2,b2,c2,d2,e2,f2,g2,h2,a3,b3,c3,d3,e3,f3,g3,h3) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
|
||||
eval create table t1 (a date not null, b varchar(50) not null, c varchar(50) not null, d enum('m', 'w') not null, e int not null, f decimal (18,2) not null, g bigint not null, h tinyint not null, a1 date not null, b1 varchar(50) not null, c1 varchar(50) not null, d1 enum('m', 'w') not null, e1 int not null, f1 decimal (18,2) not null, g1 bigint not null, h1 tinyint not null, a2 date not null, b2 varchar(50) not null, c2 varchar(50) not null, d2 enum('m', 'w') not null, e2 int not null, f2 decimal (18,2) not null, g2 bigint not null, h2 tinyint not null, a3 date not null, b3 varchar(50) not null, c3 varchar(50) not null, d3 enum('m', 'w') not null, e3 int not null, f3 decimal (18,2) not null, g3 bigint not null, h3 tinyint not null, i char(255), primary key(a,b,c,d,e,f,g,h,a1,b1,c1,d1,e1,f1,g1,h1)) engine=$engine
|
||||
partition by key(a,b,c,d,e,f,g,h) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
|
||||
#--disable_abort_on error
|
||||
show create table t1;
|
||||
insert into t1 values
|
||||
('1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113,'1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113,'1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113, '1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113, 'tbhth nrzh ztfghgfh fzh ftzhj fztjh'),
|
||||
('1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127,'1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, '1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, '1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, 'liuugbzvdmrlti b itiortudirtfgtibm dfi'),
|
||||
('1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, '1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, '1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, '1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, 'd,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr'),
|
||||
('2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, '2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, '2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, '2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, 'pib mdotkbm.m');
|
||||
select * from t1;
|
||||
select * from t1 where a<19851231;
|
||||
drop table t1;
|
||||
--enable_abort_on_error
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
eval create table t1 (a date not null, b varchar(50) not null, c varchar(50) not null, d enum('m', 'w'), primary key(a,b,c,d)) engine=$engine
|
||||
partition by key (a,b,c,d) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values
|
||||
('1975-01-01', 'abcde', 'abcde','m'),
|
||||
('1983-12-31', 'cdef', 'srtbvsr', 'w'),
|
||||
('1980-10-14', 'fgbbd', 'dtzndtz', 'w'),
|
||||
('2000-06-15', 'jukg','zikhuk','m');
|
||||
select * from t1;
|
||||
select * from t1 where a<19851231;
|
||||
drop table t1;
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
eval create table t1 (a date not null, b varchar(50) not null, c varchar(50) not null, d enum('m', 'w') not null, e int not null, f decimal (18,2) not null, g bigint not null, h tinyint not null, i char(255), primary key(a,b,c,d,e,f,g,h)) engine=$engine
|
||||
partition by key(a,b,c,d,e,f,g,h) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values
|
||||
('1975-01-01', 'abcde', 'abcde','m', 1234, 123.45, 32412341234, 113, 'tbhth nrzh ztfghgfh fzh ftzhj fztjh'),
|
||||
('1983-12-31', 'cdef', 'srtbvsr', 'w', 45634, 13452.56, 3452346456, 127, 'liuugbzvdmrlti b itiortudirtfgtibm dfi'),
|
||||
('1980-10-14', 'fgbbd', 'dtzndtz', 'w', 67856, 5463354.67, 3567845333, 124, 'd,f söierugsig msireg siug ei5ggth lrutluitgzeöjrtnb.rkjthuekuhzrkuthgjdnffjmbr'),
|
||||
('2000-06-15', 'jukg','zikhuk','m', 45675, 6465754.13, 435242623462, 18, 'pib mdotkbm.m' );
|
||||
select * from t1;
|
||||
select * from t1 where a<19851231;
|
||||
drop table t1;
|
||||
@@ -0,0 +1,15 @@
|
||||
# inc/partition_layout.inc
|
||||
#
|
||||
# Print partitioning related informations about the table t1
|
||||
#
|
||||
|
||||
eval SHOW CREATE TABLE t1;
|
||||
|
||||
# Optional (most probably issues with separators and case sensitivity)
|
||||
# listing of files belonging to the table t1
|
||||
if ($ls)
|
||||
{
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
|
||||
--list_files $MYSQLD_DATADIR/test t1*
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
################################################################################
|
||||
# inc/partition_layout_check1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Store the SHOW CREATE TABLE output and the list of files belonging to #
|
||||
# this table + print this into the protocol #
|
||||
# This script is only usefule when sourced within the partitioning tests. #
|
||||
# #
|
||||
# Attention: The routine inc/partition_layout_check2.inc is very similar #
|
||||
# to this one. So if something has to be changed here it #
|
||||
# might be necessary to do it also there #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: pcrews #
|
||||
# Change Date: 2008-04-15 #
|
||||
# Change: Added --replace_result to account for Windows' use of '\r' #
|
||||
################################################################################
|
||||
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
# Clean the table holding the definition of t1
|
||||
DELETE FROM t0_definition;
|
||||
|
||||
# Get the MySQL Servers datadir without ending slash
|
||||
let $MYSQLD_DATADIR= `select LEFT(@@datadir, LENGTH(@@datadir)-1)`;
|
||||
#echo MYSQLD_DATADIR: $MYSQLD_DATADIR;
|
||||
|
||||
# Save the current definition of the table t1
|
||||
# - SHOW CREATE TABLE t1 is at least currently most probably more reliable than
|
||||
# the corresponding SELECT on the INFORMATION_SCHEMA
|
||||
let $show_create= `SHOW CREATE TABLE t1`;
|
||||
if ($do_file_tests)
|
||||
{
|
||||
# List the files belonging to the table t1
|
||||
let $ls_file= $MYSQLD_DATADIR/test/tmp2;
|
||||
--list_files_write_file $ls_file $MYSQLD_DATADIR/test t1*
|
||||
--chmod 0644 $ls_file
|
||||
if ($with_directories)
|
||||
{
|
||||
--list_files_append_file $ls_file $MYSQLTEST_VARDIR/mysql-test-data-dir t1*
|
||||
--list_files_append_file $ls_file $MYSQLTEST_VARDIR/mysql-test-idx-dir t1*
|
||||
}
|
||||
eval SET @aux = load_file('$ls_file');
|
||||
}
|
||||
if (!$do_file_tests)
|
||||
{
|
||||
SET @aux = '--- not determined ---';
|
||||
}
|
||||
|
||||
# Insert the current definition of the table t1 into t0_definition
|
||||
eval INSERT INTO t0_definition SET state = 'old',
|
||||
create_command = "$show_create",
|
||||
file_list = @aux;
|
||||
|
||||
# Print the create table statement into the protocol
|
||||
# Added the concat to avoid changing the result files
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR '\r' ''
|
||||
SELECT concat('SHOW CREATE TABLE t1;\nTable\tCreate Table\n',create_command,'\n') as `create_command` FROM t0_definition WHERE state = 'old';
|
||||
if ($do_file_tests)
|
||||
{
|
||||
# We stored the list of files, therefore printing the content makes sense
|
||||
if ($ls)
|
||||
{
|
||||
# Print the list of files into the protocol
|
||||
replace_result $MYSQLD_DATADIR MYSQLD_DATADIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR;
|
||||
SELECT file_list AS "unified filelist"
|
||||
FROM t0_definition WHERE state = 'old';
|
||||
}
|
||||
}
|
||||
--enable_query_log
|
||||
@@ -0,0 +1,80 @@
|
||||
################################################################################
|
||||
# inc/partition_layout_check2.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Store the SHOW CREATE TABLE output and the list of files belonging to #
|
||||
# this table + Check if the layout of the table was not modified #
|
||||
# since the call of inc/partition_layout_check1.inc #
|
||||
# This script is only usefule when sourced within the partitioning tests. #
|
||||
# #
|
||||
# Attention: The routine inc/partition_layout_check1.inc is very similar #
|
||||
# to this one. So if something has to be changed here it #
|
||||
# might be necessary to do it also there #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
################################################################################
|
||||
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
# Clean the table holding the definition of t1
|
||||
DELETE FROM t0_definition WHERE state = 'new';
|
||||
|
||||
|
||||
# Get the MySQL Servers datadir without ending slash
|
||||
let $MYSQLD_DATADIR= `select LEFT(@@datadir, LENGTH(@@datadir)-1)`;
|
||||
#echo MYSQLD_DATADIR: $MYSQLD_DATADIR;
|
||||
|
||||
# Save the current definition of the table t1
|
||||
let $show_create= `SHOW CREATE TABLE t1`;
|
||||
|
||||
if ($do_file_tests)
|
||||
{
|
||||
# List the files belonging to the table t1
|
||||
let $ls_file= $MYSQLD_DATADIR/test/tmp2;
|
||||
--list_files_write_file $ls_file $MYSQLD_DATADIR/test t1*
|
||||
--chmod 0644 $ls_file
|
||||
if ($with_directories)
|
||||
{
|
||||
--list_files_append_file $ls_file $MYSQLTEST_VARDIR/mysql-test-data-dir t1*
|
||||
--list_files_append_file $ls_file $MYSQLTEST_VARDIR/mysql-test-idx-dir t1*
|
||||
}
|
||||
eval SET @aux = load_file('$ls_file');
|
||||
}
|
||||
if (!$do_file_tests)
|
||||
{
|
||||
SET @aux = '--- not determined ---';
|
||||
}
|
||||
|
||||
# Insert the current definition of the table t1 into t0_definition
|
||||
eval INSERT INTO t0_definition SET state = 'new',
|
||||
create_command = "$show_create",
|
||||
file_list = @aux;
|
||||
|
||||
# Print the old and new table layout, if they differ
|
||||
SELECT COUNT(*) <> 1 INTO @aux
|
||||
FROM t0_definition tab1, t0_definition tab2
|
||||
WHERE tab1.state = 'old' AND tab2.state = 'new'
|
||||
AND tab1.create_command = tab2.create_command
|
||||
AND tab1.file_list = tab2.file_list;
|
||||
let $run= `SELECT @aux`;
|
||||
if ($run)
|
||||
{
|
||||
--vertical_results
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
SELECT state,
|
||||
REPLACE(create_command,'\n',' ') AS "Table definition",
|
||||
REPLACE(file_list ,'\n',' ') AS "File list"
|
||||
FROM t0_definition WHERE state in ('old','new');
|
||||
--horizontal_results
|
||||
--echo # check layout success: 0
|
||||
}
|
||||
let $run= `SELECT @aux = 0`;
|
||||
if ($run)
|
||||
{
|
||||
--echo # check layout success: 1
|
||||
}
|
||||
--enable_query_log
|
||||
@@ -0,0 +1,50 @@
|
||||
eval create table t1 (a mediumint unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (16777215), (16777214), (16777213), (16777212), (1), (2), (65535);
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
select * from t1 where a=16777213;
|
||||
delete from t1 where a=16777213;
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a mediumint unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 8;
|
||||
show create table t2;
|
||||
insert into t2 values (16777215), (16777214), (16777213), (16777212);
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
select * from t2 where a=16777213;
|
||||
delete from t2 where a=16777213;
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=$maxrows;
|
||||
--echo $maxrows inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values ($count);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a mediumint not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 7;
|
||||
show create table t3;
|
||||
insert into t3 values (8388607), (8388606), (8388605), (8388604), (-8388608), (-8388607), (1), (-1), (0);
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
select * from t3 where a=8388605;
|
||||
delete from t3 where a=8388605;
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
@@ -0,0 +1,375 @@
|
||||
################################################################################
|
||||
# inc/partition_methods1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Create and check partitioned tables #
|
||||
# The partitioning function use the column f_int1 #
|
||||
# #
|
||||
# For all partitioning methods #
|
||||
# PARTITION BY HASH/KEY/LIST/RANGE #
|
||||
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
|
||||
# do #
|
||||
# 1. Create the partitioned table #
|
||||
# 2 Insert the content of the table t0_template into t1 #
|
||||
# 3. Execute inc/partition_check.inc #
|
||||
# 4. Drop the table t1 #
|
||||
# done #
|
||||
# #
|
||||
# The parameter #
|
||||
# $unique -- PRIMARY KEY or UNIQUE INDEXes to be created within the #
|
||||
# CREATE TABLE STATEMENT #
|
||||
# has to be set before sourcing this routine. #
|
||||
# Example: #
|
||||
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
|
||||
# inc/partition_method1s.inc #
|
||||
# #
|
||||
# Attention: The routine inc/partition_methods2.inc is very similar #
|
||||
# to this one. So if something has to be changed here it #
|
||||
# might be necessary to do it also there #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: HH #
|
||||
# Change Date: 2006-05-12 #
|
||||
# Change: Introduced DATA/INDEX DIRECTORY #
|
||||
################################################################################
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
let $partitioning= ;
|
||||
#----------- PARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY HASH(f_int1) PARTITIONS 2;
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY HASH(f_int1) PARTITIONS 2
|
||||
(PARTITION p1
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p2
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY KEY(f_int1) PARTITIONS 5;
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY KEY(f_int1) PARTITIONS 5
|
||||
(PARTITION p1
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p2
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p3
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p4
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p5
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY LIST
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(MOD(f_int1,4))
|
||||
(PARTITION part_3 VALUES IN (-3),
|
||||
PARTITION part_2 VALUES IN (-2),
|
||||
PARTITION part_1 VALUES IN (-1),
|
||||
PARTITION part_N VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2),
|
||||
PARTITION part3 VALUES IN (3));
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(MOD(f_int1,4))
|
||||
(PARTITION part_3 VALUES IN (-3)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part_2 VALUES IN (-2)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part_1 VALUES IN (-1)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part_N VALUES IN (NULL)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part0 VALUES IN (0)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part1 VALUES IN (1)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part2 VALUES IN (2)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part3 VALUES IN (3)
|
||||
$data_directory $index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY RANGE
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1)
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN ($max_row_div2 + $max_row_div4),
|
||||
PARTITION parte VALUES LESS THAN ($max_row),
|
||||
PARTITION partf VALUES LESS THAN $MAX_VALUE);
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1)
|
||||
(PARTITION parta VALUES LESS THAN (0)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partd VALUES LESS THAN ($max_row_div2 + $max_row_div4)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION parte VALUES LESS THAN ($max_row)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partf VALUES LESS THAN $MAX_VALUE
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN $MAX_VALUE);
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY RANGE(f_int1 DIV 2) SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
(PARTITION parta VALUES LESS THAN (0)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partd VALUES LESS THAN $MAX_VALUE
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
|
||||
(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));
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
|
||||
(PARTITION part1 VALUES LESS THAN (0)
|
||||
(SUBPARTITION subpart11 $data_directory $index_directory,
|
||||
SUBPARTITION subpart12 $data_directory $index_directory),
|
||||
PARTITION part2 VALUES LESS THAN ($max_row_div4)
|
||||
(SUBPARTITION subpart21 $data_directory $index_directory,
|
||||
SUBPARTITION subpart22 $data_directory $index_directory),
|
||||
PARTITION part3 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart31 $data_directory $index_directory,
|
||||
SUBPARTITION subpart32 $data_directory $index_directory),
|
||||
PARTITION part4 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart41 $data_directory $index_directory,
|
||||
SUBPARTITION subpart42 $data_directory $index_directory));
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
(SUBPARTITION sp11,
|
||||
SUBPARTITION sp12),
|
||||
PARTITION part2 VALUES IN (1)
|
||||
(SUBPARTITION sp21,
|
||||
SUBPARTITION sp22),
|
||||
PARTITION part3 VALUES IN (2)
|
||||
(SUBPARTITION sp31,
|
||||
SUBPARTITION sp32),
|
||||
PARTITION part4 VALUES IN (NULL)
|
||||
(SUBPARTITION sp41,
|
||||
SUBPARTITION sp42));
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int1 + 1)
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
$data_directory
|
||||
$index_directory
|
||||
(SUBPARTITION sp11
|
||||
$data_directory
|
||||
$index_directory,
|
||||
SUBPARTITION sp12
|
||||
$data_directory
|
||||
$index_directory),
|
||||
PARTITION part2 VALUES IN (1)
|
||||
$data_directory
|
||||
$index_directory
|
||||
(SUBPARTITION sp21
|
||||
$data_directory
|
||||
$index_directory,
|
||||
SUBPARTITION sp22
|
||||
$data_directory
|
||||
$index_directory),
|
||||
PARTITION part3 VALUES IN (2)
|
||||
$data_directory
|
||||
$index_directory
|
||||
(SUBPARTITION sp31,
|
||||
SUBPARTITION sp32),
|
||||
PARTITION part4 VALUES IN (NULL)
|
||||
$data_directory
|
||||
$index_directory
|
||||
(SUBPARTITION sp41
|
||||
$data_directory
|
||||
$index_directory,
|
||||
SUBPARTITION sp42
|
||||
$data_directory
|
||||
$index_directory));
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(ABS(MOD(f_int1,2)))
|
||||
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS $sub_part_no
|
||||
(PARTITION part1 VALUES IN (0),
|
||||
PARTITION part2 VALUES IN (1),
|
||||
PARTITION part3 VALUES IN (NULL));
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(ABS(MOD(f_int1,2)))
|
||||
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS $sub_part_no
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION part2 VALUES IN (1)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION part3 VALUES IN (NULL)
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
--source suite/parts/inc/partition_check_drop.inc
|
||||
@@ -0,0 +1,359 @@
|
||||
################################################################################
|
||||
# inc/partition_methods2.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Create and check partitioned tables #
|
||||
# The partitioning function uses the columns f_int1 and f_int2 #
|
||||
# For all partitioning methods #
|
||||
# PARTITION BY HASH/KEY/LIST/RANGE #
|
||||
# PARTITION BY RANGE/LIST ... SUBPARTITION BY HASH/KEY ... #
|
||||
# do #
|
||||
# 1. Create the partitioned table #
|
||||
# 2 Insert the content of the table t0_template into t1 #
|
||||
# 3. Execute inc/partition_check.inc #
|
||||
# 4. Drop the table t1 #
|
||||
# done #
|
||||
# #
|
||||
# The parameter #
|
||||
# $unique -- PRIMARY KEY or UNIQUE INDEXes to be created within the #
|
||||
# CREATE TABLE STATEMENT #
|
||||
# has to be set before sourcing this routine. #
|
||||
# Example: #
|
||||
# let $unique= , UNIQUE INDEX uidx1 (f_int1); #
|
||||
# inc/partition_methods2.inc #
|
||||
# #
|
||||
# Attention: The routine inc/partition_methods1.inc is very similar #
|
||||
# to this one. So if something has to be changed here it #
|
||||
# might be necessary to do it also there #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
let $partitioning= ;
|
||||
#----------- PARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2
|
||||
(PARTITION p1
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p2
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5;
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 5
|
||||
(PARTITION p1
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p2
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p3
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p4
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION p5
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY LIST
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(MOD(f_int1 + f_int2,4))
|
||||
(PARTITION part_3 VALUES IN (-3),
|
||||
PARTITION part_2 VALUES IN (-2),
|
||||
PARTITION part_1 VALUES IN (-1),
|
||||
PARTITION part_N VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2),
|
||||
PARTITION part3 VALUES IN (3));
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(MOD(f_int1 + f_int2,4))
|
||||
(PARTITION part_3 VALUES IN (-3)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part_2 VALUES IN (-2)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part_1 VALUES IN (-1)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part_N VALUES IN (NULL)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part0 VALUES IN (0)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part1 VALUES IN (1)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part2 VALUES IN (2)
|
||||
$data_directory $index_directory,
|
||||
PARTITION part3 VALUES IN (3)
|
||||
$data_directory $index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY RANGE
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN ($max_row_div2 + $max_row_div4),
|
||||
PARTITION parte VALUES LESS THAN ($max_row),
|
||||
PARTITION partf VALUES LESS THAN $MAX_VALUE);
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE((f_int1 + f_int2) DIV 2)
|
||||
(PARTITION parta VALUES LESS THAN (0)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partd VALUES LESS THAN ($max_row_div2 + $max_row_div4)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION parte VALUES LESS THAN ($max_row)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partf VALUES LESS THAN $MAX_VALUE
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
|
||||
(PARTITION parta VALUES LESS THAN (0),
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4),
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION partd VALUES LESS THAN $MAX_VALUE);
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int2) SUBPARTITIONS 2
|
||||
(PARTITION parta VALUES LESS THAN (0)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partb VALUES LESS THAN ($max_row_div4)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partc VALUES LESS THAN ($max_row_div2)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION partd VALUES LESS THAN $MAX_VALUE
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
|
||||
(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));
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning= PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int2)
|
||||
(PARTITION part1 VALUES LESS THAN (0)
|
||||
(SUBPARTITION subpart11 $data_directory $index_directory,
|
||||
SUBPARTITION subpart12 $data_directory $index_directory),
|
||||
PARTITION part2 VALUES LESS THAN ($max_row_div4)
|
||||
(SUBPARTITION subpart21 $data_directory $index_directory,
|
||||
SUBPARTITION subpart22 $data_directory $index_directory),
|
||||
PARTITION part3 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart31 $data_directory $index_directory,
|
||||
SUBPARTITION subpart32 $data_directory $index_directory),
|
||||
PARTITION part4 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart41 $data_directory $index_directory,
|
||||
SUBPARTITION subpart42 $data_directory $index_directory));
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning= PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
(SUBPARTITION sp11, SUBPARTITION sp12),
|
||||
PARTITION part2 VALUES IN (1)
|
||||
(SUBPARTITION sp21, SUBPARTITION sp22),
|
||||
PARTITION part3 VALUES IN (2)
|
||||
(SUBPARTITION sp31, SUBPARTITION sp32),
|
||||
PARTITION part4 VALUES IN (NULL)
|
||||
(SUBPARTITION sp41, SUBPARTITION sp42));
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(ABS(MOD(f_int1,3))) SUBPARTITION BY HASH(f_int2 + 1)
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
$data_directory
|
||||
$index_directory
|
||||
(SUBPARTITION sp11
|
||||
$data_directory
|
||||
$index_directory,
|
||||
SUBPARTITION sp12
|
||||
$data_directory
|
||||
$index_directory),
|
||||
PARTITION part2 VALUES IN (1)
|
||||
$data_directory
|
||||
$index_directory
|
||||
(SUBPARTITION sp21
|
||||
$data_directory
|
||||
$index_directory,
|
||||
SUBPARTITION sp22
|
||||
$data_directory
|
||||
$index_directory),
|
||||
PARTITION part3 VALUES IN (2)
|
||||
$data_directory
|
||||
$index_directory
|
||||
(SUBPARTITION sp31,
|
||||
SUBPARTITION sp32),
|
||||
PARTITION part4 VALUES IN (NULL)
|
||||
$data_directory
|
||||
$index_directory
|
||||
(SUBPARTITION sp41
|
||||
$data_directory
|
||||
$index_directory,
|
||||
SUBPARTITION sp42
|
||||
$data_directory
|
||||
$index_directory));
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
|
||||
if ($with_partitioning)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(ABS(MOD(f_int1,2)))
|
||||
SUBPARTITION BY KEY(f_int2) SUBPARTITIONS $sub_part_no
|
||||
(PARTITION part1 VALUES IN (0),
|
||||
PARTITION part2 VALUES IN (1),
|
||||
PARTITION part3 VALUES IN (NULL));
|
||||
if ($with_directories)
|
||||
{
|
||||
let $partitioning=
|
||||
PARTITION BY LIST(ABS(MOD(f_int1,2)))
|
||||
SUBPARTITION BY KEY(f_int2) SUBPARTITIONS $sub_part_no
|
||||
(PARTITION part1 VALUES IN (0)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION part2 VALUES IN (1)
|
||||
$data_directory
|
||||
$index_directory,
|
||||
PARTITION part3 VALUES IN (NULL)
|
||||
$data_directory
|
||||
$index_directory);
|
||||
}
|
||||
}
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
$unique
|
||||
)
|
||||
$partitioning;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
523
build/lib/mysql/mysql-test/suite/parts/inc/partition_mgm.inc
Normal file
523
build/lib/mysql/mysql-test/suite/parts/inc/partition_mgm.inc
Normal file
@@ -0,0 +1,523 @@
|
||||
################################################################################
|
||||
# inc/partition_mgm.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Test of partition management functions including different Upper/Lower #
|
||||
# case names of databases, tables and partitions #
|
||||
# #
|
||||
# #
|
||||
# Uses following variables: #
|
||||
# engine Use specified storage engine #
|
||||
# can_only_key Storage engine only able to use HASH/KEY (not range/list) #
|
||||
# (E.g. not ndbcluster) #
|
||||
# part_optA-D Extra partitioning options (E.g. INDEX/DATA DIR) #
|
||||
# #
|
||||
# have_bug33158 NDB case insensitive create, but case sensitive rename #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mattiasj #
|
||||
# Original Date: 2008-06-27 #
|
||||
################################################################################
|
||||
--enable_abort_on_error
|
||||
|
||||
let $old_db= `SELECT DATABASE()`;
|
||||
--echo # Creating database MySQL_TEST_DB
|
||||
CREATE DATABASE MySQL_Test_DB;
|
||||
USE MySQL_Test_DB;
|
||||
--echo # 1.0 KEY partitioning mgm
|
||||
--echo # Creating KEY partitioned table
|
||||
eval CREATE TABLE TableA (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY KEY (a)
|
||||
(PARTITION parta $part_optA,
|
||||
PARTITION partB $part_optB,
|
||||
PARTITION Partc $part_optC,
|
||||
PARTITION PartD $part_optD);
|
||||
INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10);
|
||||
INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12);
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
|
||||
--echo # Test of ADD/COALESCE PARTITIONS
|
||||
--echo # expecting duplicate partition name
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION partA,
|
||||
PARTITION Parta,
|
||||
PARTITION PartA);
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION partE,
|
||||
PARTITION Partf,
|
||||
PARTITION PartG);
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
ALTER TABLE TableA COALESCE PARTITION 4;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Test of REORGANIZE PARTITIONS
|
||||
--echo # Should not work on HASH/KEY
|
||||
--error ER_REORG_HASH_ONLY_ON_SAME_NO
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO
|
||||
(PARTITION PARTA $part_optA,
|
||||
PARTITION partc $part_optC);
|
||||
--error ER_CONSECUTIVE_REORG_PARTITIONS
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO
|
||||
(PARTITION partB $part_optA,
|
||||
PARTITION parta $part_optC);
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO
|
||||
(PARTITION partB $part_optA COMMENT="Previusly named parta",
|
||||
PARTITION parta $part_optB COMMENT="Previusly named partB");
|
||||
if ($fixed_bug20129)
|
||||
{
|
||||
ALTER TABLE TableA ANALYZE PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA CHECK PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA OPTIMIZE PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA REPAIR PARTITION parta, partB, Partc;
|
||||
}
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Test of RENAME TABLE
|
||||
RENAME TABLE TableA to TableB;
|
||||
--sorted_result
|
||||
SELECT * FROM TableB;
|
||||
RENAME TABLE TableB to TableA;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
|
||||
--echo # Checking name comparision Upper vs Lower case
|
||||
--echo # Error if lower_case_table_names != 0
|
||||
let $lower_case_table_names= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'lower_case_table_names'`;
|
||||
--echo # lower_case_table_names: $lower_case_table_names
|
||||
if ($lower_case_table_names)
|
||||
{
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
eval CREATE TABLE tablea (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY KEY (a)
|
||||
(PARTITION parta $part_optA,
|
||||
PARTITION partB $part_optB,
|
||||
PARTITION Partc $part_optC,
|
||||
PARTITION PartD $part_optD);
|
||||
SHOW TABLES;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
RENAME TABLE TableA to tablea;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
RENAME TABLE tablea to TableA;
|
||||
--sorted_result
|
||||
SELECT * FROM tablea;
|
||||
SHOW CREATE TABLE tablea;
|
||||
}
|
||||
if (!$lower_case_table_names)
|
||||
{
|
||||
if (!$have_bug33158)
|
||||
{
|
||||
eval CREATE TABLE tablea (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY KEY (a)
|
||||
(PARTITION parta $part_optA,
|
||||
PARTITION partB $part_optB,
|
||||
PARTITION Partc $part_optC,
|
||||
PARTITION PartD $part_optD);
|
||||
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
||||
SHOW TABLES;
|
||||
RENAME TABLE TableA to tableA;
|
||||
--sorted_result
|
||||
SELECT * FROM tablea;
|
||||
--sorted_result
|
||||
SELECT * FROM tableA;
|
||||
RENAME TABLE tableA to TableA;
|
||||
SHOW CREATE TABLE tablea;
|
||||
DROP TABLE tablea;
|
||||
}
|
||||
}
|
||||
|
||||
--echo # Test of REMOVE PARTITIONING
|
||||
ALTER TABLE TableA REMOVE PARTITIONING;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Cleaning up after KEY PARTITIONING test
|
||||
DROP TABLE TableA;
|
||||
|
||||
if (!$can_only_key)
|
||||
{
|
||||
--echo # 2.0 HASH partitioning mgm
|
||||
--echo # expecting duplicate partition name
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
eval CREATE TABLE TableA (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH (a)
|
||||
(PARTITION parta $part_optA,
|
||||
PARTITION partA $part_optB,
|
||||
PARTITION Parta $part_optC,
|
||||
PARTITION PartA $part_optD);
|
||||
|
||||
--echo # Creating Hash partitioned table
|
||||
eval CREATE TABLE TableA (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH (a)
|
||||
(PARTITION parta $part_optA,
|
||||
PARTITION partB $part_optB,
|
||||
PARTITION Partc $part_optC,
|
||||
PARTITION PartD $part_optD);
|
||||
INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10);
|
||||
INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12);
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
|
||||
--echo # Test of ADD/COALESCE PARTITIONS
|
||||
--echo # expecting duplicate partition name
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION partA,
|
||||
PARTITION Parta,
|
||||
PARTITION PartA);
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION partE,
|
||||
PARTITION Partf,
|
||||
PARTITION PartG);
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
ALTER TABLE TableA COALESCE PARTITION 4;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Test of REORGANIZE PARTITIONS
|
||||
--echo # Should not work on HASH/KEY
|
||||
--error ER_REORG_HASH_ONLY_ON_SAME_NO
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO
|
||||
(PARTITION PARTA $part_optA,
|
||||
PARTITION partc $part_optC);
|
||||
--error ER_CONSECUTIVE_REORG_PARTITIONS
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO
|
||||
(PARTITION partB $part_optA,
|
||||
PARTITION parta $part_optC);
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,partB INTO
|
||||
(PARTITION partB $part_optA COMMENT="Previusly named parta",
|
||||
PARTITION parta $part_optB COMMENT="Previusly named partB");
|
||||
if ($fixed_bug20129)
|
||||
{
|
||||
ALTER TABLE TableA ANALYZE PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA CHECK PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA OPTIMIZE PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA REPAIR PARTITION parta, partB, Partc;
|
||||
}
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Test of RENAME TABLE
|
||||
RENAME TABLE TableA to TableB;
|
||||
--sorted_result
|
||||
SELECT * FROM TableB;
|
||||
RENAME TABLE TableB to TableA;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
|
||||
--echo # Checking name comparision Upper vs Lower case
|
||||
--echo # Error if lower_case_table_names != 0
|
||||
let $lower_case_table_names= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'lower_case_table_names'`;
|
||||
--echo # lower_case_table_names: $lower_case_table_names
|
||||
if ($lower_case_table_names)
|
||||
{
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
eval CREATE TABLE tablea (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH (a)
|
||||
(PARTITION parta $part_optA,
|
||||
PARTITION partB $part_optB,
|
||||
PARTITION Partc $part_optC,
|
||||
PARTITION PartD $part_optD);
|
||||
SHOW TABLES;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
RENAME TABLE TableA to tablea;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
RENAME TABLE tablea to TableA;
|
||||
--sorted_result
|
||||
SELECT * FROM tablea;
|
||||
SHOW CREATE TABLE tablea;
|
||||
}
|
||||
if (!$lower_case_table_names)
|
||||
{
|
||||
eval CREATE TABLE tablea (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY HASH (a)
|
||||
(PARTITION parta $part_optA,
|
||||
PARTITION partB $part_optB,
|
||||
PARTITION Partc $part_optC,
|
||||
PARTITION PartD $part_optD);
|
||||
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
||||
SHOW TABLES;
|
||||
RENAME TABLE TableA to tableA;
|
||||
--sorted_result
|
||||
SELECT * FROM tablea;
|
||||
--sorted_result
|
||||
SELECT * FROM tableA;
|
||||
RENAME TABLE tableA to TableA;
|
||||
SHOW CREATE TABLE tablea;
|
||||
DROP TABLE tablea;
|
||||
}
|
||||
|
||||
--echo # Test of REMOVE PARTITIONING
|
||||
ALTER TABLE TableA REMOVE PARTITIONING;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Cleaning up after HASH PARTITIONING test
|
||||
DROP TABLE TableA;
|
||||
|
||||
|
||||
--echo # 3.0 RANGE partitioning mgm
|
||||
--echo # Creating RANGE partitioned table
|
||||
eval CREATE TABLE TableA (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY RANGE (a)
|
||||
(PARTITION parta VALUES LESS THAN (4) $part_optA,
|
||||
PARTITION partB VALUES LESS THAN (7) $part_optB,
|
||||
PARTITION Partc VALUES LESS THAN (10) $part_optC,
|
||||
PARTITION PartD VALUES LESS THAN (13) $part_optD);
|
||||
INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10);
|
||||
INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12);
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
|
||||
--echo # Test of ADD/DROP PARTITIONS
|
||||
--echo # expecting duplicate partition name
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION partA VALUES LESS THAN (MAXVALUE));
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION partE VALUES LESS THAN (16),
|
||||
PARTITION Partf VALUES LESS THAN (19),
|
||||
PARTITION PartG VALUES LESS THAN (22));
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
ALTER TABLE TableA DROP PARTITION partE, PartG;
|
||||
ALTER TABLE TableA DROP PARTITION Partf;
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION PartE VALUES LESS THAN (MAXVALUE));
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Test of REORGANIZE PARTITIONS
|
||||
--echo # Error since it must reorganize a consecutive range
|
||||
--error ER_CONSECUTIVE_REORG_PARTITIONS
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO
|
||||
(PARTITION partB VALUES LESS THAN (3) $part_optA,
|
||||
PARTITION parta VALUES LESS THAN (11) $part_optC);
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION partB,Partc,PartD,PartE INTO
|
||||
(PARTITION partD VALUES LESS THAN (8) $part_optB
|
||||
COMMENT="Previously partB and partly Partc",
|
||||
PARTITION partB VALUES LESS THAN (11) $part_optC
|
||||
COMMENT="Previously partly Partc and partly PartD",
|
||||
PARTITION partC VALUES LESS THAN (MAXVALUE) $part_optD
|
||||
COMMENT="Previously partly PartD");
|
||||
if ($fixed_bug20129)
|
||||
{
|
||||
ALTER TABLE TableA ANALYZE PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA CHECK PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA OPTIMIZE PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA REPAIR PARTITION parta, partB, Partc;
|
||||
}
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Test of RENAME TABLE
|
||||
RENAME TABLE TableA to TableB;
|
||||
--sorted_result
|
||||
SELECT * FROM TableB;
|
||||
RENAME TABLE TableB to TableA;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
|
||||
--echo # Checking name comparision Upper vs Lower case
|
||||
--echo # Error if lower_case_table_names != 0
|
||||
let $lower_case_table_names= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'lower_case_table_names'`;
|
||||
--echo # lower_case_table_names: $lower_case_table_names
|
||||
if ($lower_case_table_names)
|
||||
{
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
eval CREATE TABLE tablea (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY RANGE (a)
|
||||
(PARTITION parta VALUES LESS THAN (4) $part_optA,
|
||||
PARTITION partB VALUES LESS THAN (7) $part_optB,
|
||||
PARTITION Partc VALUES LESS THAN (10) $part_optC,
|
||||
PARTITION PartD VALUES LESS THAN (13) $part_optD);
|
||||
SHOW TABLES;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
RENAME TABLE TableA to tablea;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
RENAME TABLE tablea to TableA;
|
||||
--sorted_result
|
||||
SELECT * FROM tablea;
|
||||
SHOW CREATE TABLE tablea;
|
||||
}
|
||||
if (!$lower_case_table_names)
|
||||
{
|
||||
eval CREATE TABLE tablea (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY RANGE (a)
|
||||
(PARTITION parta VALUES LESS THAN (4) $part_optA,
|
||||
PARTITION partB VALUES LESS THAN (7) $part_optB,
|
||||
PARTITION Partc VALUES LESS THAN (10) $part_optC,
|
||||
PARTITION PartD VALUES LESS THAN (13) $part_optD);
|
||||
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
||||
SHOW TABLES;
|
||||
RENAME TABLE TableA to tableA;
|
||||
--sorted_result
|
||||
SELECT * FROM tablea;
|
||||
--sorted_result
|
||||
SELECT * FROM tableA;
|
||||
RENAME TABLE tableA to TableA;
|
||||
SHOW CREATE TABLE tablea;
|
||||
DROP TABLE tablea;
|
||||
}
|
||||
|
||||
--echo # Test of REMOVE PARTITIONING
|
||||
ALTER TABLE TableA REMOVE PARTITIONING;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Cleaning up after RANGE PARTITIONING test
|
||||
DROP TABLE TableA;
|
||||
|
||||
--echo # 4.0 LIST partitioning mgm
|
||||
--echo # Creating LIST partitioned table
|
||||
eval CREATE TABLE TableA (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY LIST (a)
|
||||
(PARTITION parta VALUES IN (1,8,9) $part_optA,
|
||||
PARTITION partB VALUES IN (2,10,11) $part_optB,
|
||||
PARTITION Partc VALUES IN (3,4,7) $part_optC,
|
||||
PARTITION PartD VALUES IN (5,6,12) $part_optD);
|
||||
INSERT INTO TableA VALUES (1), (2), (7), (8), (9), (10);
|
||||
INSERT INTO TableA VALUES (3), (4), (5), (6), (11), (12);
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
|
||||
--echo # Test of ADD/DROP PARTITIONS
|
||||
--echo # expecting duplicate partition name
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION partA VALUES IN (0));
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION partE VALUES IN (16),
|
||||
PARTITION Partf VALUES IN (19),
|
||||
PARTITION PartG VALUES IN (22));
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
ALTER TABLE TableA DROP PARTITION partE, PartG;
|
||||
ALTER TABLE TableA DROP PARTITION Partf;
|
||||
ALTER TABLE TableA ADD PARTITION
|
||||
(PARTITION PartE VALUES IN (13));
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Test of REORGANIZE PARTITIONS
|
||||
--error ER_CONSECUTIVE_REORG_PARTITIONS
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,Partc INTO
|
||||
(PARTITION Partc VALUES IN (1,7) $part_optA
|
||||
COMMENT = "Mix 1 of old parta and Partc",
|
||||
PARTITION partF VALUES IN (3,9) $part_optC
|
||||
COMMENT = "Mix 2 of old parta and Partc",
|
||||
PARTITION parta VALUES IN (4,8) $part_optC
|
||||
COMMENT = "Mix 3 of old parta and Partc");
|
||||
eval ALTER TABLE TableA REORGANIZE PARTITION parta,partB,Partc INTO
|
||||
(PARTITION Partc VALUES IN (1,7) $part_optA
|
||||
COMMENT = "Mix 1 of old parta and Partc",
|
||||
PARTITION parta VALUES IN (3,9) $part_optC
|
||||
COMMENT = "Mix 2 of old parta and Partc",
|
||||
PARTITION partB VALUES IN (4,8) $part_optC
|
||||
COMMENT = "Mix 3 of old parta and Partc");
|
||||
if ($fixed_bug20129)
|
||||
{
|
||||
ALTER TABLE TableA ANALYZE PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA CHECK PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA OPTIMIZE PARTITION parta, partB, Partc;
|
||||
ALTER TABLE TableA REPAIR PARTITION parta, partB, Partc;
|
||||
}
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Test of RENAME TABLE
|
||||
RENAME TABLE TableA to TableB;
|
||||
--sorted_result
|
||||
SELECT * FROM TableB;
|
||||
RENAME TABLE TableB to TableA;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
|
||||
--echo # Checking name comparision Upper vs Lower case
|
||||
--echo # Error if lower_case_table_names != 0
|
||||
let $lower_case_table_names= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'lower_case_table_names'`;
|
||||
--echo # lower_case_table_names: $lower_case_table_names
|
||||
if ($lower_case_table_names)
|
||||
{
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
eval CREATE TABLE tablea (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY LIST (a)
|
||||
(PARTITION parta VALUES IN (1,8,9) $part_optA,
|
||||
PARTITION partB VALUES IN (2,10,11) $part_optB,
|
||||
PARTITION Partc VALUES IN (3,4,7) $part_optC,
|
||||
PARTITION PartD VALUES IN (5,6,12) $part_optD);
|
||||
SHOW TABLES;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
RENAME TABLE TableA to tablea;
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
RENAME TABLE tablea to TableA;
|
||||
--sorted_result
|
||||
SELECT * FROM tablea;
|
||||
SHOW CREATE TABLE tablea;
|
||||
}
|
||||
if (!$lower_case_table_names)
|
||||
{
|
||||
eval CREATE TABLE tablea (a INT)
|
||||
ENGINE = $engine
|
||||
PARTITION BY LIST (a)
|
||||
(PARTITION parta VALUES IN (1,8,9) $part_optA,
|
||||
PARTITION partB VALUES IN (2,10,11) $part_optB,
|
||||
PARTITION Partc VALUES IN (3,4,7) $part_optC,
|
||||
PARTITION PartD VALUES IN (5,6,12) $part_optD);
|
||||
INSERT INTO tablea VALUES (1), (2), (7), (8), (9), (10);
|
||||
SHOW TABLES;
|
||||
RENAME TABLE TableA to tableA;
|
||||
--sorted_result
|
||||
SELECT * FROM tablea;
|
||||
--sorted_result
|
||||
SELECT * FROM tableA;
|
||||
RENAME TABLE tableA to TableA;
|
||||
SHOW CREATE TABLE tablea;
|
||||
DROP TABLE tablea;
|
||||
}
|
||||
|
||||
--echo # Test of REMOVE PARTITIONING
|
||||
ALTER TABLE TableA REMOVE PARTITIONING;
|
||||
--sorted_result
|
||||
SELECT * FROM TableA;
|
||||
SHOW CREATE TABLE TableA;
|
||||
|
||||
--echo # Cleaning up after LIST PARTITIONING test
|
||||
DROP TABLE TableA;
|
||||
}
|
||||
# End of $can_only_key
|
||||
|
||||
--echo # Cleaning up before exit
|
||||
eval USE $old_db;
|
||||
DROP DATABASE MySQL_Test_DB;
|
||||
35
build/lib/mysql/mysql-test/suite/parts/inc/partition_set.inc
Normal file
35
build/lib/mysql/mysql-test/suite/parts/inc/partition_set.inc
Normal file
@@ -0,0 +1,35 @@
|
||||
--echo ---- Partitioning and set data type
|
||||
|
||||
eval create table t1 (a set('A','B','C','D','E','F','G','H','I','J','K','L') not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values ('A,B'),('C,D'),('E,L'),('G,H,K');
|
||||
select * from t1 order by a;
|
||||
select * from t1 where a='A,B';
|
||||
update t1 set a='A,B,C' where a='E,L';
|
||||
select * from t1 order by a;
|
||||
delete from t1 where a='A,B';
|
||||
select * from t1 order by a;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a set (
|
||||
'1','2','3','4','5','6','7','8','9','0',
|
||||
'A','B','C','D','E','F','G','H','I','J','K','L',
|
||||
'M','N','O','P','Q','R','S','T','U','V','W','X',
|
||||
'Y','Z'
|
||||
) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 27;
|
||||
show create table t2;
|
||||
insert into t2 values ('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('S'),('T'),('U'),('V'),('X'),('Y'),('Z');
|
||||
insert into t2 values ('A,B'),('B,C'),('C,D'),('D,E'),('E,F'),('F,G'),('G,H'),('H,I'),('I,J'),('K,L'),('L,M'),('M,N'),('N,O'),('O,P'),('P,Q'),('Q,R'),('S,T'),('T,U'),('U,V'),('V,W'),('X,Y'),('Y,Z'),('Z,A');
|
||||
insert into t2 values ('A,B,C'),('B,C,D'),('C,D,E'),('D,E,F'),('E,F,G'),('F,G,H'),('G,H,I'),('H,I,J'),('I,J,K'),('K,L,M'),('L,M,N'),('M,N,O'),('N,O,P'),('O,P,Q'),('P,Q,R'),('Q,R,S'),('S,T,U'),('T,U,V'),('U,V,W'),('V,W,X'),('X,Y,Z'),('Y,Z,A'),('Z,A,B');
|
||||
insert into t2 values ('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('0');
|
||||
insert into t2 values ('1,2'),('2,3'),('3,4'),('4,5'),('5,6'),('6,7'),('7,8'),('8,9'),('9,0'),('0,1');
|
||||
insert into t2 values ('1,2,3'),('2,3,4'),('3,4,5'),('4,5,6'),('5,6,7'),('6,7,8'),('7,8,9'),('8,9,0'),('9,0,1'),('0,1,2');
|
||||
select count(*) from t2;
|
||||
select * from t2 order by a;
|
||||
drop table t2;
|
||||
@@ -0,0 +1,50 @@
|
||||
eval create table t1 (a smallint unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (65535), (65534), (65533), (65532), (1), (2), (256);
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
select * from t1 where a=65533;
|
||||
delete from t1 where a=65533;
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a smallint unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 8;
|
||||
show create table t2;
|
||||
insert into t2 values (65535), (65534), (65533), (65532);
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
select * from t2 where a=65533;
|
||||
delete from t2 where a=65533;
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=$maxrows;
|
||||
--echo $count inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values ($count);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a smallint not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 7;
|
||||
show create table t3;
|
||||
insert into t3 values (32767), (32766), (32765), (32764), (-32768), (-32767), (1), (-1), (0);
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
select * from t3 where a=32765;
|
||||
delete from t3 where a=32765;
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
@@ -0,0 +1,283 @@
|
||||
################################################################################
|
||||
# t/partition_supported_sql_funcs.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests frame for allowed sql functions #
|
||||
# #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: HH #
|
||||
# Original Date: 2006-11-22 #
|
||||
# Change Author: MattiasJ #
|
||||
# Change Date: 2008-05-15 #
|
||||
# Change: Added $max_8_partitions since ndb only capable of 8 partitions #
|
||||
# and $no_reorg_partition since ndb does not support that #
|
||||
################################################################################
|
||||
--echo -------------------------------------------------------------------------
|
||||
--echo --- $sqlfunc in partition with coltype $coltype
|
||||
--echo -------------------------------------------------------------------------
|
||||
--disable_abort_on_error
|
||||
--disable_warnings
|
||||
drop table if exists t1 ;
|
||||
drop table if exists t2 ;
|
||||
drop table if exists t3 ;
|
||||
drop table if exists t4 ;
|
||||
drop table if exists t5 ;
|
||||
drop table if exists t6 ;
|
||||
--enable_warnings
|
||||
--enable_abort_on_error
|
||||
|
||||
let $part_t1= partition by range($sqlfunc)
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than maxvalue);
|
||||
|
||||
let $part_t2= partition by list($sqlfunc)
|
||||
(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30),
|
||||
partition p3 values in (31,32,33,34,35,36,37,38,39,40),
|
||||
partition p4 values in (41,42,43,44,45,46,47,48,49,50),
|
||||
partition p5 values in (51,52,53,54,55,56,57,58,59,60)
|
||||
);
|
||||
|
||||
let $part_t3= partition by hash($sqlfunc);
|
||||
|
||||
let $part_t4= partition by range(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 2
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than maxvalue);
|
||||
|
||||
let $part_t5= partition by list(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 2
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30),
|
||||
partition p3 values in (31,32,33,34,35,36,37,38,39,40),
|
||||
partition p4 values in (41,42,43,44,45,46,47,48,49,50),
|
||||
partition p5 values in (51,52,53,54,55,56,57,58,59,60)
|
||||
);
|
||||
if ($max_8_partitions)
|
||||
{
|
||||
let $part_t5= partition by list(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 2
|
||||
(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15),
|
||||
partition p1 values in (16,17,18,19,20,21,22,23,24,25,26,27,28,29,30),
|
||||
partition p2 values in (31,32,33,34,35,36,37,38,39,40,41,42,43,44,45),
|
||||
partition p3 values in (46,47,48,49,50,51,52,53,54,55,56,57,58,59,60)
|
||||
);
|
||||
}
|
||||
|
||||
let $part_t6= partition by range(colint)
|
||||
(partition p0 values less than ($valsqlfunc),
|
||||
partition p1 values less than maxvalue);
|
||||
|
||||
let $part_t55_altered= partition by list(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 5
|
||||
(partition p0 values in (1,2,3,4,5,6,7,8,9,10),
|
||||
partition p1 values in (11,12,13,14,15,16,17,18,19,20),
|
||||
partition p2 values in (21,22,23,24,25,26,27,28,29,30),
|
||||
partition p3 values in (31,32,33,34,35,36,37,38,39,40),
|
||||
partition p4 values in (41,42,43,44,45,46,47,48,49,50),
|
||||
partition p5 values in (51,52,53,54,55,56,57,58,59,60)
|
||||
);
|
||||
if ($max_8_partitions)
|
||||
{
|
||||
let $part_t55_altered= partition by list(colint)
|
||||
subpartition by hash($sqlfunc) subpartitions 4
|
||||
(partition p0 values in (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30),
|
||||
partition p1 values in (31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60)
|
||||
);
|
||||
}
|
||||
--echo -------------------------------------------------------------------------
|
||||
--echo --- Create tables with $sqlfunc
|
||||
--echo -------------------------------------------------------------------------
|
||||
eval create table t1 (col1 $coltype) engine=$engine
|
||||
$part_t1;
|
||||
|
||||
eval create table t2 (col1 $coltype) engine=$engine
|
||||
$part_t2;
|
||||
|
||||
eval create table t3 (col1 $coltype) engine=$engine
|
||||
$part_t3;
|
||||
|
||||
eval create table t4 (colint int, col1 $coltype) engine=$engine
|
||||
$part_t4;
|
||||
|
||||
eval create table t5 (colint int, col1 $coltype) engine=$engine
|
||||
$part_t5;
|
||||
|
||||
eval create table t6 (colint int, col1 $coltype) engine=$engine
|
||||
$part_t6;
|
||||
|
||||
--echo -------------------------------------------------------------------------
|
||||
--echo --- Access tables with $sqlfunc
|
||||
--echo -------------------------------------------------------------------------
|
||||
|
||||
eval insert into t1 values ($val1);
|
||||
eval insert into t1 values ($val2);
|
||||
|
||||
eval insert into t2 values ($val1);
|
||||
eval insert into t2 values ($val2);
|
||||
eval insert into t2 values ($val3);
|
||||
|
||||
eval insert into t3 values ($val1);
|
||||
eval insert into t3 values ($val2);
|
||||
eval insert into t3 values ($val3);
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data infile '$MYSQLTEST_VARDIR/std_data/parts/$infile' into table t4;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data infile '$MYSQLTEST_VARDIR/std_data/parts/$infile' into table t5;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data infile '$MYSQLTEST_VARDIR/std_data/parts/$infile' into table t6;
|
||||
|
||||
eval select $sqlfunc from t1 order by col1;
|
||||
|
||||
select * from t1 order by col1;
|
||||
select * from t2 order by col1;
|
||||
select * from t3 order by col1;
|
||||
select * from t4 order by colint;
|
||||
select * from t5 order by colint;
|
||||
select * from t6 order by colint;
|
||||
|
||||
if ($do_long_tests)
|
||||
{
|
||||
eval update t1 set col1=$val4 where col1=$val1;
|
||||
eval update t2 set col1=$val4 where col1=$val1;
|
||||
eval update t3 set col1=$val4 where col1=$val1;
|
||||
eval update t4 set col1=$val4 where col1=$val1;
|
||||
eval update t5 set col1=$val4 where col1=$val1;
|
||||
eval update t6 set col1=$val4 where col1=$val1;
|
||||
|
||||
select * from t1 order by col1;
|
||||
select * from t2 order by col1;
|
||||
select * from t3 order by col1;
|
||||
select * from t4 order by colint;
|
||||
select * from t5 order by colint;
|
||||
select * from t6 order by colint;
|
||||
}
|
||||
|
||||
--echo -------------------------------------------------------------------------
|
||||
--echo --- Alter tables with $sqlfunc
|
||||
--echo -------------------------------------------------------------------------
|
||||
|
||||
--disable_abort_on_error
|
||||
--disable_warnings
|
||||
drop table if exists t11 ;
|
||||
drop table if exists t22 ;
|
||||
drop table if exists t33 ;
|
||||
drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
--enable_warnings
|
||||
--enable_abort_on_error
|
||||
|
||||
eval create table t11 engine=$engine as select * from t1;
|
||||
eval create table t22 engine=$engine as select * from t2;
|
||||
eval create table t33 engine=$engine as select * from t3;
|
||||
eval create table t44 engine=$engine as select * from t4;
|
||||
eval create table t55 engine=$engine as select * from t5;
|
||||
eval create table t66 engine=$engine as select * from t6;
|
||||
eval alter table t11
|
||||
$part_t1;
|
||||
eval alter table t22
|
||||
$part_t2;
|
||||
eval alter table t33
|
||||
$part_t3;
|
||||
eval alter table t44
|
||||
$part_t4;
|
||||
eval alter table t55
|
||||
$part_t5;
|
||||
eval alter table t66
|
||||
$part_t6;
|
||||
|
||||
select * from t11 order by col1;
|
||||
select * from t22 order by col1;
|
||||
select * from t33 order by col1;
|
||||
select * from t44 order by colint;
|
||||
select * from t55 order by colint;
|
||||
select * from t66 order by colint;
|
||||
|
||||
if ($do_long_tests)
|
||||
{
|
||||
--echo ---------------------------
|
||||
--echo ---- some alter table begin
|
||||
--echo ---------------------------
|
||||
if (!$no_reorg_partition)
|
||||
{
|
||||
eval alter table t11
|
||||
reorganize partition p0,p1 into
|
||||
(partition s1 values less than maxvalue);
|
||||
select * from t11 order by col1;
|
||||
|
||||
eval alter table t11
|
||||
reorganize partition s1 into
|
||||
(partition p0 values less than (15),
|
||||
partition p1 values less than maxvalue);
|
||||
select * from t11 order by col1;
|
||||
}
|
||||
|
||||
eval alter table t55
|
||||
$part_t55_altered;
|
||||
show create table t55;
|
||||
select * from t55 order by colint;
|
||||
|
||||
if (!$no_reorg_partition)
|
||||
{
|
||||
eval alter table t66
|
||||
reorganize partition p0,p1 into
|
||||
(partition s1 values less than maxvalue);
|
||||
select * from t66 order by colint;
|
||||
|
||||
eval alter table t66
|
||||
reorganize partition s1 into
|
||||
(partition p0 values less than ($valsqlfunc),
|
||||
partition p1 values less than maxvalue);
|
||||
select * from t66 order by colint;
|
||||
|
||||
eval alter table t66
|
||||
reorganize partition p0,p1 into
|
||||
(partition s1 values less than maxvalue);
|
||||
select * from t66 order by colint;
|
||||
|
||||
eval alter table t66
|
||||
reorganize partition s1 into
|
||||
(partition p0 values less than ($valsqlfunc),
|
||||
partition p1 values less than maxvalue);
|
||||
select * from t66 order by colint;
|
||||
}
|
||||
|
||||
let $t1=t1;
|
||||
let $t2=t2;
|
||||
let $t3=t3;
|
||||
let $t4=t4;
|
||||
let $t5=t5;
|
||||
let $t6=t6;
|
||||
--source suite/parts/inc/part_supported_sql_funcs_delete.inc
|
||||
|
||||
let $t1=t11;
|
||||
let $t2=t22;
|
||||
let $t3=t33;
|
||||
let $t4=t44;
|
||||
let $t5=t55;
|
||||
let $t6=t66;
|
||||
--source suite/parts/inc/part_supported_sql_funcs_delete.inc
|
||||
--echo -------------------------
|
||||
--echo ---- some alter table end
|
||||
--echo -------------------------
|
||||
}
|
||||
--disable_warnings
|
||||
drop table if exists t1 ;
|
||||
drop table if exists t2 ;
|
||||
drop table if exists t3 ;
|
||||
drop table if exists t4 ;
|
||||
drop table if exists t5 ;
|
||||
drop table if exists t6 ;
|
||||
drop table if exists t11 ;
|
||||
drop table if exists t22 ;
|
||||
drop table if exists t33 ;
|
||||
drop table if exists t44 ;
|
||||
drop table if exists t55 ;
|
||||
drop table if exists t66 ;
|
||||
--enable_warnings
|
||||
|
||||
748
build/lib/mysql/mysql-test/suite/parts/inc/partition_syntax.inc
Normal file
748
build/lib/mysql/mysql-test/suite/parts/inc/partition_syntax.inc
Normal file
@@ -0,0 +1,748 @@
|
||||
################################################################################
|
||||
# inc/partition_syntax.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests around Create partitioned tables syntax #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
# FIXME Implement testcases, where it is checked that all create and
|
||||
# alter table statements
|
||||
# - with missing mandatory parameters are rejected
|
||||
# - with optional parameters are accepted
|
||||
# - with wrong combinations of optional parameters are rejected
|
||||
# - ............
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 1. Any PRIMARY KEYs or UNIQUE INDEXes must contain the columns used
|
||||
--echo # within the partitioning functions
|
||||
--echo #========================================================================
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.1 column of partitioning function not included in PRIMARY KEY
|
||||
--echo # PARTITION BY HASH/KEY/LIST/RANGE
|
||||
--echo #------------------------------------------------------------------------
|
||||
#----------- PARTITION BY HASH
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY HASH(f_int1) PARTITIONS 2;
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
|
||||
#----------- PARTITION BY KEY
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY KEY(f_int1) PARTITIONS 2;
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY KEY(f_int1,f_int2) PARTITIONS 2;
|
||||
#----------- PARTITION BY LIST
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY LIST(f_int1)
|
||||
(PARTITION part1 VALUES IN (1));
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY LIST(f_int1 + f_int2)
|
||||
(PARTITION part1 VALUES IN (1));
|
||||
#----------- PARTITION BY RANGE
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
(PARTITION part1 VALUES LESS THAN (1));
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY RANGE(f_int1 + f_int2)
|
||||
(PARTITION part1 VALUES LESS THAN (1));
|
||||
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.2 column of partitioning function not included in UNIQUE INDEX
|
||||
--echo # PARTITION BY HASH/KEY/LIST/RANGE
|
||||
--echo # Variant a) Without additional PRIMARY KEY
|
||||
--echo # Variant b) With correct additional PRIMARY KEY
|
||||
--echo # Variant 1) one column in partitioning function
|
||||
--echo # Variant 2) two columns in partitioning function
|
||||
--echo #------------------------------------------------------------------------
|
||||
# Note: If the CREATE TABLE statement contains no PRIMARY KEY but
|
||||
# UNIQUE INDEXes the MySQL layer tells the storage to use
|
||||
# the first UNIQUE INDEX as PRIMARY KEY.
|
||||
|
||||
let $unique_index= UNIQUE INDEX (f_int2);
|
||||
|
||||
#----------- PARTITION BY HASH
|
||||
let $partition_scheme= PARTITION BY HASH(f_int1) PARTITIONS 2;
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
let $partition_scheme= PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
#----------- PARTITION BY KEY
|
||||
let $partition_scheme= PARTITION BY KEY(f_int1) PARTITIONS 2;
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
let $partition_scheme= PARTITION BY KEY(f_int1,f_int2) PARTITIONS 2;
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
#----------- PARTITION BY LIST
|
||||
let $partition_scheme= PARTITION BY LIST(MOD(f_int1,3))
|
||||
(PARTITION partN VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2));
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
let $partition_scheme= PARTITION BY LIST(MOD(f_int1 + f_int2,3))
|
||||
(PARTITION partN VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2));
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
#----------- PARTITION BY RANGE
|
||||
let $partition_scheme= PARTITION BY RANGE(f_int1)
|
||||
(PARTITION part1 VALUES LESS THAN (1),
|
||||
PARTITION part2 VALUES LESS THAN (2147483646));
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
let $partition_scheme= PARTITION BY RANGE(f_int1 + f_int2)
|
||||
(PARTITION part1 VALUES LESS THAN (1),
|
||||
PARTITION part2 VALUES LESS THAN (2147483646));
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.3 column of subpartitioning function not included in PRIMARY KEY
|
||||
--echo # PARTITION BY RANGE/LIST -- SUBPARTITION BY HASH/KEY
|
||||
--echo #------------------------------------------------------------------------
|
||||
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY RANGE(f_int2) SUBPARTITION BY HASH(f_int1)
|
||||
(PARTITION part1 VALUES LESS THAN (1)
|
||||
(SUBPARTITION subpart1));
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY RANGE(f_int2) SUBPARTITION BY KEY(f_int1)
|
||||
(PARTITION part1 VALUES LESS THAN (1)
|
||||
(SUBPARTITION subpart1));
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY LIST(f_int2) SUBPARTITION BY HASH(f_int1)
|
||||
(PARTITION part1 VALUES IN (1)
|
||||
(SUBPARTITION subpart1));
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int2)
|
||||
)
|
||||
PARTITION BY LIST(f_int2) SUBPARTITION BY KEY(f_int1)
|
||||
(PARTITION part1 VALUES IN (1)
|
||||
(SUBPARTITION subpart1));
|
||||
|
||||
#
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 1.4 column of subpartitioning function not included in UNIQUE INDEX
|
||||
--echo # PARTITION BY RANGE/LIST -- SUBPARTITION BY HASH/KEY
|
||||
--echo # Variant a) Without additional PRIMARY KEY
|
||||
--echo # Variant b) With correct additional PRIMARY KEY
|
||||
--echo #------------------------------------------------------------------------
|
||||
let $partition_scheme= PARTITION BY RANGE(f_int2)
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 3
|
||||
(PARTITION part1 VALUES LESS THAN (1),
|
||||
PARTITION part2 VALUES LESS THAN (2147483646));
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
#----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
|
||||
let $partition_scheme= PARTITION BY RANGE(f_int2)
|
||||
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
|
||||
(PARTITION part1 VALUES LESS THAN (1),
|
||||
PARTITION part2 VALUES LESS THAN (2147483646));
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY HASH
|
||||
let $partition_scheme= PARTITION BY LIST(MOD(f_int2,3))
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
(PARTITION partN VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2));
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
#----------- PARTITION BY LIST -- SUBPARTITION BY KEY
|
||||
let $partition_scheme= PARTITION BY LIST(MOD(f_int2,3))
|
||||
SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 2
|
||||
(PARTITION partN VALUES IN (NULL),
|
||||
PARTITION part0 VALUES IN (0),
|
||||
PARTITION part1 VALUES IN (1),
|
||||
PARTITION part2 VALUES IN (2));
|
||||
--source suite/parts/inc/partition_syntax_2.inc
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 2 Some properties around subpartitioning
|
||||
--echo #========================================================================
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.1 Subpartioned table without subpartitioning rule must be rejected
|
||||
--echo #------------------------------------------------------------------------
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
# Bug#15961 Partitions: Creation of subpart. table without subpart. rule not rejected
|
||||
--error ER_SUBPARTITION_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11));
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 2.2 Every partition must have the same number of subpartitions.
|
||||
--echo # This is a limitation of MySQL 5.1, which could be removed in
|
||||
--echo # later releases.
|
||||
--echo #------------------------------------------------------------------------
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY (f_int1)
|
||||
)
|
||||
PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
|
||||
(
|
||||
PARTITION part1 VALUES LESS THAN (0)
|
||||
(SUBPARTITION subpart1),
|
||||
PARTITION part2 VALUES LESS THAN ($max_row_div4)
|
||||
(SUBPARTITION subpart1, SUBPARTITION subpart2));
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 3 VALUES clauses
|
||||
--echo #========================================================================
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3.1 The constants in VALUES IN clauses must differ
|
||||
--echo #------------------------------------------------------------------------
|
||||
--error ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY LIST(MOD(f_int1,2))
|
||||
( PARTITION part1 VALUES IN (-1),
|
||||
PARTITION part2 VALUES IN (0),
|
||||
PARTITION part3 VALUES IN (-1));
|
||||
# constant followed by the same constant
|
||||
--error ER_RANGE_NOT_INCREASING_ERROR
|
||||
CREATE TABLE t1 (f1 BIGINT, f2 BIGINT)
|
||||
PARTITION BY RANGE(f1)
|
||||
(PARTITION part1 VALUES LESS THAN (0),
|
||||
PARTITION part2 VALUES LESS THAN (0),
|
||||
PARTITION part3 VALUES LESS THAN (10000));
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3.2 The constants in VALUES LESS must be in increasing order
|
||||
--echo #------------------------------------------------------------------------
|
||||
# constant followed somewhere by the smaller constant
|
||||
--error ER_RANGE_NOT_INCREASING_ERROR
|
||||
CREATE TABLE t1 (f1 BIGINT, f2 BIGINT)
|
||||
PARTITION BY RANGE(f1)
|
||||
(PARTITION part1 VALUES LESS THAN (0),
|
||||
PARTITION part2 VALUES LESS THAN (-1),
|
||||
PARTITION part3 VALUES LESS THAN (10000));
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3.3 LIST partitions must be defined with VALUES IN
|
||||
--echo #------------------------------------------------------------------------
|
||||
--error ER_PARTITION_WRONG_VALUES_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY LIST(MOD(f_int1,2))
|
||||
( PARTITION part1 VALUES LESS THAN (-1),
|
||||
PARTITION part2 VALUES LESS THAN (0),
|
||||
PARTITION part3 VALUES LESS THAN (1000));
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3.4 RANGE partitions must be defined with VALUES LESS THAN
|
||||
--echo #------------------------------------------------------------------------
|
||||
--error ER_PARTITION_WRONG_VALUES_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
( PARTITION part1 VALUES IN (-1),
|
||||
PARTITION part2 VALUES IN (0),
|
||||
PARTITION part3 VALUES IN (1000));
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3.5 Use of NULL in VALUES clauses
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 3.5.1 NULL in RANGE partitioning clause
|
||||
--echo # 3.5.1.1 VALUE LESS THAN (NULL) is not allowed
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN (NULL),
|
||||
PARTITION part2 VALUES LESS THAN (1000));
|
||||
--echo # 3.5.1.2 VALUE LESS THAN (NULL) is not allowed
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN (NULL),
|
||||
PARTITION part2 VALUES LESS THAN (1000));
|
||||
--echo # 3.5.2 NULL in LIST partitioning clause
|
||||
--echo # 3.5.2.1 VALUE IN (NULL)
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY LIST(MOD(f_int1,2))
|
||||
( PARTITION part1 VALUES IN (NULL),
|
||||
PARTITION part2 VALUES IN (0),
|
||||
PARTITION part3 VALUES IN (1));
|
||||
DROP TABLE t1;
|
||||
--echo # 3.5.2.2 VALUE IN (NULL)
|
||||
# Attention: It is intended that there is no partition with
|
||||
# VALUES IN (0), because there was a time where NULL was treated as zero
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY LIST(MOD(f_int1,2))
|
||||
( PARTITION part1 VALUES IN (NULL),
|
||||
PARTITION part3 VALUES IN (1));
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
DROP TABLE t1;
|
||||
--echo # 3.5.3 Reveal that IN (...NULL) is not mapped to IN(0)
|
||||
# Bug#15447: Partitions: NULL is treated as zero
|
||||
# We would get a clash here if such a mapping would be done.
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY LIST(MOD(f_int1,2))
|
||||
( PARTITION part1 VALUES IN (NULL),
|
||||
PARTITION part2 VALUES IN (0),
|
||||
PARTITION part3 VALUES IN (1));
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
# FIXME Implement some non integer constant tests
|
||||
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 4. Check assigning the number of partitions and subpartitions
|
||||
--echo # with and without named partitions/subpartitions
|
||||
--echo #========================================================================
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 4.1 (positive) without partition/subpartition number assignment
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 4.1.1 no partition number, no named partitions
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1);
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
DROP TABLE t1;
|
||||
--echo # 4.1.2 no partition number, named partitions
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1) (PARTITION part1, PARTITION part2);
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
DROP TABLE t1;
|
||||
# Attention: Several combinations are impossible
|
||||
# If subpartitioning exists
|
||||
# - partitioning algorithm must be RANGE or LIST
|
||||
# This implies the assignment of named partitions.
|
||||
# - subpartitioning algorithm must be HASH or KEY
|
||||
--echo # 4.1.3 variations on no partition/subpartition number, named partitions,
|
||||
--echo # different subpartitions are/are not named
|
||||
#
|
||||
# Partition name -- "properties"
|
||||
# part1 -- first/non last
|
||||
# part2 -- non first/non last
|
||||
# part3 -- non first/ last
|
||||
#
|
||||
# Testpattern:
|
||||
# named subpartitions in
|
||||
# Partition part1 part2 part3
|
||||
# N N N
|
||||
# N N Y
|
||||
# N Y N
|
||||
# N Y Y
|
||||
# Y N N
|
||||
# Y N Y
|
||||
# Y Y N
|
||||
# Y Y Y
|
||||
--disable_query_log
|
||||
let $part01= CREATE TABLE t1 ( ;
|
||||
let $part02= )
|
||||
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1);
|
||||
#
|
||||
eval SET @aux = '(PARTITION part1 VALUES LESS THAN ($max_row_div2),';
|
||||
let $part1_N= `SELECT @AUX`;
|
||||
eval SET @aux = '(PARTITION part1 VALUES LESS THAN ($max_row_div2)
|
||||
(SUBPARTITION subpart11 , SUBPARTITION subpart12 ),';
|
||||
let $part1_Y= `SELECT @AUX`;
|
||||
#
|
||||
eval SET @aux = 'PARTITION part2 VALUES LESS THAN ($max_row),';
|
||||
let $part2_N= `SELECT @AUX`;
|
||||
eval SET @aux = 'PARTITION part2 VALUES LESS THAN ($max_row)
|
||||
(SUBPARTITION subpart21 , SUBPARTITION subpart22 ),';
|
||||
let $part2_Y= `SELECT @AUX`;
|
||||
#
|
||||
eval SET @aux = 'PARTITION part3 VALUES LESS THAN $MAX_VALUE)';
|
||||
let $part3_N= `SELECT @AUX`;
|
||||
eval SET @aux = 'PARTITION part3 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart31 , SUBPARTITION subpart32 ))';
|
||||
let $part3_Y= `SELECT @AUX`;
|
||||
--enable_query_log
|
||||
|
||||
eval $part01 $column_list $part02 $part1_N $part2_N $part3_N ;
|
||||
DROP TABLE t1;
|
||||
# Bug#15407 Partitions: crash if subpartition
|
||||
--error ER_PARSE_ERROR
|
||||
eval $part01 $column_list $part02 $part1_N $part2_N $part3_Y ;
|
||||
--error ER_PARSE_ERROR
|
||||
eval $part01 $column_list $part02 $part1_N $part2_Y $part3_N ;
|
||||
--error ER_PARSE_ERROR
|
||||
eval $part01 $column_list $part02 $part1_N $part2_Y $part3_Y ;
|
||||
--error ER_PARSE_ERROR
|
||||
eval $part01 $column_list $part02 $part1_Y $part2_N $part3_N ;
|
||||
--error ER_PARSE_ERROR
|
||||
eval $part01 $column_list $part02 $part1_Y $part2_N $part3_Y ;
|
||||
--error ER_PARSE_ERROR
|
||||
eval $part01 $column_list $part02 $part1_Y $part2_Y $part3_N ;
|
||||
eval $part01 $column_list $part02 $part1_Y $part2_Y $part3_Y ;
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 4.2 partition/subpartition numbers good and bad values and notations
|
||||
--echo #------------------------------------------------------------------------
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
--echo # 4.2.1 partition/subpartition numbers INTEGER notation
|
||||
# mleich: "positive/negative" is my private judgement. It need not to
|
||||
# correspond with the server response.
|
||||
# (positive) number = 2
|
||||
let $part_number= 2;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (positive) special case number = 1
|
||||
let $part_number= 1;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) 0 is non sense
|
||||
let $part_number= 0;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) -1 is non sense
|
||||
let $part_number= -1;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) 1000000 is too huge
|
||||
let $part_number= 1000000;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
|
||||
--echo # 4.2.2 partition/subpartition numbers DECIMAL notation
|
||||
# (positive) number = 2.0
|
||||
let $part_number= 2.0;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) -2.0 is non sense
|
||||
let $part_number= -2.0;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) case number = 0.0 is non sense
|
||||
let $part_number= 0.0;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# Bug#15890 Partitions: Strange interpretation of partition number
|
||||
# (negative) number = 1.6 is non sense
|
||||
let $part_number= 1.6;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) number is too huge
|
||||
let $part_number= 999999999999999999999999999999.999999999999999999999999999999;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) number is nearly zero
|
||||
let $part_number= 0.000000000000000000000000000001;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
|
||||
--echo # 4.2.3 partition/subpartition numbers FLOAT notation
|
||||
##### FLOAT notation
|
||||
# (positive) number = 2.0E+0
|
||||
let $part_number= 2.0E+0;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# Bug#15890 Partitions: Strange interpretation of partition number
|
||||
# (positive) number = 0.2E+1
|
||||
let $part_number= 0.2E+1;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) -2.0E+0 is non sense
|
||||
let $part_number= -2.0E+0;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# Bug#15890 Partitions: Strange interpretation of partition number
|
||||
# (negative) 0.16E+1 is non sense
|
||||
let $part_number= 0.16E+1;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) 0.0E+300 is zero
|
||||
let $part_number= 0.0E+300;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# Bug#15890 Partitions: Strange interpretation of partition number
|
||||
# (negative) 1E+300 is too huge
|
||||
let $part_number= 1E+300;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) 1E-300 is nearly zero
|
||||
let $part_number= 1E-300;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
|
||||
--echo # 4.2.4 partition/subpartition numbers STRING notation
|
||||
##### STRING notation
|
||||
# (negative?) case number = '2'
|
||||
let $part_number= '2';
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative?) case number = '2.0'
|
||||
let $part_number= '2.0';
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative?) case number = '0.2E+1'
|
||||
let $part_number= '0.2E+1';
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) Strings starts with digit, but 'A' follows
|
||||
let $part_number= '2A';
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) Strings starts with 'A', but digit follows
|
||||
let $part_number= 'A2';
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) empty string
|
||||
let $part_number= '';
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) string without any digits
|
||||
let $part_number= 'GARBAGE';
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
|
||||
--echo # 4.2.5 partition/subpartition numbers other notations
|
||||
# (negative) Strings starts with digit, but 'A' follows
|
||||
let $part_number= 2A;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) Strings starts with 'A', but digit follows
|
||||
let $part_number= A2;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) string without any digits
|
||||
let $part_number= GARBAGE;
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
|
||||
# (negative?) double quotes
|
||||
let $part_number= "2";
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) Strings starts with digit, but 'A' follows
|
||||
let $part_number= "2A";
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) Strings starts with 'A', but digit follows
|
||||
let $part_number= "A2";
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
# (negative) string without any digits
|
||||
let $part_number= "GARBAGE";
|
||||
--source suite/parts/inc/partition_syntax_1.inc
|
||||
|
||||
--echo # 4.2.6 (negative) partition/subpartition numbers per @variables
|
||||
SET @aux = 5;
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1) PARTITIONS @aux;
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
|
||||
SUBPARTITIONS @aux = 5
|
||||
(PARTITION part1 VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE);
|
||||
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 4.3 Mixups of assigned partition/subpartition numbers and names
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 4.3.1 (positive) number of partition/subpartition
|
||||
--echo # = number of named partition/subpartition
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1) PARTITIONS 2 ( PARTITION part1, PARTITION part2 ) ;
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
DROP TABLE t1;
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1) PARTITIONS 2
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11, SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21, SUBPARTITION subpart22)
|
||||
);
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
DROP TABLE t1;
|
||||
--echo # 4.3.2 (positive) number of partition/subpartition ,
|
||||
--echo # 0 (= no) named partition/subpartition
|
||||
--echo # already checked above
|
||||
--echo # 4.3.3 (negative) number of partitions/subpartitions
|
||||
--echo # > number of named partitions/subpartitions
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1) PARTITIONS 2 ( PARTITION part1 ) ;
|
||||
# Wrong number of named subpartitions in first partition
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11 ),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21, SUBPARTITION subpart22)
|
||||
);
|
||||
# Wrong number of named subpartitions in non first/non last partition
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11, SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN (2000)
|
||||
(SUBPARTITION subpart21 ),
|
||||
PARTITION part3 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart31, SUBPARTITION subpart32)
|
||||
);
|
||||
# Wrong number of named subpartitions in last partition
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1) PARTITIONS 2
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11, SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21 )
|
||||
);
|
||||
--echo # 4.3.4 (negative) number of partitions < number of named partitions
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1) PARTITIONS 1 ( PARTITION part1, PARTITION part2 ) ;
|
||||
# Wrong number of named subpartitions in first partition
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 1
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11, SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21, SUBPARTITION subpart22)
|
||||
);
|
||||
# Wrong number of named subpartitions in non first/non last partition
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 1
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11, SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN (2000)
|
||||
(SUBPARTITION subpart21 ),
|
||||
PARTITION part3 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart31, SUBPARTITION subpart32)
|
||||
);
|
||||
# Wrong number of named subpartitions in last partition
|
||||
--error ER_PARSE_ERROR
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 1
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11, SUBPARTITION subpart12),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE
|
||||
(SUBPARTITION subpart21, SUBPARTITION subpart22)
|
||||
);
|
||||
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # 5. Checks of logical partition/subpartition name
|
||||
--echo # file name clashes during CREATE TABLE
|
||||
--echo #========================================================================
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 5.1 (negative) A partition/subpartition name used more than once
|
||||
--echo #------------------------------------------------------------------------
|
||||
--echo # 5.1.1 duplicate partition name
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1) (PARTITION part1, PARTITION part1);
|
||||
#
|
||||
--echo # 5.1.2 duplicate subpartition name
|
||||
# Bug#15408 Partitions: subpartition names are not unique
|
||||
--error ER_SAME_NAME_PARTITION
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1)
|
||||
SUBPARTITION BY HASH(f_int1)
|
||||
( PARTITION part1 VALUES LESS THAN (1000)
|
||||
(SUBPARTITION subpart11, SUBPARTITION subpart11)
|
||||
);
|
||||
|
||||
# FIXME Implement testcases with filename problems
|
||||
# existing file of other table --- partition/subpartition file name
|
||||
# partition/subpartition file name --- file of the same table
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
################################################################################
|
||||
# inc/partition_syntax_1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Auxiliary script, only useful when sourced by inc/partition_syntax.inc #
|
||||
# #
|
||||
# Try to create a table with number of partitions/subpartitions #
|
||||
# = $part_number. Print the layout of the table and drop it. #
|
||||
# #
|
||||
# The parameter $part_number must be set before sourcing this script. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: mleich #
|
||||
# Change Date: 2007-10-08 #
|
||||
# Change: Fix for #
|
||||
# Bug#31481 test suite parts: Many tests fail because of #
|
||||
# changed server error codes #
|
||||
################################################################################
|
||||
|
||||
--disable_abort_on_error
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(f_int1) PARTITIONS $part_number;
|
||||
--enable_abort_on_error
|
||||
--disable_query_log
|
||||
eval SET @my_errno= $mysql_errno ;
|
||||
let $run= `SELECT @my_errno = 0`;
|
||||
# Expected error codes are
|
||||
# 0, ER_PARSE_ERROR (Reason: assign -1 partitions), ER_TOO_MANY_PARTITIONS_ERROR
|
||||
# and ER_NO_PARTS_ERROR
|
||||
if (`SELECT @my_errno NOT IN (0,$ER_PARSE_ERROR,$ER_TOO_MANY_PARTITIONS_ERROR,
|
||||
$ER_NO_PARTS_ERROR)`)
|
||||
{
|
||||
--echo # The last command got an unexepected error response.
|
||||
--echo # Expected/handled SQL codes are 0,$ER_PARSE_ERROR,$ER_TOO_MANY_PARTITIONS_ERROR,$ER_NO_PARTS_ERROR
|
||||
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
|
||||
--echo # Sorry, have to abort.
|
||||
exit;
|
||||
--echo
|
||||
}
|
||||
--enable_query_log
|
||||
#
|
||||
# If this operation was successfull, print layout + drop this table
|
||||
if ($run)
|
||||
{
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
eval DROP TABLE t1;
|
||||
}
|
||||
#### Try to create a table with the given subpartition number
|
||||
--disable_abort_on_error
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
|
||||
SUBPARTITIONS $part_number
|
||||
(PARTITION part1 VALUES LESS THAN ($max_row_div2),
|
||||
PARTITION part2 VALUES LESS THAN $MAX_VALUE);
|
||||
--enable_abort_on_error
|
||||
--disable_query_log
|
||||
eval SET @my_errno= $mysql_errno ;
|
||||
let $run= `SELECT @my_errno = 0`;
|
||||
# Expected error codes are
|
||||
# 0, ER_PARSE_ERROR (Reason: assign -1 partitions), ER_TOO_MANY_PARTITIONS_ERROR
|
||||
# and ER_NO_PARTS_ERROR
|
||||
if (`SELECT @my_errno NOT IN (0,$ER_PARSE_ERROR,$ER_TOO_MANY_PARTITIONS_ERROR,
|
||||
$ER_NO_PARTS_ERROR)`)
|
||||
{
|
||||
--echo # The last command got an unexepected error response.
|
||||
--echo # Expected/handled SQL codes are 0,$ER_PARSE_ERROR,$ER_TOO_MANY_PARTITIONS_ERROR,$ER_NO_PARTS_ERROR
|
||||
SELECT '# SQL code we got was: ' AS "", @my_errno AS "";
|
||||
--echo # Sorry, have to abort.
|
||||
exit;
|
||||
--echo
|
||||
}
|
||||
--enable_query_log
|
||||
#
|
||||
# If this operation was successfull, print layout + drop this table
|
||||
if ($run)
|
||||
{
|
||||
--source suite/parts/inc/partition_layout_check1.inc
|
||||
eval DROP TABLE t1;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
################################################################################
|
||||
# inc/partition_syntax_2.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Auxiliary script, only useful when sourced by inc/partition_syntax.inc. #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-05-11 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
if (`SELECT @@session.storage_engine NOT IN('ndbcluster')`)
|
||||
{
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
$unique_index
|
||||
)
|
||||
$partition_scheme;
|
||||
--error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY(f_int1,f_int2), $unique_index
|
||||
)
|
||||
$partition_scheme;
|
||||
}
|
||||
if (`SELECT @@session.storage_engine IN('ndbcluster')`)
|
||||
{
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
$unique_index
|
||||
)
|
||||
$partition_scheme;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list,
|
||||
PRIMARY KEY(f_int1,f_int2), $unique_index
|
||||
)
|
||||
$partition_scheme;
|
||||
eval $insert_all;
|
||||
--source suite/parts/inc/partition_check.inc
|
||||
DROP TABLE t1;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
--echo ---- Partitioning and text data type
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t1 (a text not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
|
||||
#show create table t1;
|
||||
#insert into t1 values (repeat('a',1000)), ('b'), (repeat('a',500)), (repeat('b',64));
|
||||
#select * from t1;
|
||||
#select * from t1 where a='b';
|
||||
#update t1 set a='bb' where a='b';
|
||||
#delete from t1 where a='bb';
|
||||
#select * from t1;
|
||||
#drop table t1;
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t2 (a tinytext not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) partitions 30;
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t2 (a mediumtext not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) partitions 30;
|
||||
|
||||
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
|
||||
eval create table t2 (a longtext not null, primary key(a(767))) engine=$engine
|
||||
partition by key (a) partitions 30;
|
||||
|
||||
#show create table t2;
|
||||
#let $count=30;
|
||||
#let $letter=0;
|
||||
#--echo $count inserts;
|
||||
#--disable_query_log
|
||||
#while ($count)
|
||||
#{
|
||||
#eval insert into t2 values (repeat(char(ascii('a')+$letter),$count*$count));
|
||||
#dec $count;
|
||||
#inc $letter;
|
||||
#}
|
||||
#select count(*) from t2;
|
||||
#select * from t2;
|
||||
#drop table t2;
|
||||
@@ -0,0 +1,74 @@
|
||||
eval create table t1 (a time not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values ('21:21:21'), ('12:10:30'), ('03:03:03'), ('23:59');
|
||||
select * from t1;
|
||||
select * from t1 where a=030303;
|
||||
delete from t1 where a=030303;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a time not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 12;
|
||||
show create table t2;
|
||||
insert into t2 values ('0:1:1'), ('10:11:12'), ('13:14:15'), ('14:15:16');
|
||||
select * from t2;
|
||||
select * from t2 where a='13:14:15';
|
||||
delete from t2 where a='13:14:15';
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=59;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (000100+$count);
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a time not null, primary key(a)) engine=$engine
|
||||
partition by range (second(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values less than (16),
|
||||
partition quarter2 values less than (31),
|
||||
partition quarter3 values less than (46),
|
||||
partition quarter4 values less than (61)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=59;
|
||||
--echo $count inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values (100000+$count);
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
|
||||
eval create table t4 (a time not null, primary key(a)) engine=$engine
|
||||
partition by list (second(a)) subpartition by key (a)
|
||||
subpartitions 3 (
|
||||
partition quarter1 values in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15),
|
||||
partition quarter2 values in (16,17,18,19,20,21,22,23,24,25,26,27,28,29,30),
|
||||
partition quarter3 values in (31,32,33,34,35,36,37,38,39,40,41,42,43,44,45),
|
||||
partition quarter4 values in (46,47,48,49,50,51,52,53,54,55,56,57,58,59,60)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=59;
|
||||
--echo $count inserts;
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values (100000+$count);
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t4;
|
||||
select * from t4;
|
||||
drop table t4;
|
||||
@@ -0,0 +1,80 @@
|
||||
eval create table t1 (a timestamp not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values ('1975-01-01 21:21:21'), ('2020-12-31 12:10:30'), ('1980-10-14 03:03'), ('2000-06-15 23:59');
|
||||
select * from t1;
|
||||
select * from t1 where a=19801014030300;
|
||||
delete from t1 where a=19801014030300;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a timestamp not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 12;
|
||||
show create table t2;
|
||||
insert into t2 values ('1975-01-01 0:1:1'), ('2020-12-31 10:11:12'), ('1980-10-14 13:14:15'), ('2000-06-15 14:15:16');
|
||||
select * from t2;
|
||||
select * from t2 where a='1980-10-14 13:14:15';
|
||||
delete from t2 where a='1980-10-14 13:14:15';
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=59;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (19710101000000+$count);
|
||||
dec $count;
|
||||
}
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
################################################################################
|
||||
# The following 2 tests are no longer valid after bug #42849 has been fixed:
|
||||
# it is not possible to use a timezone-dependent (such as month(timestamp_col)
|
||||
# or just a timestamp_col in a numeric context) anymore.
|
||||
################################################################################
|
||||
|
||||
# eval create table t3 (a timestamp not null, primary key(a)) engine=$engine
|
||||
# partition by range (month(a)) subpartition by key (a)
|
||||
# subpartitions 3 (
|
||||
# partition quarter1 values less than (4),
|
||||
# partition quarter2 values less than (7),
|
||||
# partition quarter3 values less than (10),
|
||||
# partition quarter4 values less than (13)
|
||||
# );
|
||||
# show create table t3;
|
||||
# let $count=12;
|
||||
# --echo $count inserts;
|
||||
# while ($count)
|
||||
# {
|
||||
# eval insert into t3 values (date_add('1970-01-01 00:00:00',interval $count-1 month));
|
||||
# dec $count;
|
||||
# }
|
||||
# select count(*) from t3;
|
||||
# select * from t3;
|
||||
# drop table t3;
|
||||
|
||||
# eval create table t4 (a timestamp not null, primary key(a)) engine=$engine
|
||||
# partition by list (month(a)) subpartition by key (a)
|
||||
# subpartitions 3 (
|
||||
# partition quarter1 values in (0,1,2,3),
|
||||
# partition quarter2 values in (4,5,6),
|
||||
# partition quarter3 values in (7,8,9),
|
||||
# partition quarter4 values in (10,11,12)
|
||||
# );
|
||||
# show create table t4;
|
||||
# let $count=12;
|
||||
# --echo $count inserts;
|
||||
# while ($count)
|
||||
# {
|
||||
# eval insert into t4 values (date_add('1970-01-01 00:00:00',interval $count-1 month));
|
||||
# dec $count;
|
||||
# }
|
||||
# select count(*) from t4;
|
||||
# select * from t4;
|
||||
# drop table t4;
|
||||
@@ -0,0 +1,50 @@
|
||||
eval create table t1 (a tinyint unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (255), (254), (253), (252), (1), (2), (128);
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
select * from t1 where a=253;
|
||||
delete from t1 where a=253;
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a tinyint unsigned not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 8;
|
||||
show create table t2;
|
||||
insert into t2 values (255), (254), (253), (252);
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
select * from t2 where a=253;
|
||||
delete from t2 where a=253;
|
||||
--sorted_result
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=255;
|
||||
--echo 255 inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values ($count);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
drop table t2;
|
||||
|
||||
eval create table t3 (a tinyint not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 7;
|
||||
show create table t3;
|
||||
insert into t3 values (127), (126), (125), (124), (-128), (-127), (1), (-1), (0);
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
select * from t3 where a=125;
|
||||
delete from t3 where a=125;
|
||||
--sorted_result
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
115
build/lib/mysql/mysql-test/suite/parts/inc/partition_trigg1.inc
Normal file
115
build/lib/mysql/mysql-test/suite/parts/inc/partition_trigg1.inc
Normal file
@@ -0,0 +1,115 @@
|
||||
################################################################################
|
||||
# inc/partition_trigg1.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Auxiliary script, only useful when sourced by inc/partition_check.inc. #
|
||||
# One trigger uses new values (--> event UPDATE, INSERT only) #
|
||||
# One trigger uses old values (--> event UPDATE, DELETE only) #
|
||||
# #
|
||||
# 1. Create a trigger #
|
||||
# 2. Execute a statement, which activates the trigger #
|
||||
# 3. Check the results of the trigger activity #
|
||||
# 4. Revert the modifications #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
# Test for operations, which have new values (INSERT+UPDATE, but not DELETE)
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT INSTR('$statement','DELETE') = 0 INTO @aux;
|
||||
let $run1= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
if ($run1)
|
||||
{
|
||||
# Insert three records which are only needed for UPDATE TRIGGER test
|
||||
eval INSERT INTO $tab_has_trigg(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
|
||||
'just inserted' FROM t0_template
|
||||
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
|
||||
delimiter |;
|
||||
eval CREATE TRIGGER trg_1 $event ON $tab_has_trigg FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE $tab_in_trigg SET f_int1 = -f_int1, f_int2 = -f_int2,
|
||||
f_charbig = 'updated by trigger'
|
||||
WHERE f_int1 = new.f_int1;
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
eval $statement;
|
||||
|
||||
# Check of preceding statement via Select
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT '# check trigger-$num success: ' AS "", COUNT(*) = 3 AS ""
|
||||
FROM $tab_in_trigg
|
||||
WHERE f_int1 = f_int2 AND CAST(f_char1 AS SIGNED INT) = -f_int1;
|
||||
--enable_query_log
|
||||
|
||||
DROP TRIGGER trg_1;
|
||||
|
||||
# Revert the changes
|
||||
eval UPDATE $tab_in_trigg SET f_int1 = CAST(f_char1 AS SIGNED INT),
|
||||
f_int2 = CAST(f_char1 AS SIGNED INT),
|
||||
f_charbig = 'just inserted'
|
||||
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
|
||||
eval DELETE FROM $tab_has_trigg
|
||||
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
|
||||
inc $num;
|
||||
}
|
||||
|
||||
# Test for operations, which have old values (UPDATE+DELETE, but not INSERT)
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT INSTR('$statement','INSERT') = 0 INTO @aux;
|
||||
let $run1= `SELECT @aux`;
|
||||
--enable_query_log
|
||||
if ($run1)
|
||||
{
|
||||
# Insert three records which are only needed for UPDATE/DELETE TRIGGER test
|
||||
eval INSERT INTO $tab_has_trigg(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT -f_int1,-f_int1,CAST(-f_int1 AS CHAR),CAST(-f_int1 AS CHAR),
|
||||
'just inserted' FROM t0_template
|
||||
WHERE f_int1 BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
|
||||
|
||||
delimiter |;
|
||||
eval CREATE TRIGGER trg_1 $event ON $tab_has_trigg FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE $tab_in_trigg SET f_int1 = -f_int1, f_int2 = -f_int2,
|
||||
f_charbig = 'updated by trigger'
|
||||
WHERE f_int1 = - old.f_int1;
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
eval $statement;
|
||||
|
||||
# Check of preceding statement via Select
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT '# check trigger-$num success: ' AS "", COUNT(*) = 3 AS ""
|
||||
FROM $tab_in_trigg
|
||||
WHERE f_int1 = f_int2 AND CAST(f_char1 AS SIGNED INT) = -f_int1;
|
||||
--enable_query_log
|
||||
DROP TRIGGER trg_1;
|
||||
# Revert the changes
|
||||
eval UPDATE $tab_in_trigg SET f_int1 = CAST(f_char1 AS SIGNED INT),
|
||||
f_int2 = CAST(f_char1 AS SIGNED INT),
|
||||
f_charbig = 'just inserted'
|
||||
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT);
|
||||
eval DELETE FROM $tab_has_trigg
|
||||
WHERE ABS(f_int1) BETWEEN @max_row_div2 - 1 AND @max_row_div2 + 1;
|
||||
inc $num;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
################################################################################
|
||||
# inc/partition_trigg2.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Auxiliary script, only useful when sourced by inc/partition_check.inc. #
|
||||
# The trigger uses new values (--> event UPDATE, INSERT only) #
|
||||
# #
|
||||
# 1. Create a trigger #
|
||||
# 2. Execute a statement, which activates the trigger #
|
||||
# 3. Check the results of the trigger activity #
|
||||
# 4. Revert the modifications #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
delimiter |;
|
||||
eval CREATE TRIGGER trg_2 $event ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
SET new.f_int1 = $source.f_int1 + @max_row,
|
||||
new.f_int2 = $source.f_int2 - @max_row,
|
||||
new.f_charbig = '####updated per update trigger####';
|
||||
END|
|
||||
delimiter ;|
|
||||
eval $statement;
|
||||
# Check of preceding statement via Select
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
eval SELECT '# check trigger-$num success: ' AS "", COUNT(*) = 0 AS "" FROM t1
|
||||
WHERE f_int1 - CAST(f_char1 AS SIGNED INT) NOT IN (@max_row, 2 * @max_row)
|
||||
OR f_int2 - CAST(f_char1 AS SIGNED INT) NOT IN (-@max_row, - 2 * @max_row)
|
||||
OR f_charbig <> '####updated per update trigger####';
|
||||
--enable_query_log
|
||||
DROP TRIGGER trg_2;
|
||||
# Revert the changes
|
||||
eval UPDATE t1 SET f_int1 = CAST(f_char1 AS SIGNED INT),
|
||||
f_int2 = CAST(f_char1 AS SIGNED INT),
|
||||
f_charbig = CONCAT('===',f_char1,'===');
|
||||
inc $num;
|
||||
@@ -0,0 +1,69 @@
|
||||
################################################################################
|
||||
# inc/partition_trigg3.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Auxiliary script, only useful when sourced by inc/partition_check.inc. #
|
||||
# The trigger uses new values (--> event UPDATE, INSERT only) #
|
||||
# #
|
||||
# 1. Create a trigger #
|
||||
# 2. Execute a statement, which activates the trigger #
|
||||
# 3. Check the results of the trigger activity #
|
||||
# 4. Revert the modifications #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-03-05 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
delimiter |;
|
||||
# Original version of the trigger
|
||||
# eval CREATE TRIGGER trg_3 $event ON t1 FOR EACH ROW
|
||||
# BEGIN
|
||||
# SET @counter = 1;
|
||||
# SET @my_max1 = 0, @my_max2 = 0;
|
||||
# SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
|
||||
# SET new.f_int1 = @my_max1 + @counter,
|
||||
# new.f_int2 = @my_min2 - @counter,
|
||||
# new.f_charbig = '####updated per insert trigger####';
|
||||
# SET @counter = @counter + 1;
|
||||
# END|
|
||||
#
|
||||
# Bug/currently undocumented limitation:
|
||||
# 17704: Triggers: MAX, Insert select with several rows, strange error
|
||||
# "A trigger can not access (not even read data) the table it's defined for."
|
||||
#
|
||||
eval CREATE TRIGGER trg_3 $event ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
SET new.f_int1 = @my_max1 + @counter,
|
||||
new.f_int2 = @my_min2 - @counter,
|
||||
new.f_charbig = '####updated per insert trigger####';
|
||||
SET @counter = @counter + 1;
|
||||
END|
|
||||
delimiter ;|
|
||||
# Additional statements because of Bug(limitation)#17704
|
||||
SET @counter = 1;
|
||||
# Bug#18730 Partitions: NDB, crash on SELECT MIN(<unique column>)
|
||||
SELECT MAX(f_int1), MIN(f_int2) INTO @my_max1,@my_min2 FROM t1;
|
||||
# Additional statements end
|
||||
eval $statement;
|
||||
DROP TRIGGER trg_3;
|
||||
# Check of preceding statement via Select
|
||||
if ($no_debug)
|
||||
{
|
||||
--disable_query_log
|
||||
}
|
||||
# We insert records around max_row_div2 !
|
||||
eval SELECT '# check trigger-$num success: ' AS "", COUNT(*) = 3 AS "" FROM t1
|
||||
WHERE f_int1 = CAST(f_char1 AS SIGNED INT) + @max_row_div2 + 2
|
||||
AND f_int2 = - CAST(f_char1 AS SIGNED INT) + @max_row_div2 - 1
|
||||
AND f_charbig = '####updated per insert trigger####';
|
||||
--enable_query_log
|
||||
# Revert the changes
|
||||
eval DELETE FROM t1
|
||||
WHERE f_int1 <> CAST(f_char1 AS SIGNED INT)
|
||||
AND f_int2 <> CAST(f_char1 AS SIGNED INT)
|
||||
AND f_charbig = '####updated per insert trigger####';
|
||||
inc $num;
|
||||
169
build/lib/mysql/mysql-test/suite/parts/inc/partition_value.inc
Normal file
169
build/lib/mysql/mysql-test/suite/parts/inc/partition_value.inc
Normal file
@@ -0,0 +1,169 @@
|
||||
################################################################################
|
||||
# inc/partition_value.inc #
|
||||
# #
|
||||
# Purpose: #
|
||||
# Tests around "exotic" values calculated by the partitioning function #
|
||||
# #
|
||||
#------------------------------------------------------------------------------#
|
||||
# Original Author: mleich #
|
||||
# Original Date: 2006-04-11 #
|
||||
# Change Author: #
|
||||
# Change Date: #
|
||||
# Change: #
|
||||
################################################################################
|
||||
|
||||
|
||||
--echo
|
||||
--echo This test relies on the CAST() function for partitioning, which
|
||||
--echo is not allowed. Not deleting it yet, as it may have some useful
|
||||
--echo bits in it. See Bug #30581, "partition_value tests use disallowed
|
||||
--echo CAST() function"
|
||||
--echo
|
||||
|
||||
--disable_parsing
|
||||
|
||||
--echo
|
||||
--echo #========================================================================
|
||||
--echo # Calculation of "exotic" results within the partition function
|
||||
--echo # outside of SIGNED BIGINT value range, 0, NULL
|
||||
--echo # column used in partitioning function has type CHAR
|
||||
--echo #========================================================================
|
||||
--echo # 1. HASH(<check value>)
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
#
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY HASH(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) PARTITIONS 8;
|
||||
let $my_val= 2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
let $my_val= -2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
let $my_val= 0;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
# let $my_val= NULL;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES(NULL,NULL,NULL,NULL,NULL);
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
--echo # 2. RANGE(<check value>)
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER))
|
||||
(PARTITION p0 VALUES LESS THAN (0),
|
||||
PARTITION p1 VALUES LESS THAN (1000000),
|
||||
PARTITION p2 VALUES LESS THAN MAXVALUE);
|
||||
let $my_val= 2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
let $my_val= -2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
let $my_val= 0;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
# let $my_val= NULL;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES(NULL,NULL,NULL,NULL,NULL);
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# The NDB handler only supports 32 bit integers in VALUES
|
||||
# therefor we have to skip the next test for NDB.
|
||||
if (`SELECT @@session.storage_engine NOT IN('ndbcluster')`)
|
||||
{
|
||||
--echo # 3. LIST(<check value>)
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY LIST(CAST(f_char1 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER))
|
||||
(PARTITION p0 VALUES IN (0),
|
||||
PARTITION p1 VALUES IN (NULL),
|
||||
PARTITION p2 VALUES IN (CAST( 2147483646 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)),
|
||||
PARTITION p3 VALUES IN (CAST(-2147483646 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)));
|
||||
let $my_val= 2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
let $my_val= -2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
let $my_val= 0;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 = '$my_val';
|
||||
# let $my_val= NULL;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES(NULL,NULL,NULL,NULL,NULL);
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char1 IS NULL;
|
||||
DROP TABLE t1;
|
||||
}
|
||||
#
|
||||
--echo # 4. Partition by RANGE(...) subpartition by HASH(<check value>)
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY RANGE(CAST(f_char1 AS SIGNED INTEGER))
|
||||
SUBPARTITION BY HASH(CAST(f_char2 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) SUBPARTITIONS 4
|
||||
(PARTITION p0 VALUES LESS THAN (0),
|
||||
PARTITION p1 VALUES LESS THAN MAXVALUE);
|
||||
let $my_val= 2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'1','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val';
|
||||
let $my_val= -2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'-1','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val';
|
||||
let $my_val= 0;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'$my_val','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val';
|
||||
# let $my_val= NULL;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES(NULL,NULL,NULL,NULL,NULL);
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 IS NULL;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
--echo # 5. Partition by LIST(...) subpartition by HASH(<check value>)
|
||||
eval CREATE TABLE t1 (
|
||||
$column_list
|
||||
)
|
||||
PARTITION BY LIST(CAST(f_char1 AS SIGNED INTEGER))
|
||||
SUBPARTITION BY HASH(CAST(f_char2 AS SIGNED INTEGER) * CAST(5.0E+18 AS SIGNED INTEGER)) SUBPARTITIONS 4
|
||||
(PARTITION p0 VALUES IN (NULL),
|
||||
PARTITION p1 VALUES IN (1));
|
||||
let $my_val= 2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'1','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val';
|
||||
let $my_val= -2147483646;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'1','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val';
|
||||
let $my_val= 0;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES($my_val,$my_val,'1','$my_val','#$my_val#');
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 = '$my_val';
|
||||
# let $my_val= NULL;
|
||||
eval INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
VALUES(NULL,NULL,NULL,NULL,NULL);
|
||||
eval SELECT COUNT(*) = 1 FROM t1 WHERE f_char2 IS NULL;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
|
||||
--enable_parsing
|
||||
@@ -0,0 +1,86 @@
|
||||
--echo ---- Partitioning and varbinary data type
|
||||
|
||||
eval create table t1 (a varbinary(767) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (repeat('a',767)), ('b'), (repeat('a',500)), (repeat('b',64));
|
||||
select * from t1;
|
||||
select * from t1 where a='b';
|
||||
update t1 set a='bb' where a='b';
|
||||
delete from t1 where a='bb';
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a varbinary(767) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 30;
|
||||
show create table t2;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (repeat(char(ascii('a')+$letter),$count*$count));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
|
||||
if (0)
|
||||
{
|
||||
eval create table t3 (a varbinary(767) not null, primary key(a)) engine=$engine
|
||||
partition by range (ascii(a)) subpartition by key (a) subpartitions 4 (
|
||||
partition pa16 values less than (16),
|
||||
partition pa32 values less than (32),
|
||||
partition pa64 values less than (64),
|
||||
partition pa128 values less than (128),
|
||||
partition pa256 values less than (256)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select hex(a) from t3;
|
||||
drop table t3;
|
||||
|
||||
eval create table t4 (a varbinary(767) not null, primary key(a)) engine=$engine
|
||||
partition by list (ascii(a)) subpartition by key (a) subpartitions 4 (
|
||||
partition pa16 values in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),
|
||||
partition pa32 values in (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32),
|
||||
partition pa64 values in (33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64),
|
||||
partition pa128 values in (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128),
|
||||
partition pa256 values in (129,130,131,132,133,134,135,136,137,138,139,140
|
||||
,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t4;
|
||||
select hex(a) from t4;
|
||||
drop table t4;
|
||||
}
|
||||
#if (0)
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
--echo ---- Partitioning and varchar data type
|
||||
|
||||
eval create table t1 (a varchar(767) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values (repeat('a',767)), ('b'), (repeat('a',500)), (repeat('b',64));
|
||||
select * from t1;
|
||||
select * from t1 where a='b';
|
||||
update t1 set a='bb' where a='b';
|
||||
delete from t1 where a='bb';
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a varchar(767) not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 27;
|
||||
show create table t2;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (repeat(char(ascii('a')+$letter),$count*$count));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
if (0)
|
||||
{
|
||||
eval create table t3 (a varchar(767) not null, primary key(a)) engine=$engine
|
||||
partition by range (ascii(a)) subpartition by key (a) subpartitions 4 (
|
||||
partition pa16 values less than (16),
|
||||
partition pa32 values less than (32),
|
||||
partition pa64 values less than (64),
|
||||
partition pa128 values less than (128),
|
||||
partition pa256 values less than (256)
|
||||
);
|
||||
show create table t3;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t3 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t3;
|
||||
select * from t3;
|
||||
drop table t3;
|
||||
|
||||
eval create table t4 (a varchar(767) not null, primary key(a)) engine=$engine
|
||||
partition by list (ascii(a)) subpartition by key (a) subpartitions 4 (
|
||||
partition pa16 values in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),
|
||||
partition pa32 values in (17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32),
|
||||
partition pa64 values in (33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64),
|
||||
partition pa128 values in (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128),
|
||||
partition pa256 values in (129,130,131,132,133,134,135,136,137,138,139,140
|
||||
,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256)
|
||||
);
|
||||
show create table t4;
|
||||
let $count=26;
|
||||
let $letter=0;
|
||||
--echo $count inserts;
|
||||
#--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t4 values (repeat(char(ascii('a')+$letter),$count+54));
|
||||
dec $count;
|
||||
inc $letter;
|
||||
}
|
||||
select count(*) from t4;
|
||||
select * from t4;
|
||||
drop table t4;
|
||||
}
|
||||
#if (0)
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
eval create table t1 (a year not null, primary key(a)) engine=$engine
|
||||
partition by key (a) (
|
||||
partition pa1 max_rows=20 min_rows=2,
|
||||
partition pa2 max_rows=30 min_rows=3,
|
||||
partition pa3 max_rows=30 min_rows=4,
|
||||
partition pa4 max_rows=40 min_rows=2);
|
||||
show create table t1;
|
||||
insert into t1 values ('1975'), (2020), ('1980'), ('2000');
|
||||
select * from t1;
|
||||
select * from t1 where a=1980;
|
||||
delete from t1 where a=1980;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
eval create table t2 (a year not null, primary key(a)) engine=$engine
|
||||
partition by key (a) partitions 12;
|
||||
show create table t2;
|
||||
insert into t2 values ('1975'), ('2020'), ('1980'), ('2000');
|
||||
select * from t2;
|
||||
select * from t2 where a='1980';
|
||||
delete from t2 where a='1980';
|
||||
select * from t2;
|
||||
delete from t2;
|
||||
let $count=255;
|
||||
--echo $count inserts;
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
eval insert into t2 values (1901+$count);
|
||||
dec $count;
|
||||
}
|
||||
--enable_query_log
|
||||
select count(*) from t2;
|
||||
select * from t2;
|
||||
drop table t2;
|
||||
|
||||
@@ -0,0 +1,512 @@
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
DROP TABLE IF EXISTS test.t2;
|
||||
DROP TABLE IF EXISTS test.t3;
|
||||
DROP TABLE IF EXISTS test.t4;
|
||||
DROP TABLE IF EXISTS test.t5;
|
||||
DROP TABLE IF EXISTS test.t6;
|
||||
**** Test 1 Simple DD backup and restore ****
|
||||
CREATE LOGFILE GROUP log_group1
|
||||
ADD UNDOFILE './log_group1/undofile.dat'
|
||||
INITIAL_SIZE 16M
|
||||
UNDO_BUFFER_SIZE = 1M
|
||||
ENGINE=NDB;
|
||||
CREATE TABLESPACE table_space1
|
||||
ADD DATAFILE './table_space1/datafile.dat'
|
||||
USE LOGFILE GROUP log_group1
|
||||
INITIAL_SIZE 12M
|
||||
ENGINE NDB;
|
||||
CREATE TABLE test.t1
|
||||
(pk1 MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, c2 CHAR(50) NOT NULL, c3 INT NOT NULL, c4 BIT NOT NULL) TABLESPACE table_space1 STORAGE DISK ENGINE=NDB;
|
||||
SELECT COUNT(*) FROM test.t1;
|
||||
COUNT(*)
|
||||
500
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t1 ORDER BY pk1 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
1 Sweden 500 1
|
||||
2 Sweden 499 1
|
||||
3 Sweden 498 1
|
||||
4 Sweden 497 1
|
||||
5 Sweden 496 1
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
DROP TABLE test.backup_info;
|
||||
DROP TABLE test.t1;
|
||||
ALTER TABLESPACE table_space1
|
||||
DROP DATAFILE './table_space1/datafile.dat'
|
||||
ENGINE = NDB;
|
||||
DROP TABLESPACE table_space1
|
||||
ENGINE = NDB;
|
||||
DROP LOGFILE GROUP log_group1
|
||||
ENGINE =NDB;
|
||||
SELECT COUNT(*) FROM test.t1;
|
||||
COUNT(*)
|
||||
500
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t1 ORDER BY pk1 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
1 Sweden 500 1
|
||||
2 Sweden 499 1
|
||||
3 Sweden 498 1
|
||||
4 Sweden 497 1
|
||||
5 Sweden 496 1
|
||||
**** Test 2 Mixed Cluster Test backup and restore ****
|
||||
CREATE TABLE test.t2
|
||||
(pk1 MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, c2 VARCHAR(200) NOT NULL, c3 INT NOT NULL, c4 BIT NOT NULL)ENGINE=NDB;
|
||||
CREATE TABLE test.t3 (c1 int not null auto_increment, data LONGBLOB, PRIMARY KEY(c1))TABLESPACE table_space1 STORAGE DISK ENGINE=NDB;
|
||||
CREATE TABLE test.t4 (c1 int not null auto_increment, data LONGBLOB, PRIMARY KEY(c1))ENGINE=NDB;
|
||||
SELECT COUNT(*) FROM test.t1;
|
||||
COUNT(*)
|
||||
500
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t1 ORDER BY pk1 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
1 Sweden 500 1
|
||||
2 Sweden 499 1
|
||||
3 Sweden 498 1
|
||||
4 Sweden 497 1
|
||||
5 Sweden 496 1
|
||||
SELECT COUNT(*) FROM test.t2;
|
||||
COUNT(*)
|
||||
500
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t2 ORDER BY pk1 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
1 Sweden, Texas 500 0
|
||||
2 Sweden, Texas 499 0
|
||||
3 Sweden, Texas 498 0
|
||||
4 Sweden, Texas 497 0
|
||||
5 Sweden, Texas 496 0
|
||||
SELECT COUNT(*) FROM test.t3;
|
||||
COUNT(*)
|
||||
100
|
||||
SELECT LENGTH(data) FROM test.t3 WHERE c1 = 1;
|
||||
LENGTH(data)
|
||||
1024
|
||||
SELECT LENGTH(data) FROM test.t3 WHERE c1 = 2;
|
||||
LENGTH(data)
|
||||
16384
|
||||
SELECT COUNT(*) FROM test.t4;
|
||||
COUNT(*)
|
||||
100
|
||||
SELECT LENGTH(data) FROM test.t4 WHERE c1 = 1;
|
||||
LENGTH(data)
|
||||
1024
|
||||
SELECT LENGTH(data) FROM test.t4 WHERE c1 = 2;
|
||||
LENGTH(data)
|
||||
16384
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
DROP TABLE test.backup_info;
|
||||
DROP TABLE test.t1;
|
||||
DROP TABLE test.t2;
|
||||
DROP TABLE test.t3;
|
||||
DROP TABLE test.t4;
|
||||
ALTER TABLESPACE table_space1
|
||||
DROP DATAFILE './table_space1/datafile.dat'
|
||||
ENGINE = NDB;
|
||||
DROP TABLESPACE table_space1
|
||||
ENGINE = NDB;
|
||||
DROP LOGFILE GROUP log_group1
|
||||
ENGINE =NDB;
|
||||
SELECT COUNT(*) FROM test.t1;
|
||||
COUNT(*)
|
||||
500
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t1 ORDER BY pk1 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
1 Sweden 500 1
|
||||
2 Sweden 499 1
|
||||
3 Sweden 498 1
|
||||
4 Sweden 497 1
|
||||
5 Sweden 496 1
|
||||
SELECT COUNT(*) FROM test.t2;
|
||||
COUNT(*)
|
||||
500
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t2 ORDER BY pk1 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
1 Sweden, Texas 500 0
|
||||
2 Sweden, Texas 499 0
|
||||
3 Sweden, Texas 498 0
|
||||
4 Sweden, Texas 497 0
|
||||
5 Sweden, Texas 496 0
|
||||
SELECT COUNT(*) FROM test.t3;
|
||||
COUNT(*)
|
||||
100
|
||||
SELECT LENGTH(data) FROM test.t3 WHERE c1 = 1;
|
||||
LENGTH(data)
|
||||
1024
|
||||
SELECT LENGTH(data) FROM test.t3 WHERE c1 = 2;
|
||||
LENGTH(data)
|
||||
16384
|
||||
SELECT COUNT(*) FROM test.t4;
|
||||
COUNT(*)
|
||||
100
|
||||
SELECT LENGTH(data) FROM test.t4 WHERE c1 = 1;
|
||||
LENGTH(data)
|
||||
1024
|
||||
SELECT LENGTH(data) FROM test.t4 WHERE c1 = 2;
|
||||
LENGTH(data)
|
||||
16384
|
||||
DROP TABLE test.t1;
|
||||
DROP TABLE test.t2;
|
||||
DROP TABLE test.t3;
|
||||
DROP TABLE test.t4;
|
||||
**** Test 3 Adding partition Test backup and restore ****
|
||||
CREATE TABLESPACE table_space2
|
||||
ADD DATAFILE './table_space2/datafile.dat'
|
||||
USE LOGFILE GROUP log_group1
|
||||
INITIAL_SIZE 12M
|
||||
ENGINE NDB;
|
||||
CREATE TABLE test.t1 (pk1 MEDIUMINT NOT NULL AUTO_INCREMENT, c2 VARCHAR(150) NOT NULL, c3 INT NOT NULL, c4 BIT NOT NULL, PRIMARY KEY(pk1,c3))TABLESPACE table_space1 STORAGE DISK ENGINE=NDB PARTITION BY HASH(c3) PARTITIONS 4;
|
||||
CREATE TABLE test.t4 (pk1 MEDIUMINT NOT NULL AUTO_INCREMENT, c2 VARCHAR(180) NOT NULL, c3 INT NOT NULL, c4 BIT NOT NULL, PRIMARY KEY(pk1,c3))ENGINE=NDB PARTITION BY HASH(c3) PARTITIONS 2;
|
||||
CREATE TABLE test.t2 (pk1 MEDIUMINT NOT NULL AUTO_INCREMENT, c2 TEXT NOT NULL, c3 INT NOT NULL, c4 BIT NOT NULL, PRIMARY KEY(pk1,c3))TABLESPACE table_space2 STORAGE DISK ENGINE=NDB PARTITION BY KEY(c3) (PARTITION p0 ENGINE = NDB, PARTITION p1 ENGINE = NDB);
|
||||
CREATE TABLE test.t5 (pk1 MEDIUMINT NOT NULL AUTO_INCREMENT, c2 TEXT NOT NULL, c3 INT NOT NULL, c4 BIT NOT NULL, PRIMARY KEY(pk1,c3))ENGINE=NDB PARTITION BY KEY(pk1) (PARTITION p0 ENGINE = NDB, PARTITION p1 ENGINE = NDB);
|
||||
CREATE TABLE test.t3 (pk1 MEDIUMINT NOT NULL AUTO_INCREMENT, c2 VARCHAR(202) NOT NULL, c3 INT NOT NULL, c4 BIT NOT NULL, PRIMARY KEY(pk1,c3))TABLESPACE table_space2 STORAGE DISK ENGINE=NDB PARTITION BY RANGE (c3) PARTITIONS 3 (PARTITION x1 VALUES LESS THAN (105), PARTITION x2 VALUES LESS THAN (333), PARTITION x3 VALUES LESS THAN (720));
|
||||
CREATE TABLE test.t6 (pk1 MEDIUMINT NOT NULL AUTO_INCREMENT, c2 VARCHAR(220) NOT NULL, c3 INT NOT NULL, c4 BIT NOT NULL, PRIMARY KEY(pk1,c3))ENGINE=NDB PARTITION BY RANGE (pk1) PARTITIONS 2 (PARTITION x1 VALUES LESS THAN (333), PARTITION x2 VALUES LESS THAN (720));
|
||||
SHOW CREATE TABLE test.t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(150) NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) /*!50100 TABLESPACE table_space1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c3)
|
||||
PARTITIONS 4 */
|
||||
SHOW CREATE TABLE test.t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` text NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) /*!50100 TABLESPACE table_space2 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (c3)
|
||||
(PARTITION p0 ENGINE = ndbcluster,
|
||||
PARTITION p1 ENGINE = ndbcluster) */
|
||||
SHOW CREATE TABLE test.t3;
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(202) NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) /*!50100 TABLESPACE table_space2 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (c3)
|
||||
(PARTITION x1 VALUES LESS THAN (105) ENGINE = ndbcluster,
|
||||
PARTITION x2 VALUES LESS THAN (333) ENGINE = ndbcluster,
|
||||
PARTITION x3 VALUES LESS THAN (720) ENGINE = ndbcluster) */
|
||||
SHOW CREATE TABLE test.t4;
|
||||
Table Create Table
|
||||
t4 CREATE TABLE `t4` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(180) NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c3)
|
||||
PARTITIONS 2 */
|
||||
SHOW CREATE TABLE test.t5;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` text NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (pk1)
|
||||
(PARTITION p0 ENGINE = ndbcluster,
|
||||
PARTITION p1 ENGINE = ndbcluster) */
|
||||
SHOW CREATE TABLE test.t6;
|
||||
Table Create Table
|
||||
t6 CREATE TABLE `t6` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(220) NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (pk1)
|
||||
(PARTITION x1 VALUES LESS THAN (333) ENGINE = ndbcluster,
|
||||
PARTITION x2 VALUES LESS THAN (720) ENGINE = ndbcluster) */
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p2 NULL 3 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p3 NULL 4 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't2';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t2 p0 NULL 1 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t2 p1 NULL 2 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't3';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t3 x1 NULL 1 NULL RANGE NULL c3 NULL 105 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t3 x2 NULL 2 NULL RANGE NULL c3 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t3 x3 NULL 3 NULL RANGE NULL c3 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't4';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t4 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t4 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't5';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t5 p0 NULL 1 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t5 p1 NULL 2 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't6';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t6 x1 NULL 1 NULL RANGE NULL pk1 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t6 x2 NULL 2 NULL RANGE NULL pk1 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT COUNT(*) FROM test.t1;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t1 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 Sweden, Texas 2 0
|
||||
249 Sweden, Texas 4 0
|
||||
248 Sweden, Texas 6 0
|
||||
247 Sweden, Texas 8 0
|
||||
246 Sweden, Texas 10 0
|
||||
SELECT COUNT(*) FROM test.t2;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t2 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 1 1
|
||||
249 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 3 1
|
||||
248 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 5 1
|
||||
247 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 7 1
|
||||
246 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 9 1
|
||||
SELECT COUNT(*) FROM test.t3;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t3 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 0 1
|
||||
249 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 2 1
|
||||
248 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 4 1
|
||||
247 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 6 1
|
||||
246 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 8 1
|
||||
SELECT COUNT(*) FROM test.t4;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t4 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 Sweden, Texas 2 0
|
||||
249 Sweden, Texas 4 0
|
||||
248 Sweden, Texas 6 0
|
||||
247 Sweden, Texas 8 0
|
||||
246 Sweden, Texas 10 0
|
||||
SELECT COUNT(*) FROM test.t5;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t5 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 1 1
|
||||
249 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 3 1
|
||||
248 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 5 1
|
||||
247 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 7 1
|
||||
246 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 9 1
|
||||
SELECT COUNT(*) FROM test.t6;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t6 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 0 1
|
||||
249 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 2 1
|
||||
248 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 4 1
|
||||
247 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 6 1
|
||||
246 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 8 1
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
|
||||
(id INT, backup_id INT) ENGINE = MEMORY;
|
||||
LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
|
||||
DROP TABLE test.backup_info;
|
||||
DROP TABLE test.t1;
|
||||
DROP TABLE test.t2;
|
||||
DROP TABLE test.t3;
|
||||
DROP TABLE test.t4;
|
||||
DROP TABLE test.t5;
|
||||
DROP TABLE test.t6;
|
||||
ALTER TABLESPACE table_space1
|
||||
DROP DATAFILE './table_space1/datafile.dat'
|
||||
ENGINE = NDB;
|
||||
ALTER TABLESPACE table_space2
|
||||
DROP DATAFILE './table_space2/datafile.dat'
|
||||
ENGINE = NDB;
|
||||
DROP TABLESPACE table_space1
|
||||
ENGINE = NDB;
|
||||
DROP TABLESPACE table_space2
|
||||
ENGINE = NDB;
|
||||
DROP LOGFILE GROUP log_group1
|
||||
ENGINE =NDB;
|
||||
SHOW CREATE TABLE test.t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(150) NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) /*!50100 TABLESPACE table_space1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c3)
|
||||
PARTITIONS 4 */
|
||||
SHOW CREATE TABLE test.t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` text NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) /*!50100 TABLESPACE table_space2 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (c3)
|
||||
(PARTITION p0 ENGINE = ndbcluster,
|
||||
PARTITION p1 ENGINE = ndbcluster) */
|
||||
SHOW CREATE TABLE test.t3;
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(202) NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) /*!50100 TABLESPACE table_space2 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (c3)
|
||||
(PARTITION x1 VALUES LESS THAN (105) ENGINE = ndbcluster,
|
||||
PARTITION x2 VALUES LESS THAN (333) ENGINE = ndbcluster,
|
||||
PARTITION x3 VALUES LESS THAN (720) ENGINE = ndbcluster) */
|
||||
SHOW CREATE TABLE test.t4;
|
||||
Table Create Table
|
||||
t4 CREATE TABLE `t4` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(180) NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c3)
|
||||
PARTITIONS 2 */
|
||||
SHOW CREATE TABLE test.t5;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` text NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (pk1)
|
||||
(PARTITION p0 ENGINE = ndbcluster,
|
||||
PARTITION p1 ENGINE = ndbcluster) */
|
||||
SHOW CREATE TABLE test.t6;
|
||||
Table Create Table
|
||||
t6 CREATE TABLE `t6` (
|
||||
`pk1` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(220) NOT NULL,
|
||||
`c3` int(11) NOT NULL,
|
||||
`c4` bit(1) NOT NULL,
|
||||
PRIMARY KEY (`pk1`,`c3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY RANGE (pk1)
|
||||
(PARTITION x1 VALUES LESS THAN (333) ENGINE = ndbcluster,
|
||||
PARTITION x2 VALUES LESS THAN (720) ENGINE = ndbcluster) */
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p2 NULL 3 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
NULL test t1 p3 NULL 4 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space1
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't2';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t2 p0 NULL 1 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t2 p1 NULL 2 NULL KEY NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't3';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t3 x1 NULL 1 NULL RANGE NULL c3 NULL 105 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t3 x2 NULL 2 NULL RANGE NULL c3 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
NULL test t3 x3 NULL 3 NULL RANGE NULL c3 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default table_space2
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't4';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t4 p0 NULL 1 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t4 p1 NULL 2 NULL HASH NULL c3 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't5';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t5 p0 NULL 1 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t5 p1 NULL 2 NULL KEY NULL pk1 NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't6';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t6 x1 NULL 1 NULL RANGE NULL pk1 NULL 333 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
NULL test t6 x2 NULL 2 NULL RANGE NULL pk1 NULL 720 0 0 0 NULL 0 0 NULL NULL NULL NULL default NULL
|
||||
SELECT COUNT(*) FROM test.t1;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t1 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 Sweden, Texas 2 0
|
||||
249 Sweden, Texas 4 0
|
||||
248 Sweden, Texas 6 0
|
||||
247 Sweden, Texas 8 0
|
||||
246 Sweden, Texas 10 0
|
||||
SELECT COUNT(*) FROM test.t2;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t2 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 1 1
|
||||
249 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 3 1
|
||||
248 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 5 1
|
||||
247 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 7 1
|
||||
246 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 9 1
|
||||
SELECT COUNT(*) FROM test.t3;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t3 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 0 1
|
||||
249 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 2 1
|
||||
248 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 4 1
|
||||
247 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 6 1
|
||||
246 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 8 1
|
||||
SELECT COUNT(*) FROM test.t4;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t4 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 Sweden, Texas 2 0
|
||||
249 Sweden, Texas 4 0
|
||||
248 Sweden, Texas 6 0
|
||||
247 Sweden, Texas 8 0
|
||||
246 Sweden, Texas 10 0
|
||||
SELECT COUNT(*) FROM test.t5;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t5 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 1 1
|
||||
249 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 3 1
|
||||
248 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 5 1
|
||||
247 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 7 1
|
||||
246 Sweden, Texas, ITALY, Kyle, JO, JBM,TU 9 1
|
||||
SELECT COUNT(*) FROM test.t6;
|
||||
COUNT(*)
|
||||
250
|
||||
SELECT pk1, c2, c3, hex(c4) FROM test.t6 ORDER BY c3 LIMIT 5;
|
||||
pk1 c2 c3 hex(c4)
|
||||
250 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 0 1
|
||||
249 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 2 1
|
||||
248 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 4 1
|
||||
247 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 6 1
|
||||
246 TEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXASTEXAS, ITALY, Kyle, JO, JBM,TU 8 1
|
||||
DROP TABLE test.t1;
|
||||
DROP TABLE test.t2;
|
||||
DROP TABLE test.t3;
|
||||
DROP TABLE test.t4;
|
||||
DROP TABLE test.t5;
|
||||
DROP TABLE test.t6;
|
||||
ALTER TABLESPACE table_space1 DROP DATAFILE './table_space1/datafile.dat' ENGINE=NDB;
|
||||
ALTER TABLESPACE table_space2 DROP DATAFILE './table_space2/datafile.dat' ENGINE=NDB;
|
||||
DROP TABLESPACE table_space1 ENGINE = NDB;
|
||||
DROP TABLESPACE table_space2 ENGINE = NDB;
|
||||
DROP LOGFILE GROUP log_group1 ENGINE = NDB;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
27726
build/lib/mysql/mysql-test/suite/parts/r/partition_alter1_1_2_ndb.result
Normal file
27726
build/lib/mysql/mysql-test/suite/parts/r/partition_alter1_1_2_ndb.result
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
24316
build/lib/mysql/mysql-test/suite/parts/r/partition_alter1_1_ndb.result
Normal file
24316
build/lib/mysql/mysql-test/suite/parts/r/partition_alter1_1_ndb.result
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
35540
build/lib/mysql/mysql-test/suite/parts/r/partition_alter1_2_ndb.result
Normal file
35540
build/lib/mysql/mysql-test/suite/parts/r/partition_alter1_2_ndb.result
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,714 @@
|
||||
SET @max_row = 20;
|
||||
SET @@session.storage_engine = 'InnoDB';
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
|
||||
# needed in many testcases
|
||||
#------------------------------------------------------------------------
|
||||
SELECT @max_row DIV 2 INTO @max_row_div2;
|
||||
SELECT @max_row DIV 3 INTO @max_row_div3;
|
||||
SELECT @max_row DIV 4 INTO @max_row_div4;
|
||||
SET @max_int_4 = 2147483647;
|
||||
DROP TABLE IF EXISTS t0_template;
|
||||
CREATE TABLE t0_template (
|
||||
f_int1 INTEGER,
|
||||
f_int2 INTEGER,
|
||||
f_char1 CHAR(20),
|
||||
f_char2 CHAR(20),
|
||||
f_charbig VARCHAR(1000) ,
|
||||
PRIMARY KEY(f_int1))
|
||||
ENGINE = MEMORY;
|
||||
# Logging of <max_row> INSERTs into t0_template suppressed
|
||||
DROP TABLE IF EXISTS t0_definition;
|
||||
CREATE TABLE t0_definition (
|
||||
state CHAR(3),
|
||||
create_command VARBINARY(5000),
|
||||
file_list VARBINARY(10000),
|
||||
PRIMARY KEY (state)
|
||||
) ENGINE = MEMORY;
|
||||
DROP TABLE IF EXISTS t0_aux;
|
||||
CREATE TABLE t0_aux ( f_int1 INTEGER,
|
||||
f_int2 INTEGER,
|
||||
f_char1 CHAR(20),
|
||||
f_char2 CHAR(20),
|
||||
f_charbig VARCHAR(1000) )
|
||||
ENGINE = MEMORY;
|
||||
SET AUTOCOMMIT= 1;
|
||||
SET @@session.sql_mode= '';
|
||||
# End of basic preparations needed for all tests
|
||||
#-----------------------------------------------
|
||||
|
||||
#========================================================================
|
||||
# 1. Partition management commands on HASH partitioned table
|
||||
# column in partitioning function is of type DATE
|
||||
#========================================================================
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (f_date DATE, f_varchar VARCHAR(30));
|
||||
INSERT INTO t1 (f_date, f_varchar)
|
||||
SELECT CONCAT(CAST((f_int1 + 999) AS CHAR),'-02-10'), CAST(f_char1 AS CHAR)
|
||||
FROM t0_template
|
||||
WHERE f_int1 + 999 BETWEEN 1000 AND 9999;
|
||||
SELECT IF(9999 - 1000 + 1 > @max_row, @max_row , 9999 - 1000 + 1)
|
||||
INTO @exp_row_count;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
t1.frm
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
#------------------------------------------------------------------------
|
||||
# 1.1 Increase number of PARTITIONS
|
||||
#------------------------------------------------------------------------
|
||||
# 1.1.1 ADD PARTITION to not partitioned table --> must fail
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
ERROR HY000: Partition management on a not partitioned table is not possible
|
||||
# 1.1.2 Assign HASH partitioning
|
||||
ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date)) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.1.3 Assign other HASH partitioning to already partitioned table
|
||||
# + test and switch back + test
|
||||
ALTER TABLE t1 PARTITION BY HASH(DAYOFYEAR(f_date));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (DAYOFYEAR(f_date)) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date)) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.1.4 Add PARTITIONS not fitting to HASH --> must fail
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1 VALUES IN (0));
|
||||
ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0));
|
||||
ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition
|
||||
# 1.1.5 Add two named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.1.6 Add two named partitions, name clash --> must fail
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
ERROR HY000: Duplicate partition name part1
|
||||
# 1.1.7 Add one named partition + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.1.8 Add four not named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB,
|
||||
PARTITION p4 ENGINE = InnoDB,
|
||||
PARTITION p5 ENGINE = InnoDB,
|
||||
PARTITION p6 ENGINE = InnoDB,
|
||||
PARTITION p7 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
#------------------------------------------------------------------------
|
||||
# 1.2 Decrease number of PARTITIONS
|
||||
#------------------------------------------------------------------------
|
||||
# 1.2.1 DROP PARTITION is not supported for HASH --> must fail
|
||||
ALTER TABLE t1 DROP PARTITION part1;
|
||||
ERROR HY000: DROP PARTITION can only be used on RANGE/LIST partitions
|
||||
# 1.2.2 COALESCE PARTITION partitionname is not supported
|
||||
ALTER TABLE t1 COALESCE PARTITION part1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'part1' at line 1
|
||||
# 1.2.3 Decrease by 0 is non sense --> must fail
|
||||
ALTER TABLE t1 COALESCE PARTITION 0;
|
||||
ERROR HY000: At least one partition must be coalesced
|
||||
# 1.2.4 COALESCE one partition + test loop
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB,
|
||||
PARTITION p4 ENGINE = InnoDB,
|
||||
PARTITION p5 ENGINE = InnoDB,
|
||||
PARTITION p6 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB,
|
||||
PARTITION p4 ENGINE = InnoDB,
|
||||
PARTITION p5 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB,
|
||||
PARTITION p4 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.2.5 COALESCE of last partition --> must fail
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
ERROR HY000: Cannot remove all partitions, use DROP TABLE instead
|
||||
# 1.2.6 Remove partitioning
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
t1.frm
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.2.7 Remove partitioning from not partitioned table --> ????
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
DROP TABLE t1;
|
||||
# Attention: There are unused files.
|
||||
# Either the DROP TABLE or a preceding ALTER TABLE
|
||||
# <alter partitioning> worked incomplete.
|
||||
# We found:
|
||||
unified filelist
|
||||
--- not determined ---
|
||||
|
||||
#========================================================================
|
||||
# 2. Partition management commands on KEY partitioned table
|
||||
#========================================================================
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (
|
||||
f_int1 INTEGER,
|
||||
f_int2 INTEGER,
|
||||
f_char1 CHAR(20),
|
||||
f_char2 CHAR(20),
|
||||
f_charbig VARCHAR(1000)
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
t1.frm
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
#------------------------------------------------------------------------
|
||||
# 2.1 Increase number of PARTITIONS
|
||||
# Some negative testcases are omitted (already checked with HASH).
|
||||
#------------------------------------------------------------------------
|
||||
# 2.1.1 Assign KEY partitioning
|
||||
ALTER TABLE t1 PARTITION BY KEY(f_int1);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.1.2 Add PARTITIONS not fitting to KEY --> must fail
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1 VALUES IN (0));
|
||||
ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0));
|
||||
ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition
|
||||
# 2.1.3 Add two named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.1.4 Add one named partition + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.1.5 Add four not named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB,
|
||||
PARTITION p4 ENGINE = InnoDB,
|
||||
PARTITION p5 ENGINE = InnoDB,
|
||||
PARTITION p6 ENGINE = InnoDB,
|
||||
PARTITION p7 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
#------------------------------------------------------------------------
|
||||
# 2.2 Decrease number of PARTITIONS
|
||||
# Some negative testcases are omitted (already checked with HASH).
|
||||
#------------------------------------------------------------------------
|
||||
# 2.2.1 DROP PARTITION is not supported for KEY --> must fail
|
||||
ALTER TABLE t1 DROP PARTITION part1;
|
||||
ERROR HY000: DROP PARTITION can only be used on RANGE/LIST partitions
|
||||
# 2.2.4 COALESCE one partition + test loop
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB,
|
||||
PARTITION p4 ENGINE = InnoDB,
|
||||
PARTITION p5 ENGINE = InnoDB,
|
||||
PARTITION p6 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB,
|
||||
PARTITION p4 ENGINE = InnoDB,
|
||||
PARTITION p5 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB,
|
||||
PARTITION p4 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB,
|
||||
PARTITION part2 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB,
|
||||
PARTITION part7 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB,
|
||||
PARTITION part1 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = InnoDB) */
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.2.5 COALESCE of last partition --> must fail
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
ERROR HY000: Cannot remove all partitions, use DROP TABLE instead
|
||||
# 2.2.6 Remove partitioning
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
t1.frm
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.2.7 Remove partitioning from not partitioned table --> ????
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
DROP TABLE t1;
|
||||
# Attention: There are unused files.
|
||||
# Either the DROP TABLE or a preceding ALTER TABLE
|
||||
# <alter partitioning> worked incomplete.
|
||||
# We found:
|
||||
unified filelist
|
||||
--- not determined ---
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t0_aux;
|
||||
DROP TABLE IF EXISTS t0_definition;
|
||||
DROP TABLE IF EXISTS t0_template;
|
||||
@@ -0,0 +1,890 @@
|
||||
SET @max_row = 20;
|
||||
SET @@session.storage_engine = 'MyISAM';
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
# 0. Setting of auxiliary variables + Creation of an auxiliary tables
|
||||
# needed in many testcases
|
||||
#------------------------------------------------------------------------
|
||||
SELECT @max_row DIV 2 INTO @max_row_div2;
|
||||
SELECT @max_row DIV 3 INTO @max_row_div3;
|
||||
SELECT @max_row DIV 4 INTO @max_row_div4;
|
||||
SET @max_int_4 = 2147483647;
|
||||
DROP TABLE IF EXISTS t0_template;
|
||||
CREATE TABLE t0_template (
|
||||
f_int1 INTEGER,
|
||||
f_int2 INTEGER,
|
||||
f_char1 CHAR(20),
|
||||
f_char2 CHAR(20),
|
||||
f_charbig VARCHAR(1000) ,
|
||||
PRIMARY KEY(f_int1))
|
||||
ENGINE = MEMORY;
|
||||
# Logging of <max_row> INSERTs into t0_template suppressed
|
||||
DROP TABLE IF EXISTS t0_definition;
|
||||
CREATE TABLE t0_definition (
|
||||
state CHAR(3),
|
||||
create_command VARBINARY(5000),
|
||||
file_list VARBINARY(10000),
|
||||
PRIMARY KEY (state)
|
||||
) ENGINE = MEMORY;
|
||||
DROP TABLE IF EXISTS t0_aux;
|
||||
CREATE TABLE t0_aux ( f_int1 INTEGER,
|
||||
f_int2 INTEGER,
|
||||
f_char1 CHAR(20),
|
||||
f_char2 CHAR(20),
|
||||
f_charbig VARCHAR(1000) )
|
||||
ENGINE = MEMORY;
|
||||
SET AUTOCOMMIT= 1;
|
||||
SET @@session.sql_mode= '';
|
||||
# End of basic preparations needed for all tests
|
||||
#-----------------------------------------------
|
||||
|
||||
#========================================================================
|
||||
# 1. Partition management commands on HASH partitioned table
|
||||
# column in partitioning function is of type DATE
|
||||
#========================================================================
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (f_date DATE, f_varchar VARCHAR(30));
|
||||
INSERT INTO t1 (f_date, f_varchar)
|
||||
SELECT CONCAT(CAST((f_int1 + 999) AS CHAR),'-02-10'), CAST(f_char1 AS CHAR)
|
||||
FROM t0_template
|
||||
WHERE f_int1 + 999 BETWEEN 1000 AND 9999;
|
||||
SELECT IF(9999 - 1000 + 1 > @max_row, @max_row , 9999 - 1000 + 1)
|
||||
INTO @exp_row_count;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
t1.MYD
|
||||
t1.MYI
|
||||
t1.frm
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
#------------------------------------------------------------------------
|
||||
# 1.1 Increase number of PARTITIONS
|
||||
#------------------------------------------------------------------------
|
||||
# 1.1.1 ADD PARTITION to not partitioned table --> must fail
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
ERROR HY000: Partition management on a not partitioned table is not possible
|
||||
# 1.1.2 Assign HASH partitioning
|
||||
ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date)) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.1.3 Assign other HASH partitioning to already partitioned table
|
||||
# + test and switch back + test
|
||||
ALTER TABLE t1 PARTITION BY HASH(DAYOFYEAR(f_date));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (DAYOFYEAR(f_date)) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 PARTITION BY HASH(YEAR(f_date));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date)) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.1.4 Add PARTITIONS not fitting to HASH --> must fail
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1 VALUES IN (0));
|
||||
ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0));
|
||||
ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition
|
||||
# 1.1.5 Add two named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.1.6 Add two named partitions, name clash --> must fail
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
ERROR HY000: Duplicate partition name part1
|
||||
# 1.1.7 Add one named partition + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.1.8 Add four not named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM,
|
||||
PARTITION p4 ENGINE = MyISAM,
|
||||
PARTITION p5 ENGINE = MyISAM,
|
||||
PARTITION p6 ENGINE = MyISAM,
|
||||
PARTITION p7 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#p4.MYD
|
||||
t1#P#p4.MYI
|
||||
t1#P#p5.MYD
|
||||
t1#P#p5.MYI
|
||||
t1#P#p6.MYD
|
||||
t1#P#p6.MYI
|
||||
t1#P#p7.MYD
|
||||
t1#P#p7.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
#------------------------------------------------------------------------
|
||||
# 1.2 Decrease number of PARTITIONS
|
||||
#------------------------------------------------------------------------
|
||||
# 1.2.1 DROP PARTITION is not supported for HASH --> must fail
|
||||
ALTER TABLE t1 DROP PARTITION part1;
|
||||
ERROR HY000: DROP PARTITION can only be used on RANGE/LIST partitions
|
||||
# 1.2.2 COALESCE PARTITION partitionname is not supported
|
||||
ALTER TABLE t1 COALESCE PARTITION part1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'part1' at line 1
|
||||
# 1.2.3 Decrease by 0 is non sense --> must fail
|
||||
ALTER TABLE t1 COALESCE PARTITION 0;
|
||||
ERROR HY000: At least one partition must be coalesced
|
||||
# 1.2.4 COALESCE one partition + test loop
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM,
|
||||
PARTITION p4 ENGINE = MyISAM,
|
||||
PARTITION p5 ENGINE = MyISAM,
|
||||
PARTITION p6 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#p4.MYD
|
||||
t1#P#p4.MYI
|
||||
t1#P#p5.MYD
|
||||
t1#P#p5.MYI
|
||||
t1#P#p6.MYD
|
||||
t1#P#p6.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM,
|
||||
PARTITION p4 ENGINE = MyISAM,
|
||||
PARTITION p5 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#p4.MYD
|
||||
t1#P#p4.MYI
|
||||
t1#P#p5.MYD
|
||||
t1#P#p5.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM,
|
||||
PARTITION p4 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#p4.MYD
|
||||
t1#P#p4.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (YEAR(f_date))
|
||||
(PARTITION p0 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.2.5 COALESCE of last partition --> must fail
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
ERROR HY000: Cannot remove all partitions, use DROP TABLE instead
|
||||
# 1.2.6 Remove partitioning
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_date` date DEFAULT NULL,
|
||||
`f_varchar` varchar(30) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
t1.MYD
|
||||
t1.MYI
|
||||
t1.frm
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 1.2.7 Remove partitioning from not partitioned table --> ????
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
DROP TABLE t1;
|
||||
|
||||
#========================================================================
|
||||
# 2. Partition management commands on KEY partitioned table
|
||||
#========================================================================
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (
|
||||
f_int1 INTEGER,
|
||||
f_int2 INTEGER,
|
||||
f_char1 CHAR(20),
|
||||
f_char2 CHAR(20),
|
||||
f_charbig VARCHAR(1000)
|
||||
);
|
||||
INSERT INTO t1(f_int1,f_int2,f_char1,f_char2,f_charbig)
|
||||
SELECT f_int1,f_int2,f_char1,f_char2,f_charbig FROM t0_template;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
t1.MYD
|
||||
t1.MYI
|
||||
t1.frm
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
#------------------------------------------------------------------------
|
||||
# 2.1 Increase number of PARTITIONS
|
||||
# Some negative testcases are omitted (already checked with HASH).
|
||||
#------------------------------------------------------------------------
|
||||
# 2.1.1 Assign KEY partitioning
|
||||
ALTER TABLE t1 PARTITION BY KEY(f_int1);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.1.2 Add PARTITIONS not fitting to KEY --> must fail
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1 VALUES IN (0));
|
||||
ERROR HY000: Only LIST PARTITIONING can use VALUES IN in partition definition
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2 VALUES LESS THAN (0));
|
||||
ERROR HY000: Only RANGE PARTITIONING can use VALUES LESS THAN in partition definition
|
||||
# 2.1.3 Add two named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part1, PARTITION part7);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.1.4 Add one named partition + test
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION part2);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.1.5 Add four not named partitions + test
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 4;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM,
|
||||
PARTITION p4 ENGINE = MyISAM,
|
||||
PARTITION p5 ENGINE = MyISAM,
|
||||
PARTITION p6 ENGINE = MyISAM,
|
||||
PARTITION p7 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#p4.MYD
|
||||
t1#P#p4.MYI
|
||||
t1#P#p5.MYD
|
||||
t1#P#p5.MYI
|
||||
t1#P#p6.MYD
|
||||
t1#P#p6.MYI
|
||||
t1#P#p7.MYD
|
||||
t1#P#p7.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
#------------------------------------------------------------------------
|
||||
# 2.2 Decrease number of PARTITIONS
|
||||
# Some negative testcases are omitted (already checked with HASH).
|
||||
#------------------------------------------------------------------------
|
||||
# 2.2.1 DROP PARTITION is not supported for KEY --> must fail
|
||||
ALTER TABLE t1 DROP PARTITION part1;
|
||||
ERROR HY000: DROP PARTITION can only be used on RANGE/LIST partitions
|
||||
# 2.2.4 COALESCE one partition + test loop
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM,
|
||||
PARTITION p4 ENGINE = MyISAM,
|
||||
PARTITION p5 ENGINE = MyISAM,
|
||||
PARTITION p6 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#p4.MYD
|
||||
t1#P#p4.MYI
|
||||
t1#P#p5.MYD
|
||||
t1#P#p5.MYI
|
||||
t1#P#p6.MYD
|
||||
t1#P#p6.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM,
|
||||
PARTITION p4 ENGINE = MyISAM,
|
||||
PARTITION p5 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#p4.MYD
|
||||
t1#P#p4.MYI
|
||||
t1#P#p5.MYD
|
||||
t1#P#p5.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM,
|
||||
PARTITION p4 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#p4.MYD
|
||||
t1#P#p4.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM,
|
||||
PARTITION part2 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part2.MYD
|
||||
t1#P#part2.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM,
|
||||
PARTITION part7 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1#P#part7.MYD
|
||||
t1#P#part7.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM,
|
||||
PARTITION part1 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1#P#part1.MYD
|
||||
t1#P#part1.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY KEY (f_int1)
|
||||
(PARTITION p0 ENGINE = MyISAM) */
|
||||
t1#P#p0.MYD
|
||||
t1#P#p0.MYI
|
||||
t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.2.5 COALESCE of last partition --> must fail
|
||||
ALTER TABLE t1 COALESCE PARTITION 1;
|
||||
ERROR HY000: Cannot remove all partitions, use DROP TABLE instead
|
||||
# 2.2.6 Remove partitioning
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`f_int1` int(11) DEFAULT NULL,
|
||||
`f_int2` int(11) DEFAULT NULL,
|
||||
`f_char1` char(20) DEFAULT NULL,
|
||||
`f_char2` char(20) DEFAULT NULL,
|
||||
`f_charbig` varchar(1000) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
t1.MYD
|
||||
t1.MYI
|
||||
t1.frm
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 NULL ALL NULL NULL NULL NULL 20 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
# 2.2.7 Remove partitioning from not partitioned table --> ????
|
||||
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t0_aux;
|
||||
DROP TABLE IF EXISTS t0_definition;
|
||||
DROP TABLE IF EXISTS t0_template;
|
||||
90284
build/lib/mysql/mysql-test/suite/parts/r/partition_alter4_innodb.result
Normal file
90284
build/lib/mysql/mysql-test/suite/parts/r/partition_alter4_innodb.result
Normal file
File diff suppressed because it is too large
Load Diff
93712
build/lib/mysql/mysql-test/suite/parts/r/partition_alter4_myisam.result
Normal file
93712
build/lib/mysql/mysql-test/suite/parts/r/partition_alter4_myisam.result
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,816 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
# test without partitioning for reference
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Archive';
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
1
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
6
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
6
|
||||
INSERT INTO t1 VALUES (0);
|
||||
INSERT INTO t1 VALUES (5), (16);
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (19), (NULL);
|
||||
INSERT INTO t1 VALUES (NULL), (10), (NULL);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET INSERT_ID = 30;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET INSERT_ID = 29;
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
6
|
||||
17
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
30
|
||||
31
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Archive';
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES (4);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
4
|
||||
5
|
||||
6
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=8 DEFAULT CHARSET=latin1
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
INSERT INTO t1 VALUES (100);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
# Simple test with NULL
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Archive'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1;
|
||||
c1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
# Test with sql_mode and first insert as 0
|
||||
CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE='Archive'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
INSERT INTO t1 VALUES (1, 1), (99, 99);
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
SELECT * FROM t1 ORDER BY c1, c2;
|
||||
c1 c2
|
||||
1 1
|
||||
1 2
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE='Archive'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
INSERT INTO t1 VALUES (1, 1), (1, NULL);
|
||||
INSERT INTO t1 VALUES (2, NULL), (4, 7);
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
SELECT * FROM t1 ORDER BY c1, c2;
|
||||
c1 c2
|
||||
1 1
|
||||
1 2
|
||||
1 8
|
||||
2 3
|
||||
4 7
|
||||
SET @@session.sql_mode = '';
|
||||
DROP TABLE t1;
|
||||
# Simple test with NULL, 0 and explicit values both incr. and desc.
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Archive'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (2), (4), (NULL);
|
||||
INSERT INTO t1 VALUES (0);
|
||||
INSERT INTO t1 VALUES (5), (16);
|
||||
INSERT INTO t1 VALUES (17), (19), (NULL);
|
||||
INSERT INTO t1 VALUES (NULL), (10), (NULL);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
INSERT INTO t1 VALUES (NULL), (9);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
INSERT INTO t1 VALUES (59), (55);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
INSERT INTO t1 VALUES (NULL), (90);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
6
|
||||
17
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
59
|
||||
60
|
||||
90
|
||||
91
|
||||
DROP TABLE t1;
|
||||
# Test with auto_increment_increment and auto_increment_offset.
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Archive'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SET @@session.auto_increment_increment = 10;
|
||||
SET @@session.auto_increment_offset = 5;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
SET @@session.auto_increment_increment = 5;
|
||||
SET @@session.auto_increment_offset = 3;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (33 + 1);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (38 + 2);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (43 + 3);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (48 + 4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (53 + 5);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (63 + 6);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET @@session.auto_increment_increment = 1;
|
||||
SET @@session.auto_increment_offset = 1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
1
|
||||
5
|
||||
15
|
||||
25
|
||||
33
|
||||
34
|
||||
38
|
||||
40
|
||||
43
|
||||
46
|
||||
48
|
||||
52
|
||||
53
|
||||
58
|
||||
63
|
||||
69
|
||||
73
|
||||
DROP TABLE t1;
|
||||
# Test reported auto_increment value
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Archive'
|
||||
PARTITION BY HASH (c1)
|
||||
PARTITIONS 2;
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
1
|
||||
INSERT INTO t1 VALUES (2);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
3
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
6
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (19);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
22
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
22
|
||||
INSERT INTO t1 VALUES (10);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
6
|
||||
17
|
||||
19
|
||||
20
|
||||
21
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
23
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (15);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
6
|
||||
17
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=27 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
6
|
||||
17
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=28 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
6
|
||||
17
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
INSERT INTO t1 VALUES (100);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
DROP TABLE t1;
|
||||
# Test with two threads
|
||||
# con default
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Archive'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (10);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
DROP TABLE t1;
|
||||
# Test with two threads + start transaction NO PARTITIONING
|
||||
# con default
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Archive';
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
# con1
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (10);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
DROP TABLE t1;
|
||||
# Test with two threads + start transaction
|
||||
# con default
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Archive'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
# con1
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (NULL), (10);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL), (NULL), (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
2
|
||||
4
|
||||
5
|
||||
10
|
||||
11
|
||||
12
|
||||
19
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
DROP TABLE t1;
|
||||
# Test with another column before
|
||||
CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE = 'Archive'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
INSERT INTO t1 VALUES (2, NULL), (3, 11), (3, NULL), (2, 0);
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
INSERT INTO t1 VALUES (2, 22);
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
SELECT * FROM t1 ORDER BY c1,c2;
|
||||
c1 c2
|
||||
1 1
|
||||
1 2
|
||||
2 3
|
||||
2 13
|
||||
2 14
|
||||
2 22
|
||||
2 23
|
||||
3 11
|
||||
3 12
|
||||
DROP TABLE t1;
|
||||
# Test with auto_increment on secondary column in multi-column-index
|
||||
CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1,c2))
|
||||
ENGINE = 'Archive'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
ERROR 42000: Incorrect table definition; there can be only one auto column and it must be defined as a key
|
||||
# Test AUTO_INCREMENT in CREATE
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Archive'
|
||||
AUTO_INCREMENT = 15
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=15 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=15 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (0);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=16 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=17 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
15
|
||||
16
|
||||
# Test sql_mode 'NO_AUTO_VALUE_ON_ZERO'
|
||||
SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
INSERT INTO t1 (c1) VALUES (300);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=301 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (0);
|
||||
# ERROR (only OK if Archive) mysql_errno: 1022
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=301 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=302 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
15
|
||||
16
|
||||
300
|
||||
301
|
||||
SET @@session.sql_mode = '';
|
||||
DROP TABLE t1;
|
||||
# Test SET INSERT_ID
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Archive'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1;
|
||||
c1
|
||||
1
|
||||
SET INSERT_ID = 23;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=24 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SET INSERT_ID = 22;
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
1
|
||||
22
|
||||
23
|
||||
24
|
||||
DROP TABLE t1;
|
||||
# Testing with FLUSH TABLE
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Archive'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 VALUES (4);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=ARCHIVE AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
4
|
||||
5
|
||||
DROP TABLE t1;
|
||||
@@ -0,0 +1,691 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
# test without partitioning for reference
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Blackhole';
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
1
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
1
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
1
|
||||
INSERT INTO t1 VALUES (0);
|
||||
INSERT INTO t1 VALUES (5), (16);
|
||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (19), (NULL);
|
||||
INSERT INTO t1 VALUES (NULL), (10), (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET INSERT_ID = 30;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET INSERT_ID = 29;
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
UPDATE t1 SET c1 = 50 WHERE c1 = 17;
|
||||
UPDATE t1 SET c1 = 51 WHERE c1 = 19;
|
||||
FLUSH TABLES;
|
||||
UPDATE t1 SET c1 = 40 WHERE c1 = 50;
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
1
|
||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Blackhole';
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES (4);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
TRUNCATE TABLE t1;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
INSERT INTO t1 VALUES (100);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
DELETE FROM t1 WHERE c1 >= 100;
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize note The storage engine for the table doesn't support optimize
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1
|
||||
(a INT NULL AUTO_INCREMENT,
|
||||
UNIQUE KEY (a))
|
||||
ENGINE='Blackhole';
|
||||
SET LAST_INSERT_ID = 999;
|
||||
SET INSERT_ID = 0;
|
||||
INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
999
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
INSERT INTO t1 SET a = 1 ON DUPLICATE KEY UPDATE a = NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
999
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
UPDATE t1 SET a = 1 WHERE a IS NULL;
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
999
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
UPDATE t1 SET a = NULL WHERE a = 1;
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
999
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
DROP TABLE t1;
|
||||
SET INSERT_ID = 1;
|
||||
# Simple test with NULL
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Blackhole'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
# Test with sql_mode and first insert as 0
|
||||
CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE='Blackhole'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
INSERT INTO t1 VALUES (1, 1), (99, 99);
|
||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
SELECT * FROM t1 ORDER BY c1, c2;
|
||||
c1 c2
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE='Blackhole'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
INSERT INTO t1 VALUES (1, 1), (1, NULL);
|
||||
INSERT INTO t1 VALUES (2, NULL), (4, 7);
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
SELECT * FROM t1 ORDER BY c1, c2;
|
||||
c1 c2
|
||||
SET @@session.sql_mode = '';
|
||||
DROP TABLE t1;
|
||||
# Simple test with NULL, 0 and explicit values both incr. and desc.
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Blackhole'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (2), (4), (NULL);
|
||||
INSERT INTO t1 VALUES (0);
|
||||
INSERT INTO t1 VALUES (5), (16);
|
||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (17), (19), (NULL);
|
||||
INSERT INTO t1 VALUES (NULL), (10), (NULL);
|
||||
INSERT INTO t1 VALUES (NULL), (9);
|
||||
INSERT INTO t1 VALUES (59), (55);
|
||||
INSERT INTO t1 VALUES (NULL), (90);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
UPDATE t1 SET c1 = 150 WHERE c1 = 17;
|
||||
UPDATE t1 SET c1 = 151 WHERE c1 = 19;
|
||||
FLUSH TABLES;
|
||||
UPDATE t1 SET c1 = 140 WHERE c1 = 150;
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
1
|
||||
UPDATE t1 SET c1 = NULL WHERE c1 = 4;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
# Test with auto_increment_increment and auto_increment_offset.
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Blackhole'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SET @@session.auto_increment_increment = 10;
|
||||
SET @@session.auto_increment_offset = 5;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
SET @@session.auto_increment_increment = 5;
|
||||
SET @@session.auto_increment_offset = 3;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (33 + 1);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (38 + 2);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (43 + 3);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (48 + 4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (53 + 5);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (63 + 6);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SET @@session.auto_increment_increment = 1;
|
||||
SET @@session.auto_increment_offset = 1;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
# Test reported auto_increment value
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Blackhole'
|
||||
PARTITION BY HASH (c1)
|
||||
PARTITIONS 2;
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
1
|
||||
INSERT INTO t1 VALUES (2);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
3
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
6
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (19);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
22
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
22
|
||||
INSERT INTO t1 VALUES (10);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test'
|
||||
AND TABLE_NAME='t1';
|
||||
AUTO_INCREMENT
|
||||
23
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (15);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
DELETE FROM t1;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=27 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
TRUNCATE TABLE t1;
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
INSERT INTO t1 VALUES (100);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
DELETE FROM t1 WHERE c1 >= 100;
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize note The storage engine for the table doesn't support optimize
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
DROP TABLE t1;
|
||||
# Test with two threads
|
||||
# con default
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Blackhole'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (10);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
# Test with two threads + start transaction NO PARTITIONING
|
||||
# con default
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Blackhole';
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
# con1
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (10);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
INSERT INTO t1 (c1) VALUES (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
# Test with two threads + start transaction
|
||||
# con default
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Blackhole'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (2);
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
# con1
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (c1) VALUES (NULL), (10);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL), (NULL), (19);
|
||||
INSERT INTO t1 (c1) VALUES (21);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (16);
|
||||
# con1
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
# con default
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
# Test with another column after
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
c2 INT,
|
||||
PRIMARY KEY (c1,c2))
|
||||
ENGINE = 'Blackhole'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
INSERT INTO t1 VALUES (NULL, 1), (NULL, 2), (NULL, 3);
|
||||
INSERT INTO t1 VALUES (NULL, 3);
|
||||
INSERT INTO t1 VALUES (2, 0), (NULL, 2);
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
INSERT INTO t1 VALUES (2, 22);
|
||||
INSERT INTO t1 VALUES (NULL, 2);
|
||||
SELECT * FROM t1 ORDER BY c1,c2;
|
||||
c1 c2
|
||||
DROP TABLE t1;
|
||||
# Test with another column before
|
||||
CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c2))
|
||||
ENGINE = 'Blackhole'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
INSERT INTO t1 VALUES (2, NULL), (3, 11), (3, NULL), (2, 0);
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (2, 22);
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
SELECT * FROM t1 ORDER BY c1,c2;
|
||||
c1 c2
|
||||
DROP TABLE t1;
|
||||
# Test with auto_increment on secondary column in multi-column-index
|
||||
CREATE TABLE t1 (
|
||||
c1 INT,
|
||||
c2 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1,c2))
|
||||
ENGINE = 'Blackhole'
|
||||
PARTITION BY HASH(c2)
|
||||
PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (1, NULL);
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
INSERT INTO t1 VALUES (3, NULL);
|
||||
INSERT INTO t1 VALUES (3, NULL), (2, 0), (2, NULL);
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
# ERROR (only OK if Blackhole/NDB) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (2, 22), (2, NULL);
|
||||
SELECT * FROM t1 ORDER BY c1,c2;
|
||||
c1 c2
|
||||
DROP TABLE t1;
|
||||
# Test AUTO_INCREMENT in CREATE
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Blackhole'
|
||||
AUTO_INCREMENT = 15
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (4);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (0);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
# Test sql_mode 'NO_AUTO_VALUE_ON_ZERO'
|
||||
SET @@session.sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
INSERT INTO t1 (c1) VALUES (300);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=301 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (0);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=301 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=302 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
SET @@session.sql_mode = '';
|
||||
DROP TABLE t1;
|
||||
# Test SET INSERT_ID
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (c1))
|
||||
ENGINE = 'Blackhole'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1;
|
||||
c1
|
||||
SET INSERT_ID = 23;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 (c1) VALUES (NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE AUTO_INCREMENT=24 DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SET INSERT_ID = 22;
|
||||
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
||||
# ERROR (only OK if Blackhole) should give ER_DUP_KEY or ER_DUP_ENTRY
|
||||
# mysql_errno: 0
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
# Testing with FLUSH TABLE
|
||||
CREATE TABLE t1 (
|
||||
c1 INT NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (c1))
|
||||
ENGINE='Blackhole'
|
||||
PARTITION BY HASH(c1)
|
||||
PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 VALUES (4);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
FLUSH TABLE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (c1)
|
||||
PARTITIONS 2 */
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
DROP TABLE t1;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user