use microrm::prelude::*;
use test_log::test;
mod common;
#[derive(Entity)]
struct Child {
#[key]
name: String,
parent: ParentID,
}
#[derive(Entity)]
struct Parent {
name: String,
}
#[derive(Schema)]
struct PeopleDB {
children: microrm::IDMap<Child>,
parents: microrm::IDMap<Parent>,
}
#[test]
fn simple_query() {
let (pool, db): (_, PeopleDB) = common::open_test_db!();
let mut txn = pool.start().unwrap();
let pid = db
.parents
.insert(
&mut txn,
Parent {
name: "parent1".to_string(),
},
)
.unwrap();
let _c1id = db
.children
.insert(
&mut txn,
Child {
name: "child1".to_string(),
parent: pid,
},
)
.unwrap();
let p2id = db
.parents
.insert(
&mut txn,
Parent {
name: "parent2".to_string(),
},
)
.unwrap();
let _c2id = db
.children
.insert(
&mut txn,
Child {
name: "child2".to_string(),
parent: p2id,
},
)
.unwrap();
let _c3id = db
.children
.insert(
&mut txn,
Child {
name: "child3".to_string(),
parent: p2id,
},
)
.unwrap();
txn.commit().unwrap();
let mut txn = pool.start().unwrap();
assert_eq!(
db.children
.foreign(Child::Parent)
.get_ids(&mut txn)
.expect("couldn't run query"),
vec![pid, p2id]
);
assert_eq!(
db.children
.keyed("child1")
.foreign(Child::Parent)
.get_ids(&mut txn)
.expect("couldn't run query"),
Some(pid)
);
}