mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-22165 CONVERT TABLE: move in partition from existing table
Syntax for CONVERT TABLE ALTER TABLE tbl_name CONVERT TABLE tbl_name TO PARTITION partition_name partition_spec Examples: ALTER TABLE t1 CONVERT TABLE tp2 TO PARTITION p2 VALUES LESS THAN MAX_VALUE(); New ALTER_PARTITION_CONVERT_IN command for fast_alter_partition_table() is done in alter_partition_convert_in() function which basically does ha_rename_table(). Table structure and data check is basically the same as in EXCHANGE PARTITION command. And these are done by compare_table_with_partition() and check_table_data(). Atomic DDL is done by the scheme from MDEV-22166 (see the corresponding commit message). The only differnce is that it also has to drop source table frm and that is done by WFRM_DROP_CONVERTED_FROM. Initial patch was done by Dmitry Shulga <dmitry.shulga@mariadb.com>
This commit is contained in:
committed by
Sergei Golubchik
parent
7da721be31
commit
69724805bc
@ -875,7 +875,6 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
|
||||
#else /* !WITH_PARTITION_STORAGE_ENGINE */
|
||||
DBUG_ASSERT(!(flags & WFRM_WRITE_EXTRACTED));
|
||||
DBUG_ASSERT(!(flags & WFRM_BACKUP_ORIGINAL));
|
||||
DBUG_ASSERT(!(flags & WFRM_DROP_BACKUP));
|
||||
#endif /* !WITH_PARTITION_STORAGE_ENGINE */
|
||||
if (flags & WFRM_INSTALL_SHADOW)
|
||||
{
|
||||
@ -9688,7 +9687,8 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
|
||||
Table maybe does not exist, but we got an exclusive lock
|
||||
on the name, now we can safely try to find out for sure.
|
||||
*/
|
||||
if (ha_table_exists(thd, &alter_ctx.new_db, &alter_ctx.new_name))
|
||||
if (!(alter_info->partition_flags & ALTER_PARTITION_CONVERT_IN) &&
|
||||
ha_table_exists(thd, &alter_ctx.new_db, &alter_ctx.new_name))
|
||||
{
|
||||
/* Table will be closed in do_command() */
|
||||
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alter_ctx.new_alias.str);
|
||||
|
Reference in New Issue
Block a user