mod access_projection;
mod group_distinct;
mod group_having;
mod group_model;
mod grouped_strategy;
mod logical;
mod pushdown;
pub(crate) use access_projection::{
AccessPlanProjection, project_access_plan, project_explain_access_path,
};
pub(in crate::db) use group_distinct::global_distinct_group_spec_for_semantic_aggregate;
pub(crate) use group_distinct::{
GroupDistinctAdmissibility, GroupDistinctPolicyReason, grouped_distinct_admissibility,
resolve_global_distinct_field_aggregate,
};
#[cfg(test)]
pub(crate) use group_distinct::{
global_distinct_field_aggregate_admissibility, is_global_distinct_field_aggregate_candidate,
};
pub(in crate::db) use group_having::grouped_cursor_policy_violation;
pub(crate) use group_having::{GroupedCursorPolicyViolation, grouped_having_compare_op_supported};
pub(in crate::db) use group_model::{
canonicalize_grouped_having_numeric_literal_for_field_kind, group_aggregate_spec_expr,
grouped_having_clause_expr_for_group,
};
#[cfg(test)]
pub(crate) use grouped_strategy::GroupedPlanAggregateFamily;
pub(crate) use grouped_strategy::{GroupedPlanFallbackReason, GroupedPlanStrategy};
pub(in crate::db) use grouped_strategy::{grouped_plan_aggregate_family, grouped_plan_strategy};
pub(in crate::db) use pushdown::{LogicalPushdownEligibility, derive_logical_pushdown_eligibility};