aboutsummaryrefslogtreecommitdiff
path: root/database/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-02-11 13:25:47 +0100
committermetamuffin <metamuffin@disroot.org>2026-02-11 13:25:47 +0100
commitb4990da7b5536e6456bf4271db8d6bafb32fe132 (patch)
tree43fe8a9ad345fa0a5bc00090b22488b17184603a /database/src
parentf035474090d3c82f50c3860cbafd6f60b8af36e8 (diff)
downloadjellything-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.rs114
-rw-r--r--database/src/kv/tests.rs142
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(())
+}