sea_query/audit/
insert.rs1use 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}