fn split_acc_projections(
        &self,
        acc_projections: Vec<Expr>,
        down_schema: &Schema,
    ) -> (Vec<Expr>, Vec<Expr>, HashSet<Arc<String>, RandomState>) {
        // If node above has as many columns as the projection there is nothing to pushdown.
        if down_schema.fields().len() == acc_projections.len() {
            let local_projections = acc_projections;

            (
                vec![],
                local_projections,
                HashSet::with_hasher(RandomState::default()),
            )
        } else {
            let (acc_projections, local_projections) = acc_projections
                .into_iter()
                .partition(|expr| check_down_node(expr, down_schema));
            let mut names = init_set();
            for proj in &acc_projections {
                let name = expr_to_root_column(proj).unwrap();
                names.insert(name);
            }
            (acc_projections, local_projections, names)
        }
    }
/// split in a projection vec that can be pushed down and a projection vec that should be used
/// in this node
///
/// # Returns
/// accumulated_projections, local_projections, accumulated_names
split in a projection vec that can be pushed down and a projection vec that should be used
in this node
split in a projection vec that can be pushed down and a projection vec that should be used in this node
fn split_acc_projections(
        &self,
        acc_projections: Vec<Expr>,
        down_schema: &Schema,
    ) -> (Vec<Expr>, Vec<Expr>, HashSet<Arc<String>, RandomState>) {
        // If node above has as many columns as the projection there is nothing to pushdown.
        if down_schema.fields().len() == acc_projections.len() {
            let local_projections = acc_projections;
            (
                vec![],
                local_projections,
                HashSet::with_hasher(RandomState::default()),
            )
        } else {
            let (acc_projections, local_projections) = acc_projections
                .into_iter()
                .partition(|expr| check_down_node(expr, down_schema));
            let mut names = init_set();
            for proj in &acc_projections {
                let name = expr_to_root_column(proj).unwrap();
                names.insert(name);
            }
            (acc_projections, local_projections, names)
        }
    }
fn split_acc_projections ( & self , acc_projections : Vec < Expr > , down_schema : & Schema , ) -> ( Vec < Expr > , Vec < Expr > , HashSet < Arc < String > , RandomState > ) { // If node above has as many columns as the projection there is nothing to pushdown. if down_schema . fields ( ) . len ( ) == acc_projections . len ( ) { let local_projections = acc_projections ; ( vec ! [ ] , local_projections , HashSet :: with_hasher ( RandomState :: default ( ) ) , ) } else { let ( acc_projections , local_projections ) = acc_projections . into_iter ( ) . partition ( | expr | check_down_node ( expr , down_schema ) ) ; let mut names = init_set ( ) ; for proj in & acc_projections { let name = expr_to_root_column ( proj ) . unwrap ( ) ; names . insert ( name ) ; } ( acc_projections , local_projections , names ) } }
split in a projection vec that can be pushed down and a projection vec that should be used
in this node
split in a projection vec that can be pushed down and a projection vec that should be used in this node
&self
acc_projections
Vec<Expr>
down_schema
&Schema
None
&self
acc_projections
Vec<Expr>
down_schema
&Schema