diff --git a/datafusion/functions-aggregate/src/approx_percentile_cont.rs b/datafusion/functions-aggregate/src/approx_percentile_cont.rs index 6a09d159f68d..ce1b149ba0c5 100644 --- a/datafusion/functions-aggregate/src/approx_percentile_cont.rs +++ b/datafusion/functions-aggregate/src/approx_percentile_cont.rs @@ -164,7 +164,7 @@ impl ApproxPercentileCont { pub(crate) fn create_accumulator( &self, - args: AccumulatorArgs, + args: &AccumulatorArgs, ) -> Result { let percentile = validate_percentile_expr(&args.exprs[1], "APPROX_PERCENTILE_CONT")?; @@ -300,7 +300,7 @@ impl AggregateUDFImpl for ApproxPercentileCont { #[inline] fn accumulator(&self, acc_args: AccumulatorArgs) -> Result> { - Ok(Box::new(self.create_accumulator(acc_args)?)) + Ok(Box::new(self.create_accumulator(&acc_args)?)) } fn return_type(&self, arg_types: &[DataType]) -> Result { diff --git a/datafusion/functions-aggregate/src/approx_percentile_cont_with_weight.rs b/datafusion/functions-aggregate/src/approx_percentile_cont_with_weight.rs index 42aba0b95e19..adf07dede3d8 100644 --- a/datafusion/functions-aggregate/src/approx_percentile_cont_with_weight.rs +++ b/datafusion/functions-aggregate/src/approx_percentile_cont_with_weight.rs @@ -244,7 +244,7 @@ impl AggregateUDFImpl for ApproxPercentileContWithWeight { is_distinct: acc_args.is_distinct, }; let approx_percentile_cont_accumulator = - self.approx_percentile_cont.create_accumulator(sub_args)?; + self.approx_percentile_cont.create_accumulator(&sub_args)?; let accumulator = ApproxPercentileWithWeightAccumulator::new( approx_percentile_cont_accumulator, ); diff --git a/datafusion/functions-aggregate/src/first_last.rs b/datafusion/functions-aggregate/src/first_last.rs index d2233fd932b4..bedf124d3095 100644 --- a/datafusion/functions-aggregate/src/first_last.rs +++ b/datafusion/functions-aggregate/src/first_last.rs @@ -209,7 +209,7 @@ impl AggregateUDFImpl for FirstValue { args: AccumulatorArgs, ) -> Result> { fn create_accumulator( - args: AccumulatorArgs, + args: &AccumulatorArgs, ) -> Result> { let Some(ordering) = LexOrdering::new(args.order_bys.to_vec()) else { return internal_err!("Groups accumulator must have an ordering."); @@ -231,50 +231,50 @@ impl AggregateUDFImpl for FirstValue { } match args.return_field.data_type() { - DataType::Int8 => create_accumulator::(args), - DataType::Int16 => create_accumulator::(args), - DataType::Int32 => create_accumulator::(args), - DataType::Int64 => create_accumulator::(args), - DataType::UInt8 => create_accumulator::(args), - DataType::UInt16 => create_accumulator::(args), - DataType::UInt32 => create_accumulator::(args), - DataType::UInt64 => create_accumulator::(args), - DataType::Float16 => create_accumulator::(args), - DataType::Float32 => create_accumulator::(args), - DataType::Float64 => create_accumulator::(args), - - DataType::Decimal32(_, _) => create_accumulator::(args), - DataType::Decimal64(_, _) => create_accumulator::(args), - DataType::Decimal128(_, _) => create_accumulator::(args), - DataType::Decimal256(_, _) => create_accumulator::(args), + DataType::Int8 => create_accumulator::(&args), + DataType::Int16 => create_accumulator::(&args), + DataType::Int32 => create_accumulator::(&args), + DataType::Int64 => create_accumulator::(&args), + DataType::UInt8 => create_accumulator::(&args), + DataType::UInt16 => create_accumulator::(&args), + DataType::UInt32 => create_accumulator::(&args), + DataType::UInt64 => create_accumulator::(&args), + DataType::Float16 => create_accumulator::(&args), + DataType::Float32 => create_accumulator::(&args), + DataType::Float64 => create_accumulator::(&args), + + DataType::Decimal32(_, _) => create_accumulator::(&args), + DataType::Decimal64(_, _) => create_accumulator::(&args), + DataType::Decimal128(_, _) => create_accumulator::(&args), + DataType::Decimal256(_, _) => create_accumulator::(&args), DataType::Timestamp(TimeUnit::Second, _) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Timestamp(TimeUnit::Millisecond, _) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Timestamp(TimeUnit::Microsecond, _) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Timestamp(TimeUnit::Nanosecond, _) => { - create_accumulator::(args) + create_accumulator::(&args) } - DataType::Date32 => create_accumulator::(args), - DataType::Date64 => create_accumulator::(args), + DataType::Date32 => create_accumulator::(&args), + DataType::Date64 => create_accumulator::(&args), DataType::Time32(TimeUnit::Second) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Time32(TimeUnit::Millisecond) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Time64(TimeUnit::Microsecond) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Time64(TimeUnit::Nanosecond) => { - create_accumulator::(args) + create_accumulator::(&args) } _ => internal_err!( @@ -1171,7 +1171,7 @@ impl AggregateUDFImpl for LastValue { args: AccumulatorArgs, ) -> Result> { fn create_accumulator( - args: AccumulatorArgs, + args: &AccumulatorArgs, ) -> Result> where T: ArrowPrimitiveType + Send, @@ -1195,50 +1195,50 @@ impl AggregateUDFImpl for LastValue { } match args.return_field.data_type() { - DataType::Int8 => create_accumulator::(args), - DataType::Int16 => create_accumulator::(args), - DataType::Int32 => create_accumulator::(args), - DataType::Int64 => create_accumulator::(args), - DataType::UInt8 => create_accumulator::(args), - DataType::UInt16 => create_accumulator::(args), - DataType::UInt32 => create_accumulator::(args), - DataType::UInt64 => create_accumulator::(args), - DataType::Float16 => create_accumulator::(args), - DataType::Float32 => create_accumulator::(args), - DataType::Float64 => create_accumulator::(args), - - DataType::Decimal32(_, _) => create_accumulator::(args), - DataType::Decimal64(_, _) => create_accumulator::(args), - DataType::Decimal128(_, _) => create_accumulator::(args), - DataType::Decimal256(_, _) => create_accumulator::(args), + DataType::Int8 => create_accumulator::(&args), + DataType::Int16 => create_accumulator::(&args), + DataType::Int32 => create_accumulator::(&args), + DataType::Int64 => create_accumulator::(&args), + DataType::UInt8 => create_accumulator::(&args), + DataType::UInt16 => create_accumulator::(&args), + DataType::UInt32 => create_accumulator::(&args), + DataType::UInt64 => create_accumulator::(&args), + DataType::Float16 => create_accumulator::(&args), + DataType::Float32 => create_accumulator::(&args), + DataType::Float64 => create_accumulator::(&args), + + DataType::Decimal32(_, _) => create_accumulator::(&args), + DataType::Decimal64(_, _) => create_accumulator::(&args), + DataType::Decimal128(_, _) => create_accumulator::(&args), + DataType::Decimal256(_, _) => create_accumulator::(&args), DataType::Timestamp(TimeUnit::Second, _) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Timestamp(TimeUnit::Millisecond, _) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Timestamp(TimeUnit::Microsecond, _) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Timestamp(TimeUnit::Nanosecond, _) => { - create_accumulator::(args) + create_accumulator::(&args) } - DataType::Date32 => create_accumulator::(args), - DataType::Date64 => create_accumulator::(args), + DataType::Date32 => create_accumulator::(&args), + DataType::Date64 => create_accumulator::(&args), DataType::Time32(TimeUnit::Second) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Time32(TimeUnit::Millisecond) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Time64(TimeUnit::Microsecond) => { - create_accumulator::(args) + create_accumulator::(&args) } DataType::Time64(TimeUnit::Nanosecond) => { - create_accumulator::(args) + create_accumulator::(&args) } _ => { diff --git a/datafusion/functions-aggregate/src/lib.rs b/datafusion/functions-aggregate/src/lib.rs index 056cd45fa2c3..5454a902e4b7 100644 --- a/datafusion/functions-aggregate/src/lib.rs +++ b/datafusion/functions-aggregate/src/lib.rs @@ -15,6 +15,9 @@ // specific language governing permissions and limitations // under the License. +// https://github.com/apache/datafusion/issues/18503 +#![deny(clippy::needless_pass_by_value)] +#![cfg_attr(test, allow(clippy::needless_pass_by_value))] #![doc( html_logo_url = "https://raw.githubusercontent.com/apache/datafusion/19fe44cf2f30cbdd63d4a4f52c74055163c6cc38/docs/logos/standalone_logo/logo_original.svg", html_favicon_url = "https://raw.githubusercontent.com/apache/datafusion/19fe44cf2f30cbdd63d4a4f52c74055163c6cc38/docs/logos/standalone_logo/logo_original.svg" diff --git a/datafusion/functions-aggregate/src/percentile_cont.rs b/datafusion/functions-aggregate/src/percentile_cont.rs index ce5881732f0e..79f98c8497bd 100644 --- a/datafusion/functions-aggregate/src/percentile_cont.rs +++ b/datafusion/functions-aggregate/src/percentile_cont.rs @@ -152,7 +152,7 @@ impl PercentileCont { } } - fn create_accumulator(&self, args: AccumulatorArgs) -> Result> { + fn create_accumulator(&self, args: &AccumulatorArgs) -> Result> { let percentile = validate_percentile_expr(&args.exprs[1], "PERCENTILE_CONT")?; let is_descending = args @@ -291,7 +291,7 @@ impl AggregateUDFImpl for PercentileCont { } fn accumulator(&self, acc_args: AccumulatorArgs) -> Result> { - self.create_accumulator(acc_args) + self.create_accumulator(&acc_args) } fn groups_accumulator_supported(&self, args: AccumulatorArgs) -> bool {