llkv_runtime/runtime_context/
alter.rs1use crate::canonical_table_name;
9use llkv_executor::translation::sql_type_to_arrow;
10use llkv_result::{Error, Result};
11use llkv_storage::pager::Pager;
12use simd_r_drive_entry_handle::EntryHandle;
13
14use super::RuntimeContext;
15
16impl<P> RuntimeContext<P>
17where
18 P: Pager<Blob = EntryHandle> + Send + Sync,
19{
20 pub fn rename_column(
22 &self,
23 table_name: &str,
24 old_column_name: &str,
25 new_column_name: &str,
26 ) -> Result<()> {
27 let (_, canonical_table) = canonical_table_name(table_name)?;
28
29 let table_id = self
31 .catalog
32 .table_id(&canonical_table)
33 .ok_or_else(|| Error::CatalogError(format!("table '{}' not found", table_name)))?;
34
35 self.catalog_service
37 .rename_column(table_id, old_column_name, new_column_name)?;
38
39 self.remove_table_entry(&canonical_table);
41
42 Ok(())
43 }
44
45 pub fn alter_column_type(
47 &self,
48 table_name: &str,
49 column_name: &str,
50 new_data_type_sql: &str,
51 ) -> Result<()> {
52 let (_, canonical_table) = canonical_table_name(table_name)?;
53
54 let table_id = self
56 .catalog
57 .table_id(&canonical_table)
58 .ok_or_else(|| Error::CatalogError(format!("table '{}' not found", table_name)))?;
59
60 let arrow_type = sql_type_to_arrow(new_data_type_sql)?;
62
63 self.catalog_service
65 .alter_column_type(table_id, column_name, &arrow_type)?;
66
67 self.remove_table_entry(&canonical_table);
69
70 Ok(())
71 }
72
73 pub fn drop_column(&self, table_name: &str, column_name: &str) -> Result<()> {
75 let (_, canonical_table) = canonical_table_name(table_name)?;
76
77 let table_id = self
79 .catalog
80 .table_id(&canonical_table)
81 .ok_or_else(|| Error::CatalogError(format!("table '{}' not found", table_name)))?;
82
83 self.catalog_service.drop_column(table_id, column_name)?;
85
86 self.remove_table_entry(&canonical_table);
88
89 Ok(())
90 }
91}