sea_query/audit/
update.rs

1use 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}