```rust use semilattice_database::prelude::*;
let dir="./sl-test/";
if std::path::Path::new(dir).exists(){ std::fs::removedirall(dir).unwrap(); std::fs::createdirall(dir).unwrap(); }else{ std::fs::createdirall(dir).unwrap(); } let mut database=Database::new(dir).unwrap();
let collectionperson = database.collectionidorcreate("person").unwrap(); let collectionhistory = database.collectionidorcreate("history").unwrap();
if let Ok(mut sess) = database.session("test") { database .update( &mut sess, vec![ Record::New { collectionid: collectionperson, activity: Activity::Active, termbegin: Term::Defalut, termend: Term::Defalut, fields: vec![ KeyValue::new("name", "Joe"), KeyValue::new("birthday", "1972-08-02"), ], depends: Depends::Overwrite(vec![]), pends: vec![Pend::new( "history", vec![ Record::New { collectionid: collectionhistory, activity: Activity::Active, termbegin: Term::Defalut, termend: Term::Defalut, fields: vec![ KeyValue::new("date", "1972-08-02"), KeyValue::new("event", "Birth"), ], depends: Depends::Default, pends: vec![], }, Record::New { collectionid: collectionhistory, activity: Activity::Active, termbegin: Term::Defalut, termend: Term::Defalut, fields: vec![ KeyValue::new("date", "1999-12-31"), KeyValue::new("event", "Mariage"), ], depends: Depends::Default, pends: vec![], }, ], )], }, Record::New { collectionid: collectionperson, activity: Activity::Active, termbegin: Term::Defalut, termend: Term::Defalut, fields: vec![ KeyValue::new("name", "Tom"), KeyValue::new("birthday", "2000-12-12"), ], depends: Depends::Default, pends: vec![Pend::new( "history", vec![Record::New { collectionid: collectionhistory, activity: Activity::Active, termbegin: Term::Defalut, termend: Term::Defalut, fields: vec![ KeyValue::new("date", "2000-12-12"), KeyValue::new("event", "Birth"), ], depends: Depends::Default, pends: vec![], }], )], }, Record::New { collectionid: collectionperson, activity: Activity::Active, termbegin: Term::Defalut, termend: Term::Defalut, fields: vec![ KeyValue::new("name", "Billy"), KeyValue::new("birthday", "1982-03-03"), ], depends: Depends::Default, pends: vec![], }, ], ) .unwrap(); database.commit(&mut sess).unwrap(); }
if let (Some(person), Some(history)) = ( database.collection(collectionperson), database.collection(collectionhistory), ) { let search = database.search(person); let personrows = database.result(search); let personrows = person.sort( personrows, vec![Order::Asc(OrderKey::Field("birthday".toowned()))], ); for i in personrows { println!( "{},{}", std::str::fromutf8(person.fieldbytes(i, "name")).unwrap(), std::str::fromutf8(person.fieldbytes(i, "birthday")).unwrap() ); let search = database.search(history).depend(search::Depend::new( "history", CollectionRow::new(collectionperson, i as u32), )); for h in database.result(search) { println!( " {} : {}", std::str::fromutf8(history.fieldbytes(h, "date")).unwrap(), std::str::fromutf8(history.fieldbytes(h, "event")).unwrap() ); } } } if let Ok(mut sess) = database.session("test") { database .update( &mut sess, vec![Record::Update { collectionid: collectionperson, row: 1, activity: Activity::Active, termbegin: Term::Defalut, termend: Term::Defalut, fields: vec![KeyValue::new("name", "Renamed Joe")], depends: Depends::Default, pends: vec![], }], ) .unwrap(); } if let Ok(mut sess) = database.session("test") { let search = sess .beginsearch(collectionperson) .searchactivity(Activity::Active); for r in database.resultsession(search) { println!( "sessionsearch : {},{}", std::str::fromutf8(sess.fieldbytes(&database, collectionperson, r, "name")) .unwrap(), std::str::fromutf8(sess.fieldbytes(&database, collection_person, r, "birthday")) .unwrap() ); } database.commit(&mut sess).unwrap(); }
let test1 = database.collectionidorcreate("test1").unwrap(); let range = 1u32..=10; if let Ok(mut sess) = database.session("test") { for i in range.clone() { database .update( &mut sess, vec![Record::New { collectionid: test1, activity: Activity::Active, termbegin: Term::Defalut, termend: Term::Defalut, fields: vec![ KeyValue::new("num", i.tostring()), KeyValue::new("numby3", (i * 3).to_string()), ], depends: Depends::Overwrite(vec![]), pends: vec![], }], ) .unwrap(); } database.commit(&mut sess).unwrap(); }
if let Ok(mut sess) = database.session("test") { database .update( &mut sess, vec![Record::Update { collectionid: test1, row: 3, activity: Activity::Inactive, termbegin: Term::Defalut, term_end: Term::Defalut, fields: vec![], depends: Depends::Overwrite(vec![]), pends: vec![], }], ) .unwrap(); database.commit(&mut sess).unwrap(); }
if let Some(t1) = database.collection(test1) { let mut sum = 0.0; for i in range.clone() { sum += t1.fieldnum(i, "num"); println!( "{},{},{},{},{},{},{},{}", t1.serial(i), if t1.activity(i) == Activity::Active { "Active" } else { "Inactive" }, t1.uuidstr(i), t1.lastupdated(i), t1.termbegin(i), t1.termend(i), std::str::fromutf8(t1.fieldbytes(i, "num")).unwrap(), std::str::fromutf8(t1.fieldbytes(i, "numby3")).unwrap() ); } assert_eq!(sum, 55.0); } ```