use nodedb_types::SurrogateBitmap;
use crate::bridge::envelope::PhysicalPlan;
use crate::bridge::physical_plan::DocumentOp;
use crate::data::executor::core_loop::CoreLoop;
use crate::data::executor::task::ExecutionTask;
use super::materialize::collect_surrogates;
pub(crate) fn run_bitmap_subplan(
core: &mut CoreLoop,
task: &ExecutionTask,
sub_plan: &PhysicalPlan,
) -> SurrogateBitmap {
let sub_response = core.execute_plan(task, sub_plan);
let docs = crate::data::executor::response_codec::decode_response_to_docs(&sub_response)
.unwrap_or_default();
collect_surrogates(&docs)
}
pub(crate) fn prefiltered_scan_plan(
collection: &str,
limit: usize,
bitmap: SurrogateBitmap,
) -> Option<PhysicalPlan> {
if bitmap.is_empty() {
return None;
}
Some(PhysicalPlan::Document(DocumentOp::Scan {
collection: collection.to_string(),
limit,
offset: 0,
sort_keys: Vec::new(),
filters: Vec::new(),
distinct: false,
projection: Vec::new(),
computed_columns: Vec::new(),
window_functions: Vec::new(),
system_as_of_ms: None,
valid_at_ms: None,
prefilter: Some(bitmap),
}))
}