(&self, path: &str)
| 1139 | } |
| 1140 | |
| 1141 | fn list_embeddings(&self, path: &str) -> PristineResult<Vec<(u32, EmbeddingRecord)>> { |
| 1142 | let table = match self.txn.open_table(EMBEDDINGS) { |
| 1143 | Ok(table) => table, |
| 1144 | Err(redb::TableError::TableDoesNotExist(_)) => return Ok(Vec::new()), |
| 1145 | Err(e) => return Err(PristineError::from(e)), |
| 1146 | }; |
| 1147 | |
| 1148 | let mut results = Vec::new(); |
| 1149 | let prefix = format!("{}\0", path); |
| 1150 | |
| 1151 | let iter = table.range::<&str>(prefix.as_str()..)?; |
| 1152 | |
| 1153 | for item in iter { |
| 1154 | let (key_guard, value_guard) = item?; |
| 1155 | let key_str = key_guard.value(); |
| 1156 | |
| 1157 | if !key_str.starts_with(&prefix) { |
| 1158 | break; |
| 1159 | } |
| 1160 | |
| 1161 | let (_, chunk_idx) = match decode_embedding_key(key_str) { |
| 1162 | Some(decoded) => decoded, |
| 1163 | None => continue, |
| 1164 | }; |
| 1165 | |
| 1166 | let bytes = value_guard.value(); |
| 1167 | let record: EmbeddingRecord = |
| 1168 | postcard::from_bytes(bytes).map_err(|e| PristineError::Serialization { |
| 1169 | message: format!( |
| 1170 | "failed to deserialize EmbeddingRecord at '{}': {}", |
| 1171 | key_str, e |
| 1172 | ), |
| 1173 | })?; |
| 1174 | results.push((chunk_idx, record)); |
| 1175 | } |
| 1176 | |
| 1177 | Ok(results) |
| 1178 | } |
| 1179 | |
| 1180 | fn count_embeddings(&self) -> PristineResult<usize> { |
| 1181 | let table = match self.txn.open_table(EMBEDDINGS) { |
nothing calls this directly
no test coverage detected