1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-17091 - Assertion failed after dropping versioning

Assertion `old_part_id == m_last_part' failed in ha_partition::update_row or `part_id == m_last_part' in ha_partition::delete_row upon UPDATE/DELETE after dropping versioning

PRIMARY KEY change hadn't been treated as partition reorganization in case of partitioning by KEY() (without parameters).

* set `*partition_changed= true` in the described case.
* since add/drop system versioning does not affect alter_info->key_list, it required separate attention
This commit is contained in:
Nikita Malyavin
2020-04-02 22:37:36 +10:00
committed by GitHub
parent b40b3720cb
commit 9149017bb8
5 changed files with 112 additions and 0 deletions

View File

@ -6016,6 +6016,24 @@ the generated partition syntax in a correct manner.
*partition_changed= true;
}
}
// In case of PARTITION BY KEY(), check if primary key has changed
// System versioning also implicitly adds/removes primary key parts
if (alter_info->partition_flags == 0 && part_info->list_of_part_fields
&& part_info->part_field_list.elements == 0)
{
if (alter_info->flags & (ALTER_DROP_SYSTEM_VERSIONING |
ALTER_ADD_SYSTEM_VERSIONING))
*partition_changed= true;
List_iterator<Key> it(alter_info->key_list);
Key *key;
while((key= it++) && !*partition_changed)
{
if (key->type == Key::PRIMARY)
*partition_changed= true;
}
}
/*
Set up partition default_engine_type either from the create_info
or from the previus table