aboutsummaryrefslogtreecommitdiff
path: root/database/src/table.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-01-15 02:57:31 +0100
committermetamuffin <metamuffin@disroot.org>2026-01-15 02:57:31 +0100
commitc836b650eaf4ba33b1cfd2b475971b3ccc9f69b7 (patch)
tree2ea722aff33252ff2e3662faee63cabb223339c3 /database/src/table.rs
parent8c0ee6d17fe0dbd7748e7b60ff01a0e8f25faa51 (diff)
downloadjellything-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.rs34
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()
+ }
}