Skip to main content

ic_dbms_api/dbms/query/
delete.rs

1use candid::CandidType;
2use serde::{Deserialize, Serialize};
3
4/// Defines the behavior for delete operations regarding foreign key constraints.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, CandidType, Serialize, Deserialize)]
6pub enum DeleteBehavior {
7    /// Delete only the records matching the filter.
8    /// If there are foreign key constraints that would be violated, the operation will fail.
9    Restrict,
10    /// Cascade delete to related records.
11    /// Any records that reference the deleted records via foreign keys will also be deleted.
12    Cascade,
13}
14
15#[cfg(test)]
16mod test {
17
18    use super::*;
19
20    #[test]
21    fn test_should_create_delete_behavior_variants() {
22        let restrict = DeleteBehavior::Restrict;
23        let cascade = DeleteBehavior::Cascade;
24
25        assert_eq!(restrict, DeleteBehavior::Restrict);
26        assert_eq!(cascade, DeleteBehavior::Cascade);
27    }
28
29    #[test]
30    #[allow(clippy::clone_on_copy)]
31    fn test_should_clone_delete_behavior() {
32        let behavior = DeleteBehavior::Cascade;
33        let cloned = behavior.clone();
34        assert_eq!(behavior, cloned);
35    }
36
37    #[test]
38    #[allow(clippy::clone_on_copy)]
39    fn test_should_copy_delete_behavior() {
40        let behavior = DeleteBehavior::Restrict;
41        let copied = behavior;
42        assert_eq!(behavior, copied);
43    }
44
45    #[test]
46    fn test_should_compare_delete_behaviors() {
47        assert_eq!(DeleteBehavior::Restrict, DeleteBehavior::Restrict);
48        assert_eq!(DeleteBehavior::Cascade, DeleteBehavior::Cascade);
49        assert_ne!(DeleteBehavior::Restrict, DeleteBehavior::Cascade);
50    }
51
52    #[test]
53    fn test_should_debug_delete_behavior() {
54        assert_eq!(format!("{:?}", DeleteBehavior::Restrict), "Restrict");
55        assert_eq!(format!("{:?}", DeleteBehavior::Cascade), "Cascade");
56    }
57
58    #[test]
59    fn test_should_candid_encode_decode_delete_behavior() {
60        for behavior in [DeleteBehavior::Restrict, DeleteBehavior::Cascade] {
61            let encoded = candid::encode_one(behavior).expect("failed to encode");
62            let decoded: DeleteBehavior = candid::decode_one(&encoded).expect("failed to decode");
63            assert_eq!(behavior, decoded);
64        }
65    }
66}