-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
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
| 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
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request