use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LockingClause {
pub strength: LockStrength,
pub wait: LockWait,
pub relations: Vec<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
pub enum LockStrength {
ForKeyShare,
ForShare,
ForNoKeyUpdate,
ForUpdate,
}
impl LockStrength {
#[must_use]
pub const fn sql_name(self) -> &'static str {
match self {
Self::ForKeyShare => "FOR KEY SHARE",
Self::ForShare => "FOR SHARE",
Self::ForNoKeyUpdate => "FOR NO KEY UPDATE",
Self::ForUpdate => "FOR UPDATE",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum LockWait {
Block,
SkipLocked,
NoWait,
}