fix trigger

main
Ziyang Hu 2 years ago
parent 12520b3468
commit b28b92605c

@ -447,7 +447,9 @@ fn make_const_rule(
rule_symbol.clone(),
InputInlineRulesOrAlgo::Algo {
algo: AlgoApply {
algo: AlgoHandle { name: rule_symbol },
algo: AlgoHandle {
name: Symbol::new("Constant", Default::default()),
},
rule_args: vec![],
options,
head: bindings,

@ -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]);
}
}

Loading…
Cancel
Save