use crate::{
db::{
executor::{ContinuationCapabilities, ExecutionKernel},
query::plan::{AccessPlannedQuery, PlannerRouteProfile},
},
model::entity::EntityModel,
};
use crate::db::executor::route::{
AccessWindow, IndexRangeLimitSpec, RouteCapabilities, RouteContinuationPlan, TopNSeekSpec,
capability::derive_budget_safety_flags_for_model, secondary_order_contract_active,
};
pub(in crate::db::executor::route) fn assess_index_range_limit_pushdown_for_model(
model: &EntityModel,
plan: &AccessPlannedQuery,
continuation: RouteContinuationPlan,
probe_fetch_hint: Option<usize>,
capabilities: RouteCapabilities,
) -> Option<IndexRangeLimitSpec> {
let (access_window, continuation_capabilities) = continuation_hint_inputs(continuation);
let (has_residual_filter, _, _) = derive_budget_safety_flags_for_model(model, plan);
capabilities
.index_range_limit_pushdown_shape_supported
.then_some(())?;
continuation_capabilities
.index_range_limit_pushdown_allowed()
.then_some(())?;
let fetch = probe_fetch_hint.or_else(|| bounded_window_fetch_hint(access_window))?;
(!has_residual_filter || residual_predicate_pushdown_fetch_is_safe(fetch))
.then_some(IndexRangeLimitSpec { fetch })
}
pub(in crate::db::executor::route) fn load_scan_budget_hint(
plan: &AccessPlannedQuery,
continuation: RouteContinuationPlan,
capabilities: RouteCapabilities,
) -> Option<usize> {
let (access_window, continuation_capabilities) = continuation_hint_inputs(continuation);
let fetch_hint = bounded_window_fetch_hint(access_window);
plan.access_strategy().load_window_early_stop_hint(
continuation_capabilities.applied(),
capabilities.load_order_route_contract,
fetch_hint,
)
}
pub(in crate::db::executor::route) fn top_n_seek_spec_for_model(
plan: &AccessPlannedQuery,
planner_route_profile: &PlannerRouteProfile,
continuation: RouteContinuationPlan,
capabilities: RouteCapabilities,
) -> Option<TopNSeekSpec> {
let (access_window, continuation_capabilities) = continuation_hint_inputs(continuation);
let logical = plan.scalar_plan();
let has_order = logical
.order
.as_ref()
.is_some_and(|order| !order.fields.is_empty());
(logical.mode.is_load() && has_order).then_some(())?;
secondary_order_contract_active(planner_route_profile.logical_pushdown_eligibility())
.then_some(())?;
planner_route_profile.secondary_order_contract()?;
capabilities
.load_order_route_contract
.allows_top_n_seek()
.then_some(())?;
(!continuation_capabilities.applied()).then_some(())?;
bounded_window_fetch_hint(access_window).map(TopNSeekSpec::new)
}
const fn continuation_hint_inputs(
continuation: RouteContinuationPlan,
) -> (AccessWindow, ContinuationCapabilities) {
(
*continuation.fetch_access_window(),
continuation.capabilities(),
)
}
pub(in crate::db::executor::route) fn bounded_probe_hint_is_safe(
plan: &AccessPlannedQuery,
) -> bool {
let offset =
usize::try_from(ExecutionKernel::effective_page_offset(plan, None)).unwrap_or(usize::MAX);
let distinct_enabled = plan.scalar_plan().distinct;
!(distinct_enabled && offset > 0)
}
pub(in crate::db::executor::route) const fn residual_predicate_pushdown_fetch_is_safe(
fetch: usize,
) -> bool {
fetch <= residual_predicate_pushdown_fetch_cap()
}
pub(in crate::db::executor) const fn residual_predicate_pushdown_fetch_cap() -> usize {
256
}
pub(in crate::db::executor::route) const fn bounded_window_fetch_hint(
access_window: AccessWindow,
) -> Option<usize> {
if access_window.is_zero_window() {
return Some(0);
}
access_window.fetch_limit()
}