```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.into(), None).unwrap();
let collectionadmin = database.collectionidorcreate("admin").unwrap();
if let Ok(mut sess) = database.session("creatreaccount1st", None) { database .update( &mut sess, vec![SessionRecord::New { collectionid: collectionadmin, record: Record { fields: vec![ KeyValue::new("id", "test".toowned()), KeyValue::new("password", "test".toowned()), ], ..Record::default() }, 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![SessionRecord::New { collectionid: collectionlogin, record: Record { fields: vec![], ..Record::default() }, 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![ SessionRecord::New { collectionid: collectionperson, record: Record { fields: vec![ KeyValue::new("name", "Joe"), KeyValue::new("birthday", "1972-08-02"), ], ..Record::default() }, depends: Depends::Overwrite(vec![]), pends: vec![Pend::new( "history", vec![ SessionRecord::New { collectionid: collectionhistory, record: Record { fields: vec![ KeyValue::new("date", "1972-08-02"), KeyValue::new("event", "Birth"), ], ..Record::default() }, depends: Depends::Default, pends: vec![], }, SessionRecord::New { collectionid: collectionhistory, record: Record { fields: vec![ KeyValue::new("date", "1999-12-31"), KeyValue::new("event", "Mariage"), ], ..Record::default() }, depends: Depends::Default, pends: vec![], }, ], )], }, SessionRecord::New { collectionid: collectionperson, record: Record { fields: vec![ KeyValue::new("name", "Tom"), KeyValue::new("birthday", "2000-12-12"), ], ..Record::default() }, depends: Depends::Default, pends: vec![Pend::new( "history", vec![SessionRecord::New { collectionid: collectionhistory, record: Record { fields: vec![ KeyValue::new("date", "2000-12-12"), KeyValue::new("event", "Birth"), ], ..Record::default() }, depends: Depends::Default, pends: vec![], }], )], }, SessionRecord::New { collectionid: collectionperson, record: Record { fields: vec![ KeyValue::new("name", "Billy"), KeyValue::new("birthday", "1982-03-03"), ], ..Record::default() }, 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( Some("history".toowned()), 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![SessionRecord::Update { collectionid: collectionperson, row: 1, record: Record { fields: vec![KeyValue::new("name", "Renamed Joe")], ..Record::default() }, 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, collectionperson, 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", None) { for i in range.clone() { database .update( &mut sess, vec![SessionRecord::New { collectionid: test1, record: Record { fields: vec![ KeyValue::new("num", i.tostring()), KeyValue::new("numby3", (i * 3).to_string()), ], ..Record::default() }, depends: Depends::Overwrite(vec![]), pends: vec![], }], ) .unwrap(); } database.commit(&mut sess).unwrap(); }
if let Ok(mut sess) = database.session("test", None) { database .update( &mut sess, vec![SessionRecord::Update { collection_id: test1, row: 3, record: Record { fields: vec![], ..Record::default() }, 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 let Some(Activity::Active) = t1.activity(i) { "Active" } else { "Inactive" }, t1.uuidstring(i).unwrapor("".tostring()), t1.lastupdated(i).unwrapor(0), t1.termbegin(i).unwrapor(0), t1.termend(i).unwrapor(0), std::str::fromutf8(t1.fieldbytes(i, "num")).unwrap(), std::str::fromutf8(t1.fieldbytes(i, "numby3")).unwrap() ); } asserteq!(sum, 55.0); } ```