diff --git a/datafusion/expr/src/udaf.rs b/datafusion/expr/src/udaf.rs
index 7358568f0afe1..d37309eaff6ef 100644
--- a/datafusion/expr/src/udaf.rs
+++ b/datafusion/expr/src/udaf.rs
@@ -40,6 +40,7 @@ use crate::function::{
AccumulatorArgs, AggregateFunctionSimplification, StateFieldsArgs,
};
use crate::groups_accumulator::GroupsAccumulator;
+use crate::simplify::SimplifyContext;
use crate::udf_eq::UdfEq;
use crate::utils::{AggregateOrderSensitivity, format_state_name, ordering_state_fields};
use crate::{Accumulator, Expr, expr_vec_fmt};
@@ -311,6 +312,17 @@ impl AggregateUDF {
self.inner.simplify()
}
+ /// Returns this aggregate function's candidate decomposition, if any.
+ ///
+ /// See [`AggregateUDFImpl::decompose`] for more details.
+ pub fn decompose(
+ &self,
+ aggregate_function: &AggregateFunction,
+ info: &SimplifyContext,
+ ) -> Result