common_meta/ddl/alter_table/
check.rs1use api::v1::alter_table_expr::Kind;
16use api::v1::RenameTable;
17use common_catalog::format_full_table_name;
18use snafu::ensure;
19
20use crate::ddl::alter_table::AlterTableProcedure;
21use crate::error::{self, Result};
22use crate::key::table_name::TableNameKey;
23
24impl AlterTableProcedure {
25 pub(crate) async fn check_alter(&self) -> Result<()> {
29 let alter_expr = &self.data.task.alter_table;
30 let catalog = &alter_expr.catalog_name;
31 let schema = &alter_expr.schema_name;
32 let table_name = &alter_expr.table_name;
33 let alter_kind = self.data.task.alter_table.kind.as_ref().unwrap();
35
36 let manager = &self.context.table_metadata_manager;
37 if let Kind::RenameTable(RenameTable { new_table_name }) = alter_kind {
38 let new_table_name_key = TableNameKey::new(catalog, schema, new_table_name);
39 let exists = manager
40 .table_name_manager()
41 .exists(new_table_name_key)
42 .await?;
43 ensure!(
44 !exists,
45 error::TableAlreadyExistsSnafu {
46 table_name: format_full_table_name(catalog, schema, new_table_name),
47 }
48 )
49 }
50
51 let table_name_key = TableNameKey::new(catalog, schema, table_name);
52 let exists = manager.table_name_manager().exists(table_name_key).await?;
53 ensure!(
54 exists,
55 error::TableNotFoundSnafu {
56 table_name: format_full_table_name(catalog, schema, &alter_expr.table_name),
57 }
58 );
59
60 Ok(())
61 }
62}