| 205 | } |
| 206 | |
| 207 | fn get_kg_edges_to(&self, node_id: &str) -> PristineResult<Vec<KgEdge>> { |
| 208 | let to_table = match self.txn.open_multimap_table(KG_EDGES_TO) { |
| 209 | Ok(t) => t, |
| 210 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 211 | Err(e) => return Err(PristineError::from(e)), |
| 212 | }; |
| 213 | let edges_table = match self.txn.open_table(KG_EDGES) { |
| 214 | Ok(t) => t, |
| 215 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 216 | Err(e) => return Err(PristineError::from(e)), |
| 217 | }; |
| 218 | |
| 219 | let mut edges = Vec::new(); |
| 220 | let iter = to_table.get(node_id)?; |
| 221 | for result in iter { |
| 222 | let edge_key_guard: redb::AccessGuard<'_, &str> = result?; |
| 223 | let edge_key: &str = edge_key_guard.value(); |
| 224 | if let Some(edge_data) = edges_table.get(edge_key)? { |
| 225 | let bytes: &[u8] = edge_data.value(); |
| 226 | let edge: KgEdge = |
| 227 | serde_json::from_slice(bytes).map_err(|e| PristineError::Serialization { |
| 228 | message: e.to_string(), |
| 229 | })?; |
| 230 | edges.push(edge); |
| 231 | } |
| 232 | } |
| 233 | Ok(edges) |
| 234 | } |
| 235 | |
| 236 | fn kg_fts_search(&self, query: &str, limit: usize) -> PristineResult<Vec<KgNode>> { |
| 237 | let fts_table = match self.txn.open_multimap_table(KG_FTS) { |