Commit 04bed58a authored by Aleksey Midenkov's avatar Aleksey Midenkov

SQL: partitioning CREATE, ALTER fixes

MDEV-14688 Assertion `tab_part_info->part_type == LIST_PARTITION' failed in prep_alter_part_table
MDEV-14673 Assertion `part_elem->type() == partition_element::AS_OF_NOW' failed in check_partition_info
parent b0d9dc43
......@@ -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 (
......
......@@ -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 (
......
......@@ -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"
......
......@@ -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),
......
......@@ -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
{
......
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