pub struct ExprOrdering {
pub expr: Arc<dyn PhysicalExpr>,
pub state: Option<SortProperties>,
pub children_states: Option<Vec<SortProperties>>,
}
Expand description
The ExprOrdering
struct is designed to aid in the determination of ordering (represented
by SortProperties
) for a given PhysicalExpr
. When analyzing the orderings
of a PhysicalExpr
, the process begins by assigning the ordering of its leaf nodes.
By propagating these leaf node orderings upwards in the expression tree, the overall
ordering of the entire PhysicalExpr
can be derived.
This struct holds the necessary state information for each expression in the PhysicalExpr
.
It encapsulates the orderings (state
) associated with the expression (expr
), and
orderings of the children expressions (children_states
). The ExprOrdering
of a parent
expression is determined based on the ExprOrdering
states of its children expressions.
Fields§
§expr: Arc<dyn PhysicalExpr>
§state: Option<SortProperties>
§children_states: Option<Vec<SortProperties>>
Implementations§
source§impl ExprOrdering
impl ExprOrdering
pub fn new(expr: Arc<dyn PhysicalExpr>) -> Self
pub fn children(&self) -> Vec<ExprOrdering>
pub fn new_with_children( children_states: Vec<SortProperties>, parent_expr: Arc<dyn PhysicalExpr> ) -> Self
Trait Implementations§
source§impl Debug for ExprOrdering
impl Debug for ExprOrdering
source§impl TreeNode for ExprOrdering
impl TreeNode for ExprOrdering
source§fn apply_children<F>(&self, op: &mut F) -> Result<VisitRecursion>where
F: FnMut(&Self) -> Result<VisitRecursion>,
fn apply_children<F>(&self, op: &mut F) -> Result<VisitRecursion>where F: FnMut(&Self) -> Result<VisitRecursion>,
Apply the closure
F
to the node’s childrensource§fn map_children<F>(self, transform: F) -> Result<Self>where
F: FnMut(Self) -> Result<Self>,
fn map_children<F>(self, transform: F) -> Result<Self>where F: FnMut(Self) -> Result<Self>,
Apply transform
F
to the node’s children, the transform F
might have a direction(Preorder or Postorder)source§fn apply<F>(&self, op: &mut F) -> Result<VisitRecursion, DataFusionError>where
F: FnMut(&Self) -> Result<VisitRecursion, DataFusionError>,
fn apply<F>(&self, op: &mut F) -> Result<VisitRecursion, DataFusionError>where F: FnMut(&Self) -> Result<VisitRecursion, DataFusionError>,
Use preorder to iterate the node on the tree so that we can
stop fast for some cases. Read more
source§fn visit<V>(&self, visitor: &mut V) -> Result<VisitRecursion, DataFusionError>where
V: TreeNodeVisitor<N = Self>,
fn visit<V>(&self, visitor: &mut V) -> Result<VisitRecursion, DataFusionError>where V: TreeNodeVisitor<N = Self>,
Visit the tree node using the given TreeNodeVisitor
It performs a depth first walk of an node and its children. Read more
source§fn transform<F>(self, op: &F) -> Result<Self, DataFusionError>where
F: Fn(Self) -> Result<Transformed<Self>, DataFusionError>,
fn transform<F>(self, op: &F) -> Result<Self, DataFusionError>where F: Fn(Self) -> Result<Transformed<Self>, DataFusionError>,
Convenience utils for writing optimizers rule: recursively apply the given
op
to the node tree.
When op
does not apply to a given node, it is left unchanged.
The default tree traversal direction is transform_up(Postorder Traversal).source§fn transform_down<F>(self, op: &F) -> Result<Self, DataFusionError>where
F: Fn(Self) -> Result<Transformed<Self>, DataFusionError>,
fn transform_down<F>(self, op: &F) -> Result<Self, DataFusionError>where F: Fn(Self) -> Result<Transformed<Self>, DataFusionError>,
Convenience utils for writing optimizers rule: recursively apply the given ‘op’ to the node and all of its
children(Preorder Traversal).
When the
op
does not apply to a given node, it is left unchanged.source§fn transform_up<F>(self, op: &F) -> Result<Self, DataFusionError>where
F: Fn(Self) -> Result<Transformed<Self>, DataFusionError>,
fn transform_up<F>(self, op: &F) -> Result<Self, DataFusionError>where F: Fn(Self) -> Result<Transformed<Self>, DataFusionError>,
Convenience utils for writing optimizers rule: recursively apply the given ‘op’ first to all of its
children and then itself(Postorder Traversal).
When the
op
does not apply to a given node, it is left unchanged.source§fn rewrite<R>(self, rewriter: &mut R) -> Result<Self, DataFusionError>where
R: TreeNodeRewriter<N = Self>,
fn rewrite<R>(self, rewriter: &mut R) -> Result<Self, DataFusionError>where R: TreeNodeRewriter<N = Self>,
Transform the tree node using the given TreeNodeRewriter
It performs a depth first walk of an node and its children. Read more
Auto Trait Implementations§
impl !RefUnwindSafe for ExprOrdering
impl Send for ExprOrdering
impl Sync for ExprOrdering
impl Unpin for ExprOrdering
impl !UnwindSafe for ExprOrdering
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more