```rust use semilatticedatabasesession::*;
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 = SessionDatabase::new(dir).unwrap();
let collectionadmin = database.collectionidorcreate("admin").unwrap();
if let Ok(mut sess) = database.session("creatreaccount1st", None) { database .update( &mut sess, vec![Record::New { collectionid: collectionadmin, activity: Activity::Active, termbegin: Term::Default, termend: Term::Default, fields: vec![ KeyValue::new("id", "test".toowned()), KeyValue::new("password", "test".toowned()), ], depends: Depends::Overwrite(vec![]), pends: vec![], }], ) .unwrap(); database.commit(&mut sess).unwrap(); }
let collectionlogin = database.collectionidorcreate("login").unwrap(); if let Ok(mut sess) = database.session("login", None) { let search = sess .beginsearch(collectionadmin) .searchfield("id", search::Field::Match(Arc::new(b"test".tovec()))) .searchfield("password", search::Field::Match(Arc::new(b"test".tovec()))); for row in database.resultsession(search, vec![]).unwrap() { assert!(row >= 0); database .update( &mut sess, vec![Record::New { collectionid: collectionlogin, activity: Activity::Active, termbegin: Term::Default, termend: Term::Default, fields: vec![], depends: Depends::Overwrite(vec![( "admin".toowned(), CollectionRow::new(collectionadmin, row as u32), )]), pends: vec![], }], ) .unwrap(); } } if let Ok(sess) = database.session("login", None) { let search = sess.beginsearch(collectionlogin); for row in database.resultsession(search, vec![]).unwrap() { let depends = database.dependswithsession( Some("admin"), collectionlogin, row as u32, Some(&sess), ); for d in depends { let collectionid = d.collectionid(); if let Some(collection) = database.collection(collectionid) { let search = sess .beginsearch(collectionid) .searchrow(search::Number::In(vec![d.row() as isize])); for row in database.resultsession(search, vec![]).unwrap() { println!( "login id : {}", std::str::fromutf8(collection.fieldbytes(row as u32, "id")).unwrap() ); } } } } }
let collectionperson = database.collectionidorcreate("person").unwrap(); let collectionhistory = database.collectionidorcreate("history").unwrap();
if let Ok(mut sess) = database.session("test", None) { database .update( &mut sess, vec![ Record::New { collectionid: collectionperson, activity: Activity::Active, termbegin: Term::Default, termend: Term::Default, 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::Default, termend: Term::Default, 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::Default, termend: Term::Default, 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::Default, termend: Term::Default, 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::Default, termend: Term::Default, 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::Default, termend: Term::Default, 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, &vec![Order::Asc(OrderKey::Field("birthday".toowned()))], ) .unwrap(); 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) .search(Condition::Depend(Depend::new( "history", CollectionRow::new(collectionperson, i), ))); for h in database.result(search, &vec![]).unwrap() { 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", None) { database .update( &mut sess, vec![Record::Update { collectionid: collectionperson, row: 1, activity: Activity::Active, termbegin: Term::Default, termend: Term::Default, fields: vec![KeyValue::new("name", "Renamed Joe")], depends: Depends::Default, pends: vec![], }], ) .unwrap(); } if let Ok(mut sess) = database.session("test", None) { let search = sess .beginsearch(collectionperson) .searchactivity(Activity::Active); for r in database.resultsession(search, vec![]).unwrap() { 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(); } ```