| 378 | } |
| 379 | |
| 380 | fn upsert_kg_edge(&mut self, edge: &KgEdge) -> PristineResult<()> { |
| 381 | let edge_key = encode_edge_key(&edge.from_id, &edge.to_id, &edge.kind); |
| 382 | |
| 383 | let mut edges_table = self.txn.open_table(KG_EDGES)?; |
| 384 | let bytes = serde_json::to_vec(edge).map_err(|e| PristineError::Serialization { |
| 385 | message: e.to_string(), |
| 386 | })?; |
| 387 | edges_table.insert(edge_key.as_str(), bytes.as_slice())?; |
| 388 | drop(edges_table); |
| 389 | |
| 390 | // Update indexes |
| 391 | let mut from_table = self.txn.open_multimap_table(KG_EDGES_FROM)?; |
| 392 | from_table.insert(edge.from_id.as_str(), edge_key.as_str())?; |
| 393 | drop(from_table); |
| 394 | |
| 395 | let mut to_table = self.txn.open_multimap_table(KG_EDGES_TO)?; |
| 396 | to_table.insert(edge.to_id.as_str(), edge_key.as_str())?; |
| 397 | |
| 398 | Ok(()) |
| 399 | } |
| 400 | |
| 401 | fn del_kg_node(&mut self, id: &str) -> PristineResult<bool> { |
| 402 | // First delete all edges for this node |