sea_query/audit/
update.rs1use super::*;
2use crate::UpdateStatement;
3
4impl AuditTrait for UpdateStatement {
5 fn audit(&self) -> Result<QueryAccessAudit, Error> {
6 let mut requests = Vec::new();
7 let Some(table) = &self.table else {
8 return Err(Error::UnableToParseQuery);
9 };
10 let Some(schema_table) = common::parse_audit_table(table) else {
11 return Err(Error::UnableToParseQuery);
12 };
13 if self.returning.is_some() {
14 requests.push(QueryAccessRequest {
15 access_type: AccessType::Select,
16 schema_table: schema_table.clone(),
17 });
18 }
19 requests.push(QueryAccessRequest {
20 access_type: AccessType::Update,
21 schema_table,
22 });
23
24 for from in &self.from {
25 let mut walker = select::Walker::default();
26 walker.recurse_audit_table(from)?;
27 requests.append(&mut walker.access);
28 }
29
30 if let Some(with) = &self.with {
31 let mut walker = select::Walker { access: requests };
32 walker.recurse_audit_with_clause(with)?;
33 walker.recurse_audit_with_clause_cleanup(with);
34 requests = walker.access;
35 }
36
37 Ok(QueryAccessAudit { requests })
38 }
39}