Like `scan_tiles` but also returns the tile's `hilbert_prefix` so callers can apply per-shard Hilbert-range filters (distributed agg).
(
&self,
pred: &MbrQueryPredicate,
)
| 215 | /// Like `scan_tiles` but also returns the tile's `hilbert_prefix` so |
| 216 | /// callers can apply per-shard Hilbert-range filters (distributed agg). |
| 217 | pub fn scan_tiles_with_hilbert_prefix( |
| 218 | &self, |
| 219 | pred: &MbrQueryPredicate, |
| 220 | ) -> Result<Vec<(u64, TilePayload)>, nodedb_array::ArrayError> { |
| 221 | let mut out = Vec::new(); |
| 222 | for h in self.segments.values() { |
| 223 | let reader = h.reader(); |
| 224 | for idx in h.rtree().query(pred) { |
| 225 | let hilbert_prefix = reader |
| 226 | .tiles() |
| 227 | .get(idx) |
| 228 | .map(|e| e.tile_id.hilbert_prefix) |
| 229 | .unwrap_or(0); |
| 230 | out.push((hilbert_prefix, reader.read_tile(idx)?)); |
| 231 | } |
| 232 | } |
| 233 | for (tile_id, buf) in self.memtable.iter() { |
| 234 | if buf.entry_count() == 0 { |
| 235 | continue; |
| 236 | } |
| 237 | out.push(( |
| 238 | tile_id.hilbert_prefix, |
| 239 | TilePayload::Sparse(buf.materialise(&self.schema)?), |
| 240 | )); |
| 241 | } |
| 242 | Ok(out) |
| 243 | } |
| 244 | |
| 245 | /// Bitemporal scan: resolve the ceiling for every cell coordinate at the |
| 246 | /// given `system_as_of` and optional `valid_at_ms` point. |
no test coverage detected