use crate::ddl_ast::statement::{DatabaseStmt, NodedbStatement};
use crate::error::SqlError;
pub(super) fn try_parse(
upper: &str,
parts: &[&str],
_trimmed: &str,
) -> Option<Result<NodedbStatement, SqlError>> {
if upper.starts_with("BACKUP TENANT ") {
let tenant_id = parts.get(2).map(|s| s.to_string()).unwrap_or_default();
return Some(Ok(NodedbStatement::Database(DatabaseStmt::BackupTenant {
tenant_id,
})));
}
if upper.starts_with("RESTORE TENANT ") {
let modifier_tail = upper
.rsplit_once('\'')
.map(|(_, tail)| tail)
.unwrap_or(upper);
let modifiers: Vec<&str> = modifier_tail.split_whitespace().collect();
let dry_run =
modifiers.contains(&"DRYRUN") || modifiers.windows(2).any(|w| w == ["DRY", "RUN"]);
let force = modifiers.contains(&"FORCE");
let tenant_id = parts.get(2).map(|s| s.to_string()).unwrap_or_default();
return Some(Ok(NodedbStatement::Database(DatabaseStmt::RestoreTenant {
dry_run,
force,
tenant_id,
})));
}
None
}