| 20 | pub const MAX_IDLE_TIMEOUT_SECS: u64 = 365 * 24 * 60 * 60; |
| 21 | |
| 22 | pub(super) fn parse_alter_database( |
| 23 | parts: &[&str], |
| 24 | original: &str, |
| 25 | ) -> Result<NodedbStatement, SqlError> { |
| 26 | let name = parts |
| 27 | .get(2) |
| 28 | .copied() |
| 29 | .ok_or_else(|| SqlError::Parse { |
| 30 | detail: "ALTER DATABASE requires a name".into(), |
| 31 | })? |
| 32 | .trim_matches('"') |
| 33 | .to_string(); |
| 34 | |
| 35 | let verb = parts |
| 36 | .get(3) |
| 37 | .copied() |
| 38 | .ok_or_else(|| SqlError::Parse { |
| 39 | detail: "ALTER DATABASE requires an operation keyword".into(), |
| 40 | })? |
| 41 | .to_uppercase(); |
| 42 | |
| 43 | let operation = match verb.as_str() { |
| 44 | "RENAME" => parse_rename(parts)?, |
| 45 | "SET" => parse_set(parts, original)?, |
| 46 | "MATERIALIZE" => AlterDatabaseOperation::Materialize, |
| 47 | "PROMOTE" => AlterDatabaseOperation::Promote, |
| 48 | other => { |
| 49 | return Err(SqlError::Parse { |
| 50 | detail: format!("ALTER DATABASE: unknown operation '{other}'"), |
| 51 | }); |
| 52 | } |
| 53 | }; |
| 54 | |
| 55 | Ok(NodedbStatement::Database(DatabaseStmt::AlterDatabase { |
| 56 | name, |
| 57 | operation, |
| 58 | })) |
| 59 | } |
| 60 | |
| 61 | fn parse_rename(parts: &[&str]) -> Result<AlterDatabaseOperation, SqlError> { |
| 62 | let to_kw = parts.get(4).map(|w| w.to_uppercase()).unwrap_or_default(); |