1use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
11pub struct LockingClause {
12 pub strength: LockStrength,
13 pub wait: LockWait,
14 pub relations: Vec<String>,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
20pub enum LockStrength {
21 ForKeyShare,
22 ForShare,
23 ForNoKeyUpdate,
24 ForUpdate,
25}
26
27impl LockStrength {
28 #[must_use]
30 pub const fn sql_name(self) -> &'static str {
31 match self {
32 Self::ForKeyShare => "FOR KEY SHARE",
33 Self::ForShare => "FOR SHARE",
34 Self::ForNoKeyUpdate => "FOR NO KEY UPDATE",
35 Self::ForUpdate => "FOR UPDATE",
36 }
37 }
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
42pub enum LockWait {
43 Block,
44 SkipLocked,
45 NoWait,
46}