alamb commented on code in PR #7280:
URL: https://github.com/apache/arrow-datafusion/pull/7280#discussion_r1294963751


##########
datafusion/physical-expr/src/array_expressions.rs:
##########
@@ -533,41 +587,12 @@ fn define_array_slice(
     extra_key: &Int64Array,
     return_element: bool,
 ) -> Result<ArrayRef> {
-    match list_array.value_type() {
-        DataType::List(_) => {
-            slice!(list_array, key, extra_key, return_element, ListArray)
-        }
-        DataType::Utf8 => slice!(list_array, key, extra_key, return_element, 
StringArray),
-        DataType::LargeUtf8 => {
-            slice!(list_array, key, extra_key, return_element, 
LargeStringArray)
-        }
-        DataType::Boolean => {
-            slice!(list_array, key, extra_key, return_element, BooleanArray)
-        }
-        DataType::Float32 => {
-            slice!(list_array, key, extra_key, return_element, Float32Array)
-        }
-        DataType::Float64 => {
-            slice!(list_array, key, extra_key, return_element, Float64Array)
-        }
-        DataType::Int8 => slice!(list_array, key, extra_key, return_element, 
Int8Array),
-        DataType::Int16 => slice!(list_array, key, extra_key, return_element, 
Int16Array),
-        DataType::Int32 => slice!(list_array, key, extra_key, return_element, 
Int32Array),
-        DataType::Int64 => slice!(list_array, key, extra_key, return_element, 
Int64Array),
-        DataType::UInt8 => slice!(list_array, key, extra_key, return_element, 
UInt8Array),
-        DataType::UInt16 => {
-            slice!(list_array, key, extra_key, return_element, UInt16Array)
-        }
-        DataType::UInt32 => {
-            slice!(list_array, key, extra_key, return_element, UInt32Array)
-        }
-        DataType::UInt64 => {
-            slice!(list_array, key, extra_key, return_element, UInt64Array)
-        }
-        data_type => Err(DataFusionError::NotImplemented(format!(
-            "array is not implemented for types '{data_type:?}'"
-        ))),
+    macro_rules! array_function {
+        ($ARRAY_TYPE:ident) => {
+            slice!(list_array, key, extra_key, return_element, $ARRAY_TYPE)

Review Comment:
   this code certainly looks nicer -- thank you @izveigor 
   
   I think this function still generates an individual function for each 
potential `ListArray` type, when it is fundamentally an operation on indices 
(and thus we don't need specialized functions for Strings, Int8s, Int16s, 
Int32s, etc)
   
   However this is getting closer to a single implementation so I think it is 
improvement to what was here previously



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to