From c3755229244b7c087cccf634d219383af8b5174e Mon Sep 17 00:00:00 2001 From: Jefffrey Date: Fri, 19 Sep 2025 15:36:23 +0900 Subject: [PATCH] Support FixedSizeList for array_except --- datafusion/functions-nested/src/except.rs | 8 ++++++-- datafusion/sqllogictest/test_files/array.slt | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/datafusion/functions-nested/src/except.rs b/datafusion/functions-nested/src/except.rs index a7ce36ae33b5..d6982ab5a2ab 100644 --- a/datafusion/functions-nested/src/except.rs +++ b/datafusion/functions-nested/src/except.rs @@ -22,7 +22,7 @@ use arrow::array::{cast::AsArray, Array, ArrayRef, GenericListArray, OffsetSizeT use arrow::buffer::OffsetBuffer; use arrow::datatypes::{DataType, FieldRef}; use arrow::row::{RowConverter, SortField}; -use datafusion_common::utils::take_function_args; +use datafusion_common::utils::{take_function_args, ListCoercion}; use datafusion_common::{internal_err, HashSet, Result}; use datafusion_expr::{ ColumnarValue, Documentation, ScalarUDFImpl, Signature, Volatility, @@ -81,7 +81,11 @@ impl Default for ArrayExcept { impl ArrayExcept { pub fn new() -> Self { Self { - signature: Signature::any(2, Volatility::Immutable), + signature: Signature::arrays( + 2, + Some(ListCoercion::FixedSizedListToList), + Volatility::Immutable, + ), aliases: vec!["list_except".to_string()], } } diff --git a/datafusion/sqllogictest/test_files/array.slt b/datafusion/sqllogictest/test_files/array.slt index e72049171291..853488bc8a4c 100644 --- a/datafusion/sqllogictest/test_files/array.slt +++ b/datafusion/sqllogictest/test_files/array.slt @@ -7285,6 +7285,16 @@ select array_except(null, null) ---- NULL +query ? +select array_except(arrow_cast([1, 2, 3, 4], 'LargeList(Int64)'), arrow_cast([5, 6, 3, 4], 'LargeList(Int64)')); +---- +[1, 2] + +query ? +select array_except(arrow_cast([1, 2, 3, 4], 'FixedSizeList(4, Int64)'), arrow_cast([5, 6, 3, 4], 'FixedSizeList(4, Int64)')); +---- +[1, 2] + ### Array operators tests