diff options
Diffstat (limited to 'database/src/kv/mod.rs')
| -rw-r--r-- | database/src/kv/mod.rs | 114 |
1 files changed, 4 insertions, 110 deletions
diff --git a/database/src/kv/mod.rs b/database/src/kv/mod.rs index 903fc46..87af3fa 100644 --- a/database/src/kv/mod.rs +++ b/database/src/kv/mod.rs @@ -11,6 +11,8 @@ pub mod index_key; pub mod merge_iterator; pub mod prefix_iterator; pub mod sort; +#[cfg(test)] +pub mod tests; use std::borrow::Cow; @@ -181,7 +183,8 @@ fn list_indices(txn: &dyn jellykv::Transaction) -> Result<Vec<(SubtreeNum, Index for i in indices { let i = i?; let ik = IndexKey::from_bytes(&i); - let is = read_counter(txn, &i, 0)? as SubtreeNum; + let is_raw = jellykv::Transaction::get(txn, &i)?.unwrap(); + let is = SubtreeNum::from_be_bytes(is_raw.try_into().unwrap()); out.push((is, ik)); } Ok(out) @@ -196,112 +199,3 @@ fn row_key(row: RowNum) -> Vec<u8> { fn inv_row_key(k: &[u8]) -> RowNum { RowNum::from_be_bytes(k[4..12].try_into().unwrap()) } - -#[cfg(test)] -mod test { - use crate::{ - Database, Filter, Query, Sort, - test_shared::{AGE, NAME, new_alice, new_bob, new_charlie}, - }; - use anyhow::Result; - use jellyobject::Path; - - #[test] - pub fn insert_get() -> Result<()> { - let db = jellykv::memory::new(); - - let mut bob_row = 0; - db.transaction(&mut |txn| { - bob_row = txn.insert(new_bob())?; - Ok(()) - })?; - - let mut bob = None; - db.transaction(&mut |txn| { - bob = txn.get(bob_row)?; - Ok(()) - })?; - - assert_eq!(bob.unwrap().as_object().get(NAME).unwrap(), "Bob"); - Ok(()) - } - - #[test] - pub fn update() -> Result<()> { - let db = jellykv::memory::new(); - - let mut bob_row = 0; - let mut bob = None; - - db.transaction(&mut |txn| { - bob_row = txn.insert(new_bob())?; - Ok(()) - })?; - db.transaction(&mut |txn| { - let better_bob = new_bob().as_object().insert(NAME, "Better Bob"); - txn.update(bob_row, better_bob)?; - Ok(()) - })?; - db.transaction(&mut |txn| { - bob = txn.get(bob_row)?; - Ok(()) - })?; - - assert_eq!(bob.unwrap().as_object().get(NAME).unwrap(), "Better Bob"); - Ok(()) - } - - #[test] - pub fn query_match_int() -> Result<()> { - let db = jellykv::memory::new(); - - let mut rows = [0, 0, 0]; - let mut result = None; - - db.transaction(&mut |txn| { - rows = [ - txn.insert(new_bob())?, - txn.insert(new_alice())?, - txn.insert(new_charlie())?, - ]; - Ok(()) - })?; - db.transaction(&mut |txn| { - result = txn.query_single(Query { - filter: Filter::Match(Path(vec![AGE.0]), 35_u32.to_be_bytes().to_vec()), - sort: Sort::None, - })?; - Ok(()) - })?; - - assert_eq!(result, Some(rows[0])); - Ok(()) - } - - #[test] - pub fn query_match_str() -> Result<()> { - let db = jellykv::memory::new(); - - let mut rows = [0, 0, 0]; - let mut result = None; - - db.transaction(&mut |txn| { - rows = [ - txn.insert(new_bob())?, - txn.insert(new_alice())?, - txn.insert(new_charlie())?, - ]; - Ok(()) - })?; - db.transaction(&mut |txn| { - result = txn.query_single(Query { - filter: Filter::Match(Path(vec![NAME.0]), "Alice".as_bytes().to_vec()), - sort: Sort::None, - })?; - Ok(()) - })?; - - assert_eq!(result, Some(rows[1])); - Ok(()) - } -} |