diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-11 13:25:47 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-11 13:25:47 +0100 |
| commit | b4990da7b5536e6456bf4271db8d6bafb32fe132 (patch) | |
| tree | 43fe8a9ad345fa0a5bc00090b22488b17184603a /database/src | |
| parent | f035474090d3c82f50c3860cbafd6f60b8af36e8 (diff) | |
| download | jellything-b4990da7b5536e6456bf4271db8d6bafb32fe132.tar jellything-b4990da7b5536e6456bf4271db8d6bafb32fe132.tar.bz2 jellything-b4990da7b5536e6456bf4271db8d6bafb32fe132.tar.zst | |
fix list_index bug; move tests
Diffstat (limited to 'database/src')
| -rw-r--r-- | database/src/kv/mod.rs | 114 | ||||
| -rw-r--r-- | database/src/kv/tests.rs | 142 |
2 files changed, 146 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(()) - } -} diff --git a/database/src/kv/tests.rs b/database/src/kv/tests.rs new file mode 100644 index 0000000..5b587ed --- /dev/null +++ b/database/src/kv/tests.rs @@ -0,0 +1,142 @@ +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(()) +} + +#[test] +pub fn query_match_str_after() -> Result<()> { + let db = jellykv::memory::new(); + + let mut rows = [0, 0, 0]; + let mut result = None; + + 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, 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(()) +} |