Bug#40389: REORGANIZE PARTITION crashes when only using one partition
The non documented command 'ALTER PARTITION t REORGANIZE PARTITION' (without any partitions!) which only make sense for nativly partitioned engines, such as NDB, crashes the server if there was no change of number of partitions. The problem was wrong usage of fast_end_partition function, which led to usage of a non initialized variable. mysql-test/r/partition_mgm.result: Bug#40389: REORGANIZE PARTITION crashes when only using one partition Updated test result. mysql-test/t/partition_mgm.test: Bug#40389: REORGANIZE PARTITION crashes when only using one partition Added new test case. sql/partition_info.cc: Bug#40389: REORGANIZE PARTITION crashes when only using one partition Added DBUG_ASSERT to easier catch similar problems. sql/sql_partition.cc: Bug#40389: REORGANIZE PARTITION crashes when only using one partition fast_end_partitions is called later in mysql_alter_table if variable fast_alter_partition is set.
This commit is contained in:
parent
c82ff58222
commit
6538f19f9a
@ -1,4 +1,11 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY)
|
||||
ENGINE MYISAM
|
||||
PARTITION BY HASH (a)
|
||||
PARTITIONS 1;
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
|
||||
ALTER TABLE t1 REORGANIZE PARTITION;
|
||||
DROP TABLE t1;
|
||||
create table t1 (a int)
|
||||
partition by range (a)
|
||||
subpartition by key (a)
|
||||
|
@ -3,6 +3,17 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Bug 40389: REORGANIZE PARTITION crashes when only using one partition
|
||||
#
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY)
|
||||
ENGINE MYISAM
|
||||
PARTITION BY HASH (a)
|
||||
PARTITIONS 1;
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
|
||||
ALTER TABLE t1 REORGANIZE PARTITION;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug 21143: mysqld hang when error in number of subparts in
|
||||
# REORGANIZE command
|
||||
|
@ -867,6 +867,7 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
|
||||
|
||||
if (part_type != HASH_PARTITION || !list_of_part_fields)
|
||||
{
|
||||
DBUG_ASSERT(part_expr);
|
||||
err= part_expr->walk(&Item::check_partition_func_processor, 0,
|
||||
NULL);
|
||||
if (!err && is_sub_partitioned() && !list_of_subpart_fields)
|
||||
|
@ -4228,9 +4228,8 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
||||
after the change as before. Thus we can reply ok immediately
|
||||
without any changes at all.
|
||||
*/
|
||||
DBUG_RETURN(fast_end_partition(thd, ULL(0), ULL(0),
|
||||
table, NULL,
|
||||
TRUE, NULL, FALSE));
|
||||
*fast_alter_partition= TRUE;
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
else if (new_part_no > curr_part_no)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user