diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-01-14 20:28:54 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-01-14 20:28:54 +0100 |
| commit | abf25f340c11111369b69c13c34d8fed9d4f0da8 (patch) | |
| tree | 1e913a4affe3303a17a222c8215a51424d3b71b6 /database/src/indices/reference.rs | |
| parent | b5ff460e938779be4eeab292c2cc1d436b93c137 (diff) | |
| download | jellything-abf25f340c11111369b69c13c34d8fed9d4f0da8.tar jellything-abf25f340c11111369b69c13c34d8fed9d4f0da8.tar.bz2 jellything-abf25f340c11111369b69c13c34d8fed9d4f0da8.tar.zst | |
db binning and sorts
Diffstat (limited to 'database/src/indices/reference.rs')
| -rw-r--r-- | database/src/indices/reference.rs | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/database/src/indices/reference.rs b/database/src/indices/reference.rs deleted file mode 100644 index 66efa24..0000000 --- a/database/src/indices/reference.rs +++ /dev/null @@ -1,71 +0,0 @@ -/* - This file is part of jellything (https://codeberg.org/metamuffin/jellything) - which is licensed under the GNU Affero General Public License (version 3); see /COPYING. - Copyright (C) 2026 metamuffin <metamuffin.org> -*/ - -use crate::{ - backends::{ReadTransaction, WriteTransaction}, - indices::Index, - prefix_iterator::PrefixIterator, - table::{RowNum, TableNum}, -}; -use anyhow::Result; -use bytemuck::{NoUninit, bytes_of}; -use jellycommon::jellyobject::{Object, TypedTag}; - -pub struct ReferenceIndex { - id: TableNum, - tag: TypedTag<RowNum>, -} - -#[repr(C)] -#[derive(NoUninit, Clone, Copy)] -pub struct Key(TableNum, RowNum, RowNum); - -impl ReferenceIndex { - pub fn new(id: TableNum, tag: TypedTag<RowNum>) -> Self { - Self { id, tag } - } - pub fn lookup<'a>( - &self, - db: &'a dyn ReadTransaction, - to: RowNum, - ) -> Result<PrefixIterator<'a>> { - let mut prefix = Vec::new(); - prefix.extend(self.id.to_be_bytes()); - prefix.extend(to.to_be_bytes()); - Ok(PrefixIterator { - inner: db.iter(&prefix, false)?, - prefix: prefix.into(), - }) - } -} -impl Index for ReferenceIndex { - fn add(&self, db: &mut dyn WriteTransaction, id: RowNum, val: Object) -> Result<()> { - for to in val.iter(self.tag) { - db.set(bytes_of(&Key(self.id, to, id)), &[])?; - } - Ok(()) - } - fn remove(&self, db: &mut dyn WriteTransaction, id: RowNum, val: Object) -> Result<()> { - for to in val.iter(self.tag) { - db.del(bytes_of(&Key(self.id, to, id)))?; - } - Ok(()) - } - fn compare(&self, before: Object, after: Object) -> bool { - let mut before = before.iter(self.tag); - let mut after = after.iter(self.tag); - loop { - let b = before.next(); - let a = after.next(); - if a.is_none() && b.is_none() { - break true; - } - if a != b { - break false; - } - } - } -} |