-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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