| 399 | } |
| 400 | |
| 401 | fn del_kg_node(&mut self, id: &str) -> PristineResult<bool> { |
| 402 | // First delete all edges for this node |
| 403 | self.del_kg_edges_for_node(id)?; |
| 404 | |
| 405 | // Remove indexed ID/label/summary tokens before the node ID can be |
| 406 | // reused. Otherwise old metadata can reappear in search results. |
| 407 | self.remove_kg_fts_entries(id)?; |
| 408 | |
| 409 | // Delete the node |
| 410 | let mut table = match self.txn.open_table(KG_NODES) { |
| 411 | Ok(t) => t, |
| 412 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(false), |
| 413 | Err(e) => return Err(PristineError::from(e)), |
| 414 | }; |
| 415 | |
| 416 | let result = table.remove(id)?.is_some(); |
| 417 | drop(table); |
| 418 | Ok(result) |
| 419 | } |
| 420 | |
| 421 | fn del_kg_edge(&mut self, from_id: &str, to_id: &str, kind: &str) -> PristineResult<bool> { |
| 422 | let edge_key = encode_edge_key(from_id, to_id, kind); |