sea_query/audit/
insert.rs

1use super::*;
2use crate::{InsertStatement, InsertValueSource};
3
4impl AuditTrait for InsertStatement {
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::Insert,
21            schema_table,
22        });
23
24        if let Some(InsertValueSource::Select(select)) = &self.source {
25            requests.append(&mut select.audit()?.requests)
26        }
27
28        if let Some(with) = &self.with {
29            let mut walker = select::Walker { access: requests };
30            walker.recurse_audit_with_clause(with)?;
31            walker.recurse_audit_with_clause_cleanup(with);
32            requests = walker.access;
33        }
34
35        Ok(QueryAccessAudit { requests })
36    }
37}