diff --git a/mysql-test/suite/versioning/r/partition.result b/mysql-test/suite/versioning/r/partition.result index 9e8b71f1874..f67b9d1d69e 100644 --- a/mysql-test/suite/versioning/r/partition.result +++ b/mysql-test/suite/versioning/r/partition.result @@ -32,8 +32,7 @@ x create or replace table t1 (i int) engine=DEFAULT_ENGINE with system versioning partition by hash(i); alter table t1 engine=NON_DEFAULT_ENGINE; ERROR HY000: Not allowed for system-versioned `test`.`t1`. Change to/from native system versioning engine is prohibited. -# Check server-level partitioning -## create errors +## CREATE TABLE create or replace table t1 (x int) partition by system_time ( partition p0 history, @@ -49,34 +48,40 @@ create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 current); -ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT +ERROR HY000: Wrong partitions for `t1`: must have at least one HISTORY and exactly one last CURRENT create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 current, partition p1 current); -ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT +ERROR HY000: Wrong partitions for `t1`: must have at least one HISTORY and exactly one last CURRENT create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 history, partition p1 history); -ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT +ERROR HY000: Wrong partitions for `t1`: must have at least one HISTORY and exactly one last CURRENT create or replace table t1 (x int) with system versioning partition by system_time ( partition pn current, partition p0 history); -ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT +ERROR HY000: Wrong partitions for `t1`: must have at least one HISTORY and exactly one last CURRENT +create or replace table t1 (x int) +with system versioning +partition by system_time ( +partition p0, +partition pn current); +ERROR HY000: Wrong partitions for `t1`: must have at least one HISTORY and exactly one last CURRENT create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 history, partition pn current); -## alter table +## ALTER TABLE alter table t1 add partition ( partition p1 current); -ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT +ERROR HY000: Wrong partitions for `t1`: must have at least one HISTORY and exactly one last CURRENT alter table t1 add partition ( partition p1 history); Warnings: @@ -95,10 +100,10 @@ t1 CREATE TABLE `t1` ( PARTITION `pn` CURRENT ENGINE = DEFAULT_ENGINE) insert into t1 values (1), (2); alter table t1 drop partition pn; -ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT +ERROR HY000: Wrong partitions for `t1`: must have at least one HISTORY and exactly one last CURRENT alter table t1 drop partition p1; alter table t1 drop partition p0; -ERROR HY000: Wrong partitions consistency for `t1`: must have at least one HISTORY and exactly one last CURRENT +ERROR HY000: Wrong partitions for `t1`: must have at least one HISTORY and exactly one last CURRENT select x from t1; x 1 @@ -110,7 +115,10 @@ partition by system_time limit 1 ( partition p0 history, partition pn current); alter table t1 change x big int; -## insert, delete, update +create or replace table t1 (i int) engine myisam partition by hash(i) partitions 2; +alter table t1 add partition (partition px history); +ERROR HY000: Wrong partitioning type, expected type: `SYSTEM_TIME` +## INSERT, UPDATE, DELETE create or replace table t1 (x int) with system versioning partition by system_time ( diff --git a/mysql-test/suite/versioning/t/partition.test b/mysql-test/suite/versioning/t/partition.test index 6c42e56b6f3..c593f032057 100644 --- a/mysql-test/suite/versioning/t/partition.test +++ b/mysql-test/suite/versioning/t/partition.test @@ -27,8 +27,9 @@ eval create or replace table t1 (i int) engine=$default_engine with system versi --error ER_VERS_ALTER_ENGINE_PROHIBITED eval alter table t1 engine=$non_default_engine; ---echo # Check server-level partitioning ---echo ## create errors + +--echo ## CREATE TABLE + --error ER_VERS_ENGINE_UNSUPPORTED create or replace table t1 (x int) partition by system_time ( @@ -69,13 +70,22 @@ partition by system_time ( partition pn current, partition p0 history); +--error ER_VERS_WRONG_PARTS +create or replace table t1 (x int) +with system versioning +partition by system_time ( + partition p0, + partition pn current); + create or replace table t1 (x int) with system versioning partition by system_time ( partition p0 history, partition pn current); ---echo ## alter table + +--echo ## ALTER TABLE + --error ER_VERS_WRONG_PARTS alter table t1 add partition ( partition p1 current); @@ -104,7 +114,13 @@ partition by system_time limit 1 ( partition pn current); alter table t1 change x big int; ---echo ## insert, delete, update +create or replace table t1 (i int) engine myisam partition by hash(i) partitions 2; +--error ER_PARTITION_WRONG_TYPE +alter table t1 add partition (partition px history); + + +--echo ## INSERT, UPDATE, DELETE + create or replace table t1 (x int) with system versioning partition by system_time ( diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 833240d1ac5..fdb717c3366 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -7834,7 +7834,7 @@ ER_NON_VERSIONED_FIELD_IN_VERSIONED_QUERY eng "Attempt to read non-temporal field %`s in historical query" ER_PARTITION_WRONG_TYPE - eng "Wrong partition type, expected type: %`s" + eng "Wrong partitioning type, expected type: %`s" WARN_VERS_PART_FULL eng "Versioned table %`s.%`s: partition %`s is full, add more HISTORY partitions" @@ -7897,7 +7897,7 @@ ER_PART_WRONG_VALUE eng "Wrong parameters for partitioned %`s: wrong value for '%s'" ER_VERS_WRONG_PARTS - eng "Wrong partitions consistency for %`s: must have at least one HISTORY and exactly one last CURRENT" + eng "Wrong partitions for %`s: must have at least one HISTORY and exactly one last CURRENT" ER_VERS_HISTORY_LOCK eng "Versioned SELECT write-locking of history rows" diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 5beec82e063..2dc8ad498ca 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -4737,6 +4737,10 @@ 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) + { + my_error(ER_PARTITION_WRONG_TYPE, MYF(0), "SYSTEM_TIME"); + } else if (tab_part_info->part_type == RANGE_PARTITION) { my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 9f2059bafc1..db6199bb787 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -5430,6 +5430,9 @@ opt_part_values: if (part_info->part_type == LIST_PARTITION) my_yyabort_error((ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0), "LIST", "IN")); + if (part_info->part_type == VERSIONING_PARTITION) + my_yyabort_error((ER_VERS_WRONG_PARTS, MYF(0), + lex->create_last_non_select_table->table_name)); } else part_info->part_type= HASH_PARTITION; @@ -5470,8 +5473,7 @@ opt_part_values: if (! lex->is_partition_management()) { if (part_info->part_type != VERSIONING_PARTITION) - my_yyabort_error((ER_PARTITION_WRONG_TYPE, MYF(0), - "BY SYSTEM_TIME")); + my_yyabort_error((ER_PARTITION_WRONG_TYPE, MYF(0), "SYSTEM_TIME")); } else { @@ -5497,8 +5499,7 @@ opt_part_values: if (! lex->is_partition_management()) { if (part_info->part_type != VERSIONING_PARTITION) - my_yyabort_error((ER_PARTITION_WRONG_TYPE, MYF(0), - "BY SYSTEM_TIME")); + my_yyabort_error((ER_PARTITION_WRONG_TYPE, MYF(0), "SYSTEM_TIME")); } else {