jonathanc-n commented on code in PR #16423:
URL: https://github.com/apache/datafusion/pull/16423#discussion_r2150397306


##########
datafusion/functions-nested/src/reverse.rs:
##########
@@ -175,3 +182,45 @@ fn general_array_reverse<O: OffsetSizeTrait + 
TryFrom<i64>>(
         Some(nulls.into()),
     )?))
 }
+
+fn fixed_size_array_reverse(
+    array: &FixedSizeListArray,
+    field: &FieldRef,
+) -> Result<ArrayRef> {
+    let values = array.values();
+    let original_data = values.to_data();
+    let capacity = Capacities::Array(original_data.len());
+    let mut nulls = vec![];
+    let mut mutable =
+        MutableArrayData::with_capacities(vec![&original_data], false, 
capacity);
+    let value_length = array.value_length();
+
+    for row_index in 0..(array.len() as i32) {
+        // skip the null value
+        if array.is_null(row_index as usize) {
+            nulls.push(false);
+            mutable.extend(0, 0, 1);
+            continue;
+        } else {
+            nulls.push(true);
+        }
+
+        let start = row_index * value_length;
+        let end = (row_index + 1) * value_length;
+
+        let mut index = end - 1;
+
+        while index >= start {
+            mutable.extend(0, index as usize, index as usize + 1);
+            index -= 1;
+        }
+    }
+
+    let data = mutable.freeze();
+    Ok(Arc::new(FixedSizeListArray::try_new(
+        Arc::clone(field),
+        array.value_length(),
+        arrow::array::make_array(data),
+        Some(nulls.into()),

Review Comment:
   we can return array.nulls() here instead



##########
datafusion/functions-nested/src/reverse.rs:
##########
@@ -175,3 +182,45 @@ fn general_array_reverse<O: OffsetSizeTrait + 
TryFrom<i64>>(
         Some(nulls.into()),
     )?))
 }
+
+fn fixed_size_array_reverse(
+    array: &FixedSizeListArray,
+    field: &FieldRef,
+) -> Result<ArrayRef> {
+    let values = array.values();
+    let original_data = values.to_data();
+    let capacity = Capacities::Array(original_data.len());
+    let mut nulls = vec![];
+    let mut mutable =
+        MutableArrayData::with_capacities(vec![&original_data], false, 
capacity);

Review Comment:
   This `has_nulls` would also be changed to true if there is more than one 
null, can do something like array.null_count > 1



-- 
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: github-unsubscr...@datafusion.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org
For additional commands, e-mail: github-h...@datafusion.apache.org

Reply via email to