1use super::*;
20
21#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
23#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
25pub enum TriggerObject {
26 Row,
28 Statement,
30}
31
32impl fmt::Display for TriggerObject {
33 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
34 match self {
35 TriggerObject::Row => write!(f, "ROW"),
36 TriggerObject::Statement => write!(f, "STATEMENT"),
37 }
38 }
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
42#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
43#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
44pub enum TriggerReferencingType {
46 OldTable,
48 NewTable,
50}
51
52impl fmt::Display for TriggerReferencingType {
53 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
54 match self {
55 TriggerReferencingType::OldTable => write!(f, "OLD TABLE"),
56 TriggerReferencingType::NewTable => write!(f, "NEW TABLE"),
57 }
58 }
59}
60
61#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
63#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
64#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
65pub struct TriggerReferencing {
66 pub refer_type: TriggerReferencingType,
68 pub is_as: bool,
70 pub transition_relation_name: ObjectName,
72}
73
74impl fmt::Display for TriggerReferencing {
75 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
76 write!(
77 f,
78 "{refer_type}{is_as} {relation_name}",
79 refer_type = self.refer_type,
80 is_as = if self.is_as { " AS" } else { "" },
81 relation_name = self.transition_relation_name
82 )
83 }
84}
85
86#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
88#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
89#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
90pub enum TriggerEvent {
91 Insert,
93 Update(Vec<Ident>),
95 Delete,
97 Truncate,
99}
100
101impl fmt::Display for TriggerEvent {
102 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
103 match self {
104 TriggerEvent::Insert => write!(f, "INSERT"),
105 TriggerEvent::Update(columns) => {
106 write!(f, "UPDATE")?;
107 if !columns.is_empty() {
108 write!(f, " OF")?;
109 write!(f, " {}", display_comma_separated(columns))?;
110 }
111 Ok(())
112 }
113 TriggerEvent::Delete => write!(f, "DELETE"),
114 TriggerEvent::Truncate => write!(f, "TRUNCATE"),
115 }
116 }
117}
118
119#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
121#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
122#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
123pub enum TriggerPeriod {
124 For,
126 After,
128 Before,
130 InsteadOf,
132}
133
134impl fmt::Display for TriggerPeriod {
135 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
136 match self {
137 TriggerPeriod::For => write!(f, "FOR"),
138 TriggerPeriod::After => write!(f, "AFTER"),
139 TriggerPeriod::Before => write!(f, "BEFORE"),
140 TriggerPeriod::InsteadOf => write!(f, "INSTEAD OF"),
141 }
142 }
143}
144
145#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
147#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
148#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
149pub enum TriggerExecBodyType {
150 Function,
152 Procedure,
154}
155
156impl fmt::Display for TriggerExecBodyType {
157 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
158 match self {
159 TriggerExecBodyType::Function => write!(f, "FUNCTION"),
160 TriggerExecBodyType::Procedure => write!(f, "PROCEDURE"),
161 }
162 }
163}
164#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
172#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
173#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
174pub struct TriggerExecBody {
175 pub exec_type: TriggerExecBodyType,
177 pub func_name: ObjectName,
179 pub args: Option<Vec<Expr>>,
182}
183
184impl fmt::Display for TriggerExecBody {
185 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
186 write!(f, "{} {}", self.exec_type, self.func_name)?;
187 if let Some(args) = &self.args {
188 write!(f, "({})", display_comma_separated(args))?;
189 }
190 Ok(())
191 }
192}