pub(crate) mod memtable;
pub(crate) type ImmutableSegment = memtable::ImmutableMemTable;
pub(crate) fn prune_segments(
segments: &[&ImmutableSegment],
key_bounds: Option<&crate::query::scan::KeyBounds>,
read_ts: crate::mvcc::Timestamp,
) -> Vec<usize> {
segments
.iter()
.enumerate()
.filter_map(|(idx, segment)| {
if segment.entry_count() == 0 {
return None;
}
if let Some(bounds) = key_bounds {
let (Some(min_key), Some(max_key)) = (segment.min_key(), segment.max_key()) else {
return Some(idx);
};
if !bounds.overlaps(&min_key, &max_key) {
return None;
}
}
if let Some((min_commit_ts, _)) = segment.commit_ts_bounds()
&& min_commit_ts > read_ts
{
return None;
}
Some(idx)
})
.collect()
}