risingwave_frontend/optimizer/plan_visitor/
locality_provider_counter.rs1use super::{DefaultBehavior, LogicalPlanVisitor, Merge};
16use crate::optimizer::plan_node::{LogicalLocalityProvider, LogicalPlanRef, PlanTreeNodeUnary};
17use crate::optimizer::plan_visitor::PlanVisitor;
18
19#[derive(Debug, Clone, Default)]
20pub struct LocalityProviderCounter {}
21
22impl LocalityProviderCounter {
23 pub fn count(plan: LogicalPlanRef) -> usize {
24 let mut locality_provider_counter = Self::default();
25 locality_provider_counter.visit(plan)
26 }
27}
28
29impl LogicalPlanVisitor for LocalityProviderCounter {
30 type Result = usize;
31
32 type DefaultBehavior = impl DefaultBehavior<Self::Result>;
33
34 fn default_behavior() -> Self::DefaultBehavior {
35 Merge(|a: usize, b| a + b)
36 }
37
38 fn visit_logical_locality_provider(
39 &mut self,
40 locality_provider: &LogicalLocalityProvider,
41 ) -> Self::Result {
42 1 + self.visit(locality_provider.input())
43 }
44}