Skip to content

Commit 2a7f64a

Browse files
authored
feat: Add Window UDFs to FFI Crate (#16261)
* Initial commit of UDWF via FFI * Work in progress on integration testing of udwf * Rebase due to UDF changes upstream
1 parent 2c8241a commit 2a7f64a

File tree

9 files changed

+1019
-5
lines changed

9 files changed

+1019
-5
lines changed

datafusion/ffi/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pub mod table_source;
3737
pub mod udaf;
3838
pub mod udf;
3939
pub mod udtf;
40+
pub mod udwf;
4041
pub mod util;
4142
pub mod volatility;
4243

datafusion/ffi/src/tests/mod.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ use crate::{catalog_provider::FFI_CatalogProvider, udtf::FFI_TableFunction};
3131

3232
use crate::udaf::FFI_AggregateUDF;
3333

34+
use crate::udwf::FFI_WindowUDF;
35+
3436
use super::{table_provider::FFI_TableProvider, udf::FFI_ScalarUDF};
3537
use arrow::array::RecordBatch;
3638
use async_provider::create_async_table_provider;
@@ -40,8 +42,8 @@ use datafusion::{
4042
};
4143
use sync_provider::create_sync_table_provider;
4244
use udf_udaf_udwf::{
43-
create_ffi_abs_func, create_ffi_random_func, create_ffi_stddev_func,
44-
create_ffi_sum_func, create_ffi_table_func,
45+
create_ffi_abs_func, create_ffi_random_func, create_ffi_rank_func,
46+
create_ffi_stddev_func, create_ffi_sum_func, create_ffi_table_func,
4547
};
4648

4749
mod async_provider;
@@ -76,6 +78,8 @@ pub struct ForeignLibraryModule {
7678
/// Createa grouping UDAF using stddev
7779
pub create_stddev_udaf: extern "C" fn() -> FFI_AggregateUDF,
7880

81+
pub create_rank_udwf: extern "C" fn() -> FFI_WindowUDF,
82+
7983
pub version: extern "C" fn() -> u64,
8084
}
8185

@@ -125,6 +129,7 @@ pub fn get_foreign_library_module() -> ForeignLibraryModuleRef {
125129
create_table_function: create_ffi_table_func,
126130
create_sum_udaf: create_ffi_sum_func,
127131
create_stddev_udaf: create_ffi_stddev_func,
132+
create_rank_udwf: create_ffi_rank_func,
128133
version: super::version,
129134
}
130135
.leak_into_prefix()

datafusion/ffi/src/tests/udf_udaf_udwf.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18-
use crate::{udaf::FFI_AggregateUDF, udf::FFI_ScalarUDF, udtf::FFI_TableFunction};
18+
use crate::{
19+
udaf::FFI_AggregateUDF, udf::FFI_ScalarUDF, udtf::FFI_TableFunction,
20+
udwf::FFI_WindowUDF,
21+
};
1922
use datafusion::{
2023
catalog::TableFunctionImpl,
2124
functions::math::{abs::AbsFunc, random::RandomFunc},
2225
functions_aggregate::{stddev::Stddev, sum::Sum},
2326
functions_table::generate_series::RangeFunc,
24-
logical_expr::{AggregateUDF, ScalarUDF},
27+
functions_window::rank::Rank,
28+
logical_expr::{AggregateUDF, ScalarUDF, WindowUDF},
2529
};
2630

2731
use std::sync::Arc;
@@ -55,3 +59,15 @@ pub(crate) extern "C" fn create_ffi_stddev_func() -> FFI_AggregateUDF {
5559

5660
udaf.into()
5761
}
62+
63+
pub(crate) extern "C" fn create_ffi_rank_func() -> FFI_WindowUDF {
64+
let udwf: Arc<WindowUDF> = Arc::new(
65+
Rank::new(
66+
"rank_demo".to_string(),
67+
datafusion::functions_window::rank::RankType::Basic,
68+
)
69+
.into(),
70+
);
71+
72+
udwf.into()
73+
}

0 commit comments

Comments
 (0)