diff options
author | Aleksey Midenkov <midenok@gmail.com> | 2020-06-04 12:12:49 +0300 |
---|---|---|
committer | Aleksey Midenkov <midenok@gmail.com> | 2020-06-04 12:12:49 +0300 |
commit | 05693cf2149f8792863a32325090e789015286fc (patch) | |
tree | 588679ac84156ba829a6804e82a9188550d2361e | |
parent | 8300f639a14afeb379c224e10dab9d99d31cecbd (diff) | |
download | mariadb-git-05693cf2149f8792863a32325090e789015286fc.tar.gz |
MDEV-22112 Assertion `tab_part_info->part_type == RANGE_PARTITION || tab_part_info->part_type == LIST_PARTITION' failed in prep_alter_part_table
Incorrect syntax for SYSTEM_TIME partition. work_part_info is detected
as HASH partition. We cannot add partition of different type neither
we cannot reorganize SYSTEM_TIME into/from different type
partitioning.
The sidefix for version until 10.5 corrects the message:
"For LIST partitions each partition must be defined"
-rw-r--r-- | mysql-test/suite/versioning/r/partition.result | 10 | ||||
-rw-r--r-- | mysql-test/suite/versioning/t/partition.test | 17 | ||||
-rw-r--r-- | sql/partition_info.cc | 2 | ||||
-rw-r--r-- | sql/sql_partition.cc | 3 |
4 files changed, 31 insertions, 1 deletions
diff --git a/mysql-test/suite/versioning/r/partition.result b/mysql-test/suite/versioning/r/partition.result index ab206db1213..a89053369a7 100644 --- a/mysql-test/suite/versioning/r/partition.result +++ b/mysql-test/suite/versioning/r/partition.result @@ -673,4 +673,14 @@ delete from v1; ERROR HY000: Table 't1' was locked with a READ lock and can't be updated drop view v1; drop table t1; +# +# MDEV-22112 Assertion `tab_part_info->part_type == RANGE_PARTITION || tab_part_info->part_type == LIST_PARTITION' failed in prep_alter_part_table +# +create table t1 (a int) with system versioning partition by system_time; +ERROR HY000: For SYSTEM_TIME partitions each partition must be defined +create table t1 (a int) with system versioning partition by system_time +(partition p1 history, partition pn current); +alter table t1 add partition (partition p2); +ERROR HY000: Wrong partitioning type, expected type: `SYSTEM_TIME` +drop table t1; # End of 10.3 tests diff --git a/mysql-test/suite/versioning/t/partition.test b/mysql-test/suite/versioning/t/partition.test index 726b991c00e..957fddc730d 100644 --- a/mysql-test/suite/versioning/t/partition.test +++ b/mysql-test/suite/versioning/t/partition.test @@ -635,6 +635,23 @@ delete from v1; drop view v1; drop table t1; +--echo # +--echo # MDEV-22112 Assertion `tab_part_info->part_type == RANGE_PARTITION || tab_part_info->part_type == LIST_PARTITION' failed in prep_alter_part_table +--echo # + +### TMP: Please remove this error check in 10.5 (MDEV-19903) +--error ER_PARTITIONS_MUST_BE_DEFINED_ERROR +create table t1 (a int) with system versioning partition by system_time; +### TMP end + +create table t1 (a int) with system versioning partition by system_time +(partition p1 history, partition pn current); +--error ER_PARTITION_WRONG_TYPE +alter table t1 add partition (partition p2); + +# Cleanup +drop table t1; + --echo # End of 10.3 tests --source suite/versioning/common_finish.inc diff --git a/sql/partition_info.cc b/sql/partition_info.cc index 66ec6a70b12..8989a918c0c 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -451,6 +451,8 @@ bool partition_info::set_up_default_partitions(THD *thd, handler *file, const char *error_string; if (part_type == RANGE_PARTITION) error_string= "RANGE"; + else if (part_type == VERSIONING_PARTITION) + error_string= "SYSTEM_TIME"; else error_string= "LIST"; my_error(ER_PARTITIONS_MUST_BE_DEFINED_ERROR, MYF(0), error_string); diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index f7158a2b1ee..4e9c78480b5 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -5135,7 +5135,8 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info, my_error(ER_PARTITION_WRONG_VALUES_ERROR, MYF(0), "LIST", "IN"); } - else if (thd->work_part_info->part_type == VERSIONING_PARTITION) + else if (thd->work_part_info->part_type == VERSIONING_PARTITION || + tab_part_info->part_type == VERSIONING_PARTITION) { my_error(ER_PARTITION_WRONG_TYPE, MYF(0), "SYSTEM_TIME"); } |