///|
fn classify_vacuum(words : ArrayView[String]) -> Command {
let (start, options) = match
maintenance_options(
words,
[
"FULL", "FREEZE", "VERBOSE", "ANALYZE", "SKIP_LOCKED", "TRUNCATE", "INDEX_CLEANUP",
][:],
) {
Some(parsed) => parsed
None => return Unsupported
}
let mut start = start
if start == 1 {
// The documented legacy order is FULL, FREEZE, VERBOSE, ANALYZE.
for flag in ["FULL", "FREEZE", "VERBOSE", "ANALYZE"] {
if words.get(start) == Some(flag) {
options[flag] = true
start += 1
}
}
}
match
maintenance_targets(
words[start:],
allow_columns=options.get("ANALYZE").unwrap_or(false),
) {
Some(database_wide) =>
Vacuum(
full=options.get("FULL").unwrap_or(false),
skip_locked=options.get("SKIP_LOCKED").unwrap_or(false),
truncate=options.get("TRUNCATE").unwrap_or(true),
cleanup_off=options.get("INDEX_CLEANUP") == Some(false),
database_wide~,
)
None => Unsupported
}
}