- 
                Notifications
    You must be signed in to change notification settings 
- Fork 1.7k
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Similarly to #8568
Is your feature request related to a problem or challenge?
The current way a user implements a WindowUDF is awkward and very hard to extend in backwards compatible ways:
They must wade through several Arc<dyn<...> typedefs to figure out how to provide the type signature and implementation
impl WindowUDF {
/// Create a new WindowUDF 
pub fn new(
    name: &str,
    signature: &Signature,
    return_type: &Arc<dyn Fn(&[DataType]) -> Result<Arc<DataType>, DataFusionError> + Send + Sync>,
    partition_evaluator_factory: &Arc<dyn Fn() -> Result<Box<dyn PartitionEvaluator>, DataFusionError> + Send + Sync>
) -> WindowUDFDescribe the solution you'd like
Follow the pattern in #8578
- Create a WindowUDFImpltrait, andWindowUDF::new_from_implthat creates anWindowUDFfrom the impl
- Add an example in datafusion-examples/examples/advanced_udwf.rsof using this API
I am not sure why this API is implemented like it is (other than it was consistent with ScalarUDF). As a user I would expect to be able to use a trait object like this
like
struct MyWindowFunction { 
..
}
impl WindowUDFImpl for MyWindowFunction {
  fn name(&self) -> &str, 
  fn return_type(&self) -> &DataType, 
...
}Describe alternatives you've considered
No response
Additional context
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request