use crate::control::security::identity::AuthenticatedIdentity;
use crate::control::state::SharedState;
use super::super::super::result::{DdlError, DdlResult};
use super::gate::{require_database_owner_or_higher, require_superuser};
use super::support::ddl_err;
pub fn backup_database(
state: &SharedState,
identity: &AuthenticatedIdentity,
name: &str,
) -> Result<Vec<DdlResult>, DdlError> {
let catalog = state.credentials.catalog();
let db_id = match catalog.get_database_id_by_name(name) {
Ok(Some(id)) => id,
Ok(None) => {
return Err(ddl_err(
"3D000",
format!("database '{name}' does not exist"),
));
}
Err(e) => {
return Err(ddl_err("XX000", format!("catalog lookup failed: {e}")));
}
};
require_database_owner_or_higher(state, identity, db_id, &format!("BACKUP DATABASE {name}"))?;
Err(ddl_err("0A000", "BACKUP DATABASE is not yet implemented"))
}
pub fn restore_database(
state: &SharedState,
identity: &AuthenticatedIdentity,
name: &str,
) -> Result<Vec<DdlResult>, DdlError> {
let db_id_opt = state
.credentials
.catalog()
.get_database_id_by_name(name)
.ok()
.flatten();
require_superuser(
state,
identity,
db_id_opt,
&format!("RESTORE DATABASE {name}"),
)?;
Err(ddl_err("0A000", "RESTORE DATABASE is not yet implemented"))
}