MCPcopy Create free account
hub / github.com/apache/datafusion / collect_missing_exprs

Method collect_missing_exprs

datafusion/optimizer/src/decorrelate.rs:395–425  ·  view source on GitHub ↗
(
        &self,
        exprs: &[Expr],
        correlated_subquery_cols: &BTreeSet<Column>,
    )

Source from the content-addressed store, hash-verified

393
394impl PullUpCorrelatedExpr {
395 fn collect_missing_exprs(
396 &self,
397 exprs: &[Expr],
398 correlated_subquery_cols: &BTreeSet<Column>,
399 ) -> Result<Vec<Expr>> {
400 let mut missing_exprs = vec![];
401 for expr in exprs {
402 if !missing_exprs.contains(expr) {
403 missing_exprs.push(expr.clone())
404 }
405 }
406 for col in correlated_subquery_cols.iter() {
407 let col_expr = Expr::Column(col.clone());
408 if !missing_exprs.contains(&col_expr) {
409 missing_exprs.push(col_expr)
410 }
411 }
412 if let Some(pull_up_having) = &self.pull_up_having_expr {
413 let filter_apply_columns = pull_up_having.column_refs();
414 for col in filter_apply_columns {
415 // add to missing_exprs if not already there
416 let contains = missing_exprs
417 .iter()
418 .any(|expr| matches!(expr, Expr::Column(c) if c == col));
419 if !contains {
420 missing_exprs.push(Expr::Column(col.clone()))
421 }
422 }
423 }
424 Ok(missing_exprs)
425 }
426}
427
428fn can_pullup_over_aggregation(expr: &Expr) -> bool {

Callers 1

f_upMethod · 0.80

Calls 7

column_refsMethod · 0.80
ColumnClass · 0.50
containsMethod · 0.45
pushMethod · 0.45
cloneMethod · 0.45
iterMethod · 0.45
anyMethod · 0.45

Tested by

no test coverage detected