use reifydb_core::{
interface::catalog::{id::ColumnId, shape::ShapeId},
key::{
column::ColumnKey, column_sequence::ColumnSequenceKey, columns::ColumnsKey, property::ColumnPropertyKey,
},
};
use reifydb_transaction::transaction::admin::AdminTransaction;
use crate::{CatalogStore, Result};
impl CatalogStore {
pub(crate) fn drop_column(txn: &mut AdminTransaction, shape: ShapeId, column_id: ColumnId) -> Result<()> {
let policy_range = ColumnPropertyKey::full_scan(column_id);
let mut policy_stream = txn.range(policy_range, 1024)?;
let mut policy_keys = Vec::new();
for entry in policy_stream.by_ref() {
policy_keys.push(entry?.key.clone());
}
drop(policy_stream);
for pk in policy_keys {
txn.remove(&pk)?;
}
txn.remove(&ColumnSequenceKey::encoded(shape, column_id))?;
txn.remove(&ColumnsKey::encoded(column_id))?;
txn.remove(&ColumnKey::encoded(shape, column_id))?;
Ok(())
}
}