uqa_core/
catalog_sequence.rs1use serde::{Deserialize, Serialize};
10
11mod security;
12pub use security::{BoundSequenceSecurity, LegacySequenceSecurity};
13
14#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
16pub struct SequencePrivileges {
17 #[serde(default)]
18 pub select: bool,
19 #[serde(default)]
20 pub update: bool,
21 #[serde(default)]
22 pub usage: bool,
23}
24
25impl SequencePrivileges {
26 pub const ALL: Self = Self {
27 select: true,
28 update: true,
29 usage: true,
30 };
31
32 #[must_use]
33 pub const fn is_empty(self) -> bool {
34 !self.select && !self.update && !self.usage
35 }
36
37 #[must_use]
38 pub const fn intersects(self, other: Self) -> bool {
39 self.select && other.select || self.update && other.update || self.usage && other.usage
40 }
41
42 pub fn insert(&mut self, other: Self) {
43 self.select |= other.select;
44 self.update |= other.update;
45 self.usage |= other.usage;
46 }
47
48 pub fn remove(&mut self, other: Self) {
49 self.select &= !other.select;
50 self.update &= !other.update;
51 self.usage &= !other.usage;
52 }
53}
54
55#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
57pub struct SequenceAclEntry {
58 pub role: crate::catalog_acl::AclGrantee,
59 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub grantor: Option<String>,
62 #[serde(default)]
63 pub privileges: SequencePrivileges,
64 #[serde(default)]
65 pub grant_options: SequencePrivileges,
66}
67
68#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
70#[serde(rename_all = "snake_case")]
71pub enum SequenceOwnerDependency {
72 #[default]
73 Automatic,
74 Internal,
75}
76
77impl SequenceOwnerDependency {
78 #[must_use]
79 pub const fn catalog_code(self) -> &'static str {
80 match self {
81 Self::Automatic => "a",
82 Self::Internal => "i",
83 }
84 }
85}
86
87#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
89pub struct SequenceOwner {
90 pub table_object_id: [u8; 16],
91 pub column_object_id: [u8; 16],
92 #[serde(default)]
93 pub dependency: SequenceOwnerDependency,
94}
95
96#[cfg(test)]
97mod tests;