diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-27 20:56:20 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-27 20:56:20 +0100 |
| commit | 7930d543a2aa68d4ad2958605827d7eb1baa91f8 (patch) | |
| tree | fe59d1f549e303a96b78d3e925d75abb70b73af0 /database/src/kv | |
| parent | c05bfcc2775f0e11db6e856bfcf06d0419c35d54 (diff) | |
| download | jellything-7930d543a2aa68d4ad2958605827d7eb1baa91f8.tar jellything-7930d543a2aa68d4ad2958605827d7eb1baa91f8.tar.bz2 jellything-7930d543a2aa68d4ad2958605827d7eb1baa91f8.tar.zst | |
reimplement Object as slice type
Diffstat (limited to 'database/src/kv')
| -rw-r--r-- | database/src/kv/binning.rs | 4 | ||||
| -rw-r--r-- | database/src/kv/index.rs | 2 | ||||
| -rw-r--r-- | database/src/kv/mod.rs | 43 | ||||
| -rw-r--r-- | database/src/kv/tests.rs | 6 |
4 files changed, 23 insertions, 32 deletions
diff --git a/database/src/kv/binning.rs b/database/src/kv/binning.rs index 253bb5c..d9b173d 100644 --- a/database/src/kv/binning.rs +++ b/database/src/kv/binning.rs @@ -22,14 +22,14 @@ impl Binning { comps.sort(); Self(comps) } - pub fn apply(&self, ob: Object<'_>, keys: &mut Vec<Vec<u8>>) { + pub fn apply(&self, ob: &Object, keys: &mut Vec<Vec<u8>>) { for f in &self.0 { f.apply(ob, keys); } } } impl BinningComponent { - pub fn apply(&self, ob: Object<'_>, keys: &mut Vec<Vec<u8>>) { + pub fn apply(&self, ob: &Object, keys: &mut Vec<Vec<u8>>) { match self { BinningComponent::Has(path) => { if path.get_matching_value(ob).is_none() { diff --git a/database/src/kv/index.rs b/database/src/kv/index.rs index ee14d77..ba5784b 100644 --- a/database/src/kv/index.rs +++ b/database/src/kv/index.rs @@ -22,7 +22,7 @@ pub fn update_index( is: SubtreeNum, ik: &IndexKey, row: RowNum, - ob: Object<'_>, + ob: &Object, remove: bool, ) -> Result<()> { let mut ks = vec![is.to_be_bytes().to_vec()]; diff --git a/database/src/kv/mod.rs b/database/src/kv/mod.rs index 837aa51..784cbef 100644 --- a/database/src/kv/mod.rs +++ b/database/src/kv/mod.rs @@ -24,7 +24,7 @@ use crate::{ }, }; use anyhow::{Result, anyhow}; -use jellyobject::ObjectBuffer; +use jellyobject::{Object, vec_to_ob, vec_u8_to_u32}; use log::{debug, info}; use std::{borrow::Cow, fmt::Write}; @@ -44,22 +44,17 @@ impl<T: jellykv::Store> Database for T { } impl Transaction for &mut dyn jellykv::Transaction { - fn insert(&mut self, entry: ObjectBuffer) -> Result<RowNum> { + fn insert(&mut self, entry: Box<Object>) -> Result<RowNum> { debug!("insert {entry:?}"); let mut id_counter = read_counter(*self, &T_ROW_COUNTER.to_be_bytes(), 0)?; let row = id_counter; id_counter += 1; write_counter(*self, &T_ROW_COUNTER.to_be_bytes(), id_counter)?; - jellykv::Transaction::set( - *self, - &row_key(row), - bytemuck::cast_slice(entry.0.as_slice()), - )?; + jellykv::Transaction::set(*self, &row_key(row), bytemuck::cast_slice(entry.export()))?; - let ob = entry.as_object(); for (is, ik) in list_indices(*self)? { - update_index(*self, is, &ik, row, ob, false)?; + update_index(*self, is, &ik, row, &entry, false)?; } Ok(row) @@ -67,34 +62,28 @@ impl Transaction for &mut dyn jellykv::Transaction { fn remove(&mut self, row: RowNum) -> Result<()> { debug!("remove {row}"); let entry = self.get(row)?.ok_or(anyhow!("row did not exist"))?; - let ob = entry.as_object(); for (is, ik) in list_indices(*self)? { - update_index(*self, is, &ik, row, ob, true)?; + update_index(*self, is, &ik, row, &entry, true)?; } jellykv::Transaction::del(*self, &row_key(row)) } - fn update(&mut self, row: RowNum, entry: ObjectBuffer) -> Result<()> { + fn update(&mut self, row: RowNum, entry: Box<Object>) -> Result<()> { debug!("update {row}"); let before = self.get(row)?.ok_or(anyhow!("row to update missing"))?; - let before = before.as_object(); - let after = entry.as_object(); - - jellykv::Transaction::set( - *self, - &row_key(row), - bytemuck::cast_slice(entry.0.as_slice()), - )?; + jellykv::Transaction::set(*self, &row_key(row), bytemuck::cast_slice(entry.export()))?; for (is, ik) in list_indices(*self)? { - update_index(*self, is, &ik, row, before, true)?; - update_index(*self, is, &ik, row, after, false)?; + update_index(*self, is, &ik, row, &before, true)?; + update_index(*self, is, &ik, row, &entry, false)?; } Ok(()) } - fn get(&self, row: RowNum) -> Result<Option<ObjectBuffer>> { - Ok(jellykv::Transaction::get(*self, &row_key(row))?.map(ObjectBuffer::from)) + fn get(&self, row: RowNum) -> Result<Option<Box<Object>>> { + Ok(jellykv::Transaction::get(*self, &row_key(row))? + .map(vec_u8_to_u32) + .map(vec_to_ob)) } fn query<'a>( @@ -181,8 +170,10 @@ fn create_index(txn: &mut dyn jellykv::Transaction, is: SubtreeNum, ik: &IndexKe for rowkey in rowkeys { let row = inv_row_key(&rowkey); - let buf = ObjectBuffer::from(jellykv::Transaction::get(txn, &rowkey)?.unwrap()); - update_index(txn, is, ik, row, buf.as_object(), false)?; + let buf = vec_to_ob(vec_u8_to_u32( + jellykv::Transaction::get(txn, &rowkey)?.unwrap(), + )); + update_index(txn, is, ik, row, &buf, false)?; } Ok(()) diff --git a/database/src/kv/tests.rs b/database/src/kv/tests.rs index e3e6b3b..5e65b4b 100644 --- a/database/src/kv/tests.rs +++ b/database/src/kv/tests.rs @@ -21,7 +21,7 @@ pub fn insert_get() -> Result<()> { Ok(()) })?; - assert_eq!(bob.unwrap().as_object().get(NAME).unwrap(), "Bob"); + assert_eq!(bob.unwrap().get(NAME).unwrap(), "Bob"); Ok(()) } @@ -37,7 +37,7 @@ pub fn update() -> Result<()> { Ok(()) })?; db.transaction(&mut |txn| { - let better_bob = new_bob().as_object().insert(NAME, "Better Bob"); + let better_bob = new_bob().insert(NAME, "Better Bob"); txn.update(bob_row, better_bob)?; Ok(()) })?; @@ -46,7 +46,7 @@ pub fn update() -> Result<()> { Ok(()) })?; - assert_eq!(bob.unwrap().as_object().get(NAME).unwrap(), "Better Bob"); + assert_eq!(bob.unwrap().get(NAME).unwrap(), "Better Bob"); Ok(()) } |