| 360 | } |
| 361 | |
| 362 | fn upsert_kg_edge(&mut self, edge: &KgEdge) -> PristineResult<()> { |
| 363 | let edge_key = encode_edge_key(&edge.from_id, &edge.to_id, &edge.kind); |
| 364 | |
| 365 | let mut edges_table = self.txn.open_table(KG_EDGES)?; |
| 366 | let bytes = serde_json::to_vec(edge).map_err(|e| PristineError::Serialization { |
| 367 | message: e.to_string(), |
| 368 | })?; |
| 369 | edges_table.insert(edge_key.as_str(), bytes.as_slice())?; |
| 370 | drop(edges_table); |
| 371 | |
| 372 | // Update indexes |
| 373 | let mut from_table = self.txn.open_multimap_table(KG_EDGES_FROM)?; |
| 374 | from_table.insert(edge.from_id.as_str(), edge_key.as_str())?; |
| 375 | drop(from_table); |
| 376 | |
| 377 | let mut to_table = self.txn.open_multimap_table(KG_EDGES_TO)?; |
| 378 | to_table.insert(edge.to_id.as_str(), edge_key.as_str())?; |
| 379 | |
| 380 | Ok(()) |
| 381 | } |
| 382 | |
| 383 | fn del_kg_node(&mut self, id: &str) -> PristineResult<bool> { |
| 384 | // First delete all edges for this node |