This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new bd9b33ceca Fix panic in `struct` function with mixed scalar/array
arguments (#9775)
bd9b33ceca is described below
commit bd9b33ceca3553431b6b328de93f1836bbd9e263
Author: Andrew Lamb <[email protected]>
AuthorDate: Sun Mar 24 18:38:48 2024 -0400
Fix panic in `struct` function with mixed scalar/array arguments (#9775)
---
datafusion/functions/src/core/struct.rs | 11 ++---------
datafusion/sqllogictest/test_files/struct.slt | 9 +++++++++
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/datafusion/functions/src/core/struct.rs
b/datafusion/functions/src/core/struct.rs
index 2a8622f0a1..ac300e0abd 100644
--- a/datafusion/functions/src/core/struct.rs
+++ b/datafusion/functions/src/core/struct.rs
@@ -47,17 +47,10 @@ fn array_struct(args: &[ArrayRef]) -> Result<ArrayRef> {
Ok(Arc::new(StructArray::from(vec)))
}
+
/// put values in a struct array.
fn struct_expr(args: &[ColumnarValue]) -> Result<ColumnarValue> {
- let arrays = args
- .iter()
- .map(|x| {
- Ok(match x {
- ColumnarValue::Array(array) => array.clone(),
- ColumnarValue::Scalar(scalar) => scalar.to_array()?.clone(),
- })
- })
- .collect::<Result<Vec<ArrayRef>>>()?;
+ let arrays = ColumnarValue::values_to_arrays(args)?;
Ok(ColumnarValue::Array(array_struct(arrays.as_slice())?))
}
#[derive(Debug)]
diff --git a/datafusion/sqllogictest/test_files/struct.slt
b/datafusion/sqllogictest/test_files/struct.slt
index 936dedcc89..1ab6f3908b 100644
--- a/datafusion/sqllogictest/test_files/struct.slt
+++ b/datafusion/sqllogictest/test_files/struct.slt
@@ -58,6 +58,15 @@ select struct(a, b, c) from values;
{c0: 2, c1: 2.2, c2: b}
{c0: 3, c1: 3.3, c2: c}
+# struct scalar function with columns and scalars
+query ?
+select struct(a, 'foo') from values;
+----
+{c0: 1, c1: foo}
+{c0: 2, c1: foo}
+{c0: 3, c1: foo}
+
+
# explain struct scalar function with columns #1
query TT
explain select struct(a, b, c) from values;