diff options
author | Sergei Golubchik <serg@mariadb.org> | 2018-02-15 17:13:48 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2018-02-23 15:33:21 +0100 |
commit | 9f6a7ed2d78af260838658369e7b3308f21d55ec (patch) | |
tree | 10f4e8e8a55696b578c959892d1c471acd1c51f1 /sql/ha_partition.cc | |
parent | 187a163c782fc54225f6a096d4ec2240bde0f145 (diff) | |
download | mariadb-git-9f6a7ed2d78af260838658369e7b3308f21d55ec.tar.gz |
SQL: Truncate history of partitioned table [fixes #399, closes #403]
also, don't rotate versioning partitions for DELETE HISTORY
originally by: Aleksey Midenkov
Diffstat (limited to 'sql/ha_partition.cc')
-rw-r--r-- | sql/ha_partition.cc | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index cc0ec90bff9..a0b4abf77fb 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -4474,11 +4474,18 @@ int ha_partition::delete_row(const uchar *buf) Notice that HA_READ_BEFORE_WRITE_REMOVAL does not require this protocol, so this is not supported for this engine. + + For partitions by system_time, get_part_for_buf() is always either current + or last historical partition, but DELETE HISTORY can delete from any + historical partition. So, skip the check in this case. */ - uint32 part_id; - error= get_part_for_buf(buf, m_rec0, m_part_info, &part_id); - DBUG_ASSERT(!error); - DBUG_ASSERT(part_id == m_last_part); + if (!thd->lex->vers_conditions) // if not DELETE HISTORY + { + uint32 part_id; + error= get_part_for_buf(buf, m_rec0, m_part_info, &part_id); + DBUG_ASSERT(!error); + DBUG_ASSERT(part_id == m_last_part); + } DBUG_ASSERT(bitmap_is_set(&(m_part_info->read_partitions), m_last_part)); DBUG_ASSERT(bitmap_is_set(&(m_part_info->lock_partitions), m_last_part)); #endif |