From c836b650eaf4ba33b1cfd2b475971b3ccc9f69b7 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 15 Jan 2026 02:57:31 +0100 Subject: new update_node_init --- database/src/table.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'database/src/table.rs') 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> { + todo!() + } + pub fn query_single(&self, db: &dyn ReadTransaction, query: Query) -> Option { + self.query(db, query).next() + } } -- cgit v1.3