use super::{RoutineDropTarget, RoutineRegistry};
use crate::SQLError;
pub fn remove_routine_registry_targets(
next: &mut RoutineRegistry,
targets: &[RoutineDropTarget],
) -> Result<(), SQLError> {
for target in targets {
if !next
.get(&target.name)
.is_some_and(|overloads| overloads.iter().any(|function| target.names(function)))
{
return Err(SQLError::Internal(format!(
"resolved {} {} disappeared before DROP",
target.kind(),
target.label()
)));
}
}
for target in targets {
if let Some(overloads) = next.get_mut(&target.name) {
overloads.retain(|function| !target.names(function));
if overloads.is_empty() {
next.remove(&target.name);
}
}
}
Ok(())
}
#[cfg(test)]
mod tests;