| 226 | } |
| 227 | |
| 228 | fn upsert_kg_edge(&mut self, edge: &KgEdge) -> PristineResult<()> { |
| 229 | let edge_key = encode_edge_key(&edge.from_id, &edge.to_id, &edge.kind); |
| 230 | |
| 231 | let mut edges_table = self.txn.open_table(KG_EDGES)?; |
| 232 | let bytes = serde_json::to_vec(edge).map_err(|e| PristineError::Serialization { |
| 233 | message: e.to_string(), |
| 234 | })?; |
| 235 | edges_table.insert(edge_key.as_str(), bytes.as_slice())?; |
| 236 | drop(edges_table); |
| 237 | |
| 238 | // Update indexes |
| 239 | let mut from_table = self.txn.open_multimap_table(KG_EDGES_FROM)?; |
| 240 | from_table.insert(edge.from_id.as_str(), edge_key.as_str())?; |
| 241 | drop(from_table); |
| 242 | |
| 243 | let mut to_table = self.txn.open_multimap_table(KG_EDGES_TO)?; |
| 244 | to_table.insert(edge.to_id.as_str(), edge_key.as_str())?; |
| 245 | |
| 246 | Ok(()) |
| 247 | } |
| 248 | |
| 249 | fn del_kg_node(&mut self, id: &str) -> PristineResult<bool> { |
| 250 | // First delete all edges for this node |