| 61 | } |
| 62 | |
| 63 | fn get_kg_edges_to(&self, node_id: &str) -> PristineResult<Vec<KgEdge>> { |
| 64 | let to_table = match self.txn.open_multimap_table(KG_EDGES_TO) { |
| 65 | Ok(t) => t, |
| 66 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 67 | Err(e) => return Err(PristineError::from(e)), |
| 68 | }; |
| 69 | let edges_table = match self.txn.open_table(KG_EDGES) { |
| 70 | Ok(t) => t, |
| 71 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 72 | Err(e) => return Err(PristineError::from(e)), |
| 73 | }; |
| 74 | |
| 75 | let mut edges = Vec::new(); |
| 76 | let iter = to_table.get(node_id)?; |
| 77 | for result in iter { |
| 78 | let edge_key_guard: redb::AccessGuard<'_, &str> = result?; |
| 79 | let edge_key: &str = edge_key_guard.value(); |
| 80 | if let Some(edge_data) = edges_table.get(edge_key)? { |
| 81 | let bytes: &[u8] = edge_data.value(); |
| 82 | let edge: KgEdge = |
| 83 | serde_json::from_slice(bytes).map_err(|e| PristineError::Serialization { |
| 84 | message: e.to_string(), |
| 85 | })?; |
| 86 | edges.push(edge); |
| 87 | } |
| 88 | } |
| 89 | Ok(edges) |
| 90 | } |
| 91 | |
| 92 | fn kg_fts_search(&self, query: &str, limit: usize) -> PristineResult<Vec<KgNode>> { |
| 93 | let fts_table = match self.txn.open_multimap_table(KG_FTS) { |