use crate::db::query::plan::{
OrderSpec, QueryMode,
validate::PolicyPlanError,
validate::plan_shape::{has_explicit_order, validate_order_shape},
};
pub(in crate::db::query) fn validate_intent_plan_shape(
mode: QueryMode,
order: Option<&OrderSpec>,
grouped: bool,
) -> Result<(), PolicyPlanError> {
validate_order_shape(order)?;
let is_delete_mode = mode.is_delete();
if is_delete_mode && grouped {
return Err(PolicyPlanError::delete_plan_with_grouping());
}
if is_delete_mode
&& matches!(&mode, QueryMode::Delete(spec) if spec.limit.is_some() || spec.offset() > 0)
&& !has_explicit_order(order)
{
return Err(PolicyPlanError::delete_window_requires_order());
}
Ok(())
}