Is your feature request related to a problem or challenge?
Part of #11151 (where we are removing special case uses of Min/Max)
Describe the solution you'd like
Remove the code here:
|
pub fn get_minmax_desc(&self) -> Option<(Field, bool)> { |
|
let agg_expr = self.aggr_expr.iter().exactly_one().ok()?; |
|
if let Some(max) = agg_expr.as_any().downcast_ref::<Max>() { |
|
Some((max.field().ok()?, true)) |
|
} else if let Some(min) = agg_expr.as_any().downcast_ref::<Min>() { |
|
Some((min.field().ok()?, false)) |
|
} else { |
|
None |
|
} |
|
} |
Specifically, the idea is to remove the pattern
expr.as_any().downcast_ref::<Max>()
and
expr.as_any().downcast_ref::<Min>()
Describe alternatives you've considered
Perhaps we can add function like this to AggregteExpr and implement it for Min and Max:
impl AggregateExpr {
/// If this function is max, return (output_field, true)
/// if the function is min, return (output_field, false)
/// otherwise return None (the default)
///
/// output_field is the name of the column produced by this aggregate
///
/// Note: this is used to use special aggregate implementations in certain conditions
pub fn get_min_max(&self) -> Option<(Field, bool)> { None }
...
}
Additional context
No response
Is your feature request related to a problem or challenge?
Part of #11151 (where we are removing special case uses of Min/Max)
Describe the solution you'd like
Remove the code here:
datafusion/datafusion/physical-plan/src/aggregates/mod.rs
Lines 485 to 494 in f58df32
Specifically, the idea is to remove the pattern
and
Describe alternatives you've considered
Perhaps we can add function like this to AggregteExpr and implement it for
MinandMax:Additional context
No response