Commit 20928819 authored by Aleksey Midenkov's avatar Aleksey Midenkov

MDEV-29841 Partition by system_time can be converted into table but not back

Wrong error code was returned because of prematurely tested condition
for wrong partition type. Now the condition for CONVERT IN is tested
first.
parent 6f8fb41f
......@@ -2049,6 +2049,15 @@ t1 CREATE TABLE `t1` (
PARTITION `pn` VALUES LESS THAN MAXVALUE ENGINE = X)
drop tables t1, tp1;
#
# MDEV-29841 Partition by system_time can be converted into table but not back
#
create or replace table t (a int) with system versioning
partition by system_time limit 10 partitions 3;
alter table t convert partition p0 to table tp;
alter table t convert table tp to partition p0;
ERROR HY000: CONVERT TABLE TO PARTITION can only be used on RANGE/LIST partitions
drop tables t, tp;
#
# End of 10.7 tests
#
set global innodb_stats_persistent= @save_persistent;
......@@ -1677,6 +1677,16 @@ show create table t1;
drop tables t1, tp1;
}
--echo #
--echo # MDEV-29841 Partition by system_time can be converted into table but not back
--echo #
create or replace table t (a int) with system versioning
partition by system_time limit 10 partitions 3;
alter table t convert partition p0 to table tp;
--error ER_ONLY_ON_RANGE_LIST_PARTITION
alter table t convert table tp to partition p0;
drop tables t, tp;
--echo #
--echo # End of 10.7 tests
--echo #
......
......@@ -5057,6 +5057,13 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
if ((alter_info->partition_flags & ALTER_PARTITION_ADD) ||
(alter_info->partition_flags & ALTER_PARTITION_REORGANIZE))
{
if ((alter_info->partition_flags & ALTER_PARTITION_CONVERT_IN) &&
!(tab_part_info->part_type == RANGE_PARTITION ||
tab_part_info->part_type == LIST_PARTITION))
{
my_error(ER_ONLY_ON_RANGE_LIST_PARTITION, MYF(0), "CONVERT TABLE TO");
goto err;
}
if (thd->work_part_info->part_type != tab_part_info->part_type)
{
if (thd->work_part_info->part_type == NOT_A_PARTITION)
......@@ -5126,13 +5133,6 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
}
if (alter_info->partition_flags & ALTER_PARTITION_ADD)
{
if ((alter_info->partition_flags & ALTER_PARTITION_CONVERT_IN) &&
!(tab_part_info->part_type == RANGE_PARTITION ||
tab_part_info->part_type == LIST_PARTITION))
{
my_error(ER_ONLY_ON_RANGE_LIST_PARTITION, MYF(0), "CONVERT TABLE TO");
goto err;
}
if (*fast_alter_table && thd->locked_tables_mode)
{
MEM_ROOT *old_root= thd->mem_root;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment