pub trait ExecutionPlanVisitor {
type Error;
// Required method
fn pre_visit(
&mut self,
plan: &dyn ExecutionPlan,
) -> Result<bool, Self::Error>;
// Provided method
fn post_visit(
&mut self,
_plan: &dyn ExecutionPlan,
) -> Result<bool, Self::Error> { ... }
}
Expand description
Trait that implements the Visitor
pattern for a
depth first walk of ExecutionPlan
nodes. pre_visit
is called
before any children are visited, and then post_visit
is called
after all children have been visited.
To use, define a struct that implements this trait and then invoke [‘accept’].
For example, for an execution plan that looks like:
ProjectionExec: id
FilterExec: state = CO
CsvExec:
The sequence of visit operations would be:
visitor.pre_visit(ProjectionExec)
visitor.pre_visit(FilterExec)
visitor.pre_visit(CsvExec)
visitor.post_visit(CsvExec)
visitor.post_visit(FilterExec)
visitor.post_visit(ProjectionExec)
Required Associated Types§
Required Methods§
sourcefn pre_visit(&mut self, plan: &dyn ExecutionPlan) -> Result<bool, Self::Error>
fn pre_visit(&mut self, plan: &dyn ExecutionPlan) -> Result<bool, Self::Error>
Invoked on an ExecutionPlan
plan before any of its child
inputs have been visited. If Ok(true) is returned, the
recursion continues. If Err(..) or Ok(false) are returned, the
recursion stops immediately and the error, if any, is returned
to accept
Provided Methods§
sourcefn post_visit(&mut self, _plan: &dyn ExecutionPlan) -> Result<bool, Self::Error>
fn post_visit(&mut self, _plan: &dyn ExecutionPlan) -> Result<bool, Self::Error>
Invoked on an ExecutionPlan
plan after all of its child
inputs have been visited. The return value is handled the same
as the return value of pre_visit
. The provided default
implementation returns Ok(true)
.