From e8594267e5d560b2ade3c91ff1b2d9b75766f242 Mon Sep 17 00:00:00 2001 From: Jay Zhan Date: Wed, 15 May 2024 08:02:24 +0800 Subject: [PATCH] Minor: Extend more style of udaf `expr_fn`, Remove order args for`covar_samp` and `covar_pop` (#10492) * adjust macro args Signed-off-by: jayzhan211 * adjust macro rule Signed-off-by: jayzhan211 --------- Signed-off-by: jayzhan211 --- datafusion/functions-aggregate/src/macros.rs | 43 ++++++++++++++++--- .../tests/cases/roundtrip_logical_plan.rs | 4 +- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/datafusion/functions-aggregate/src/macros.rs b/datafusion/functions-aggregate/src/macros.rs index 27fc623a182b..6c3348d6c1d6 100644 --- a/datafusion/functions-aggregate/src/macros.rs +++ b/datafusion/functions-aggregate/src/macros.rs @@ -15,24 +15,55 @@ // specific language governing permissions and limitations // under the License. +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + macro_rules! make_udaf_expr_and_func { ($UDAF:ty, $EXPR_FN:ident, $($arg:ident)*, $DOC:expr, $AGGREGATE_UDF_FN:ident) => { + // "fluent expr_fn" style function + #[doc = $DOC] + pub fn $EXPR_FN( + $($arg: datafusion_expr::Expr,)* + ) -> datafusion_expr::Expr { + datafusion_expr::Expr::AggregateFunction(datafusion_expr::expr::AggregateFunction::new_udf( + $AGGREGATE_UDF_FN(), + vec![$($arg),*], + false, + None, + None, + None, + )) + } + create_func!($UDAF, $AGGREGATE_UDF_FN); + }; + ($UDAF:ty, $EXPR_FN:ident, $($arg:ident)*, $distinct:ident, $DOC:expr, $AGGREGATE_UDF_FN:ident) => { // "fluent expr_fn" style function #[doc = $DOC] pub fn $EXPR_FN( $($arg: datafusion_expr::Expr,)* distinct: bool, - filter: Option>, - order_by: Option>, - null_treatment: Option ) -> datafusion_expr::Expr { datafusion_expr::Expr::AggregateFunction(datafusion_expr::expr::AggregateFunction::new_udf( $AGGREGATE_UDF_FN(), vec![$($arg),*], distinct, - filter, - order_by, - null_treatment, + None, + None, + None )) } create_func!($UDAF, $AGGREGATE_UDF_FN); diff --git a/datafusion/proto/tests/cases/roundtrip_logical_plan.rs b/datafusion/proto/tests/cases/roundtrip_logical_plan.rs index ec215937dca8..b5b0b4c2247a 100644 --- a/datafusion/proto/tests/cases/roundtrip_logical_plan.rs +++ b/datafusion/proto/tests/cases/roundtrip_logical_plan.rs @@ -622,8 +622,8 @@ async fn roundtrip_expr_api() -> Result<()> { ), array_replace_all(make_array(vec![lit(1), lit(2), lit(3)]), lit(2), lit(4)), first_value(vec![lit(1)], false, None, None, None), - covar_samp(lit(1.5), lit(2.2), false, None, None, None), - covar_pop(lit(1.5), lit(2.2), true, None, None, None), + covar_samp(lit(1.5), lit(2.2)), + covar_pop(lit(1.5), lit(2.2)), ]; // ensure expressions created with the expr api can be round tripped