MySQL 8.0.40
Source Code Documentation
Sql_cmd_alter_table_exchange_partition Class Reference

Class that represents the ALTER TABLE t1 EXCHANGE PARTITION p WITH TABLE t2 statement. More...

#include <sql_partition_admin.h>

Inheritance diagram for Sql_cmd_alter_table_exchange_partition:
[legend]

Public Member Functions

bool execute (THD *thd) override
 Execute this SQL statement. More...
 
- Public Member Functions inherited from Sql_cmd_common_alter_table
 ~Sql_cmd_common_alter_table () override=0
 
enum_sql_command sql_command_code () const final
 Return the command code for this statement. More...
 
 Sql_cmd_ddl_table (Alter_info *alter_info)
 
- Public Member Functions inherited from Sql_cmd_ddl_table
 Sql_cmd_ddl_table (Alter_info *alter_info)
 
 ~Sql_cmd_ddl_table () override=0
 
- Public Member Functions inherited from Sql_cmd
bool needs_explicit_preparation () const
 
bool is_regular () const
 
bool is_prepared () const
 
virtual bool prepare (THD *)
 Prepare this SQL statement. More...
 
virtual bool reprepare_on_execute_required () const
 Some SQL commands currently require re-preparation on re-execution of a prepared statement or stored procedure. More...
 
virtual void cleanup (THD *)
 Command-specific reinitialization before execution of prepared statement. More...
 
void set_owner (Prepared_statement *stmt)
 Set the owning prepared statement. More...
 
Prepared_statementowner () const
 Get the owning prepared statement. More...
 
void set_as_part_of_sp ()
 Mark statement as part of procedure. More...
 
bool is_part_of_sp () const
 
virtual bool is_dml () const
 
virtual bool is_single_table_plan () const
 
virtual bool accept (THD *, Select_lex_visitor *)
 
virtual const MYSQL_LEX_CSTRINGeligible_secondary_storage_engine () const
 Is this statement of a type and on a form that makes it eligible for execution in a secondary storage engine? More...
 
void disable_secondary_storage_engine ()
 Disable use of secondary storage engines in this statement. More...
 
bool secondary_storage_engine_disabled () const
 Has use of secondary storage engines been disabled for this statement? More...
 
void use_secondary_storage_engine (const handlerton *hton)
 Mark the current statement as using a secondary storage engine. More...
 
bool using_secondary_storage_engine () const
 Is this statement using a secondary storage engine? More...
 
const handlertonsecondary_engine () const
 Get the handlerton of the secondary engine that is used for executing this statement, or nullptr if a secondary engine is not used. More...
 
void set_optional_transform_prepared (bool value)
 
bool is_optional_transform_prepared ()
 

Private Member Functions

bool exchange_partition (THD *thd, Table_ref *, Alter_info *)
 Swap places between a partition and a table. More...
 

Additional Inherited Members

- Protected Member Functions inherited from Sql_cmd
 Sql_cmd ()
 
virtual ~Sql_cmd ()
 
void set_prepared ()
 Set this statement as prepared. More...
 
- Protected Attributes inherited from Sql_cmd_ddl_table
Alter_info *const m_alter_info
 

Detailed Description

Class that represents the ALTER TABLE t1 EXCHANGE PARTITION p WITH TABLE t2 statement.

Member Function Documentation

◆ exchange_partition()

bool Sql_cmd_alter_table_exchange_partition::exchange_partition ( THD thd,
Table_ref table_list,
Alter_info alter_info 
)
private

Swap places between a partition and a table.

Verify that the tables are compatible (same engine, definition etc), verify that all rows in the table will fit in the partition, if all OK, rename table to tmp name, rename partition to table and finally rename tmp name to partition.

1) Take upgradable mdl, open tables and then lock them (inited in parse) 2) Verify that metadata matches 3) verify data 4) Upgrade to exclusive mdl for both tables 5) Rename table <-> partition 6) Rely on close_thread_tables to release mdl and table locks

Parameters
thdThread handle
table_listTable where the partition exists as first table, Table to swap with the partition as second table
alter_infoContains partition name to swap
Note
This is a DDL operation so triggers will not be used.

◆ execute()

bool Sql_cmd_alter_table_exchange_partition::execute ( THD thd)
overridevirtual

Execute this SQL statement.

Parameters
thdthe current thread.
Returns
false if success, true if error

Implements Sql_cmd.


The documentation for this class was generated from the following files: