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;

Reply via email to