diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-01-15 02:57:31 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-01-15 02:57:31 +0100 |
| commit | c836b650eaf4ba33b1cfd2b475971b3ccc9f69b7 (patch) | |
| tree | 2ea722aff33252ff2e3662faee63cabb223339c3 /database/src/table.rs | |
| parent | 8c0ee6d17fe0dbd7748e7b60ff01a0e8f25faa51 (diff) | |
| download | jellything-c836b650eaf4ba33b1cfd2b475971b3ccc9f69b7.tar jellything-c836b650eaf4ba33b1cfd2b475971b3ccc9f69b7.tar.bz2 jellything-c836b650eaf4ba33b1cfd2b475971b3ccc9f69b7.tar.zst | |
new update_node_init
Diffstat (limited to 'database/src/table.rs')
| -rw-r--r-- | database/src/table.rs | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/database/src/table.rs b/database/src/table.rs index 1680016..27db06e 100644 --- a/database/src/table.rs +++ b/database/src/table.rs @@ -6,9 +6,10 @@ use crate::{ backends::{ReadTransaction, WriteTransaction}, + query::Query, sort::Index, }; -use anyhow::Result; +use anyhow::{Result, anyhow}; use jellyobject::ObjectBuffer; pub type TableNum = u64; @@ -68,4 +69,35 @@ impl Table { db.del(&self.key(row))?; Ok(true) } + pub fn update( + &self, + db: &mut dyn WriteTransaction, + row: RowNum, + entry: ObjectBuffer, + ) -> Result<()> { + let before = self.get(db, row)?.ok_or(anyhow!("row to update missing"))?; + let before = before.as_object(); + let after = entry.as_object(); + + db.set(&self.key(row), bytemuck::cast_slice(entry.0.as_slice()))?; + + for idx in &self.indices { + if !idx.compare(before, after) { + idx.remove(db, row, before)?; + idx.add(db, row, after)?; + } + } + + Ok(()) + } + pub fn query( + &self, + db: &dyn ReadTransaction, + query: Query, + ) -> Box<dyn Iterator<Item = RowNum>> { + todo!() + } + pub fn query_single(&self, db: &dyn ReadTransaction, query: Query) -> Option<RowNum> { + self.query(db, query).next() + } } |