summaryrefslogtreecommitdiff
path: root/sql/sql_partition.cc
diff options
context:
space:
mode:
authorNikita Malyavin <nikitamalyavin@gmail.com>2019-03-04 19:09:30 +1000
committerNikita Malyavin <nikitamalyavin@gmail.com>2020-02-18 17:29:44 +1000
commitd0af96bb74d3dd9f501526c3a6e14e069ec9053b (patch)
treed7d92ffa0c0b2e3f80aaaae3b7130829cf4c0802 /sql/sql_partition.cc
parent85d4a45d15078512562d84273f489e8d225c1da7 (diff)
downloadmariadb-git-bb-10.3-MDEV-17091.tar.gz
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 versioningbb-10.3-MDEV-17091
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
Diffstat (limited to 'sql/sql_partition.cc')
-rw-r--r--sql/sql_partition.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index febd88c4b9b..5fdca153ef7 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -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