Skip to main content

wasm_dbms_api/dbms/query/
delete.rs

1use serde::{Deserialize, Serialize};
2
3/// Defines the behavior for delete operations regarding foreign key constraints.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5#[cfg_attr(feature = "candid", derive(candid::CandidType))]
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    #[cfg(feature = "candid")]
59    #[test]
60    fn test_should_candid_encode_decode_delete_behavior() {
61        for behavior in [DeleteBehavior::Restrict, DeleteBehavior::Cascade] {
62            let encoded = candid::encode_one(behavior).expect("failed to encode");
63            let decoded: DeleteBehavior = candid::decode_one(&encoded).expect("failed to decode");
64            assert_eq!(behavior, decoded);
65        }
66    }
67}