|
|
|
@ -430,3 +430,45 @@ pub(crate) struct InsufficientAccessLevel(
|
|
|
|
|
pub(crate) String,
|
|
|
|
|
pub(crate) AccessLevel,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
|
mod tests {
|
|
|
|
|
use serde_json::json;
|
|
|
|
|
use crate::new_cozo_mem;
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn test_trigger() {
|
|
|
|
|
let db = new_cozo_mem().unwrap();
|
|
|
|
|
db.run_script(":create friends {fr: Int, to: Int}", Default::default())
|
|
|
|
|
.unwrap();
|
|
|
|
|
db.run_script(":create friends.rev {to: Int, fr: Int}", Default::default())
|
|
|
|
|
.unwrap();
|
|
|
|
|
db.run_script(r#"
|
|
|
|
|
::set_triggers friends
|
|
|
|
|
|
|
|
|
|
on put {
|
|
|
|
|
?[fr, to] := _new[fr, to]
|
|
|
|
|
|
|
|
|
|
:put friends.rev{ to, fr }
|
|
|
|
|
}
|
|
|
|
|
on rm {
|
|
|
|
|
?[fr, to] := _old[fr, to]
|
|
|
|
|
|
|
|
|
|
:rm friends.rev{ to, fr }
|
|
|
|
|
}
|
|
|
|
|
"#, Default::default()).unwrap();
|
|
|
|
|
db.run_script(
|
|
|
|
|
r"?[fr, to] <- [[1,2]] :put friends {fr, to}",
|
|
|
|
|
Default::default(),
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
|
|
|
|
let ret = db
|
|
|
|
|
.export_relations(["friends", "friends.rev"].into_iter())
|
|
|
|
|
.unwrap();
|
|
|
|
|
let frs = ret.get("friends").unwrap();
|
|
|
|
|
assert_eq!(vec![json!(1), json!(2)], frs.rows[0]);
|
|
|
|
|
|
|
|
|
|
let frs_rev = ret.get("friends.rev").unwrap();
|
|
|
|
|
assert_eq!(vec![json!(2), json!(1)], frs_rev.rows[0]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|