fn add_columns(
        &mut self,
        new_columns: std::ops::Range<usize>,
        bound_expressions: &[MirScalarExpr],
    ) -> JoinClosure {
        // Remove each element of `bound_expressions` from `equivalences`, so that we
        // avoid redundant predicate work. This removal also paves the way for
        // more precise "demand" information going forward.
        for equivalence in self.equivalences.iter_mut() {
            equivalence.retain(|expr| !bound_expressions.contains(expr));
        }
        self.equivalences.retain(|e| e.len() > 1);

        // Update our map of the sources of each column in the update stream.
        for column in new_columns {
            self.column_map.insert(column, self.column_map.len());
        }

        self.extract_closure()
    }
/// Present new columns and extract any newly available closure.
Present new columns and extract any newly available closure.
Present new columns and extract any newly available closure .
fn add_columns(
        &mut self,
        new_columns: std::ops::Range<usize>,
        bound_expressions: &[MirScalarExpr],
    ) -> JoinClosure {
        // Remove each element of `bound_expressions` from `equivalences`, so that we
        // avoid redundant predicate work. This removal also paves the way for
        // more precise "demand" information going forward.
        for equivalence in self.equivalences.iter_mut() {
            equivalence.retain(|expr| !bound_expressions.contains(expr));
        }
        self.equivalences.retain(|e| e.len() > 1);
        // Update our map of the sources of each column in the update stream.
        for column in new_columns {
            self.column_map.insert(column, self.column_map.len());
        }
        self.extract_closure()
    }
fn add_columns ( & mut self , new_columns : std :: ops :: Range < usize > , bound_expressions : & [ MirScalarExpr ] , ) -> JoinClosure { // Remove each element of `bound_expressions` from `equivalences`, so that we // avoid redundant predicate work. This removal also paves the way for // more precise "demand" information going forward. for equivalence in self . equivalences . iter_mut ( ) { equivalence . retain ( | expr | ! bound_expressions . contains ( expr ) ) ; } self . equivalences . retain ( | e | e . len ( ) > 1 ) ; // Update our map of the sources of each column in the update stream. for column in new_columns { self . column_map . insert ( column , self . column_map . len ( ) ) ; } self . extract_closure ( ) }
Present new columns and extract any newly available closure.
Present new columns and extract any newly available closure .
&mut self
new_columns
std::ops::Range<usize>
bound_expressions
&[MirScalarExpr]
&mut self
new_columns
std::ops::Range<usize>
bound_expressions
&[MirScalarExpr]