alamb commented on a change in pull request #8739:
URL: https://github.com/apache/arrow/pull/8739#discussion_r529030845
##########
File path: rust/arrow/src/array/equal/structure.rs
##########
@@ -30,19 +32,51 @@ fn equal_values(
.iter()
.zip(rhs.child_data())
.all(|(lhs_values, rhs_values)| {
- equal_range(lhs_values, rhs_values, lhs_start, rhs_start, len)
+ // merge the null data
+ let lhs_merged_nulls = match (lhs_nulls, lhs_values.null_buffer())
{
Review comment:
I don't know how much `c.clone()` costs below, but if we want to avoid
`clone()` you could potentially use a structure like this:
```diff
alamb@MacBook-Pro rust % git diff
git diff
WARNING: terminal is not fully functional
- (press RETURN)
diff --git a/rust/arrow/src/array/equal/structure.rs
b/rust/arrow/src/array/equal/structure.rs
index cad7a9ea5..dc29d44ba 100644
--- a/rust/arrow/src/array/equal/structure.rs
+++ b/rust/arrow/src/array/equal/structure.rs
@@ -28,6 +28,9 @@ fn equal_values(
rhs_start: usize,
len: usize,
) -> bool {
+ let mut temp_lhs : Option<Buffer> = None;
+ let mut temp_rhs : Option<Buffer> = None;
+
lhs.child_data()
.iter()
.zip(rhs.child_data())
@@ -35,27 +38,29 @@ fn equal_values(
// merge the null data
let lhs_merged_nulls = match (lhs_nulls,
lhs_values.null_buffer()) {
(None, None) => None,
- (None, Some(c)) => Some(c.clone()),
- (Some(p), None) => Some(p.clone()),
+ (None, Some(c)) => Some(c),
+ (Some(p), None) => Some(p),
(Some(p), Some(c)) => {
let merged = (p & c).unwrap();
- Some(merged)
+ temp_lhs = Some(merged);
+ temp_lhs.as_ref()
}
};
let rhs_merged_nulls = match (rhs_nulls,
rhs_values.null_buffer()) {
(None, None) => None,
- (None, Some(c)) => Some(c.clone()),
- (Some(p), None) => Some(p.clone()),
+ (None, Some(c)) => Some(c),
+ (Some(p), None) => Some(p),
(Some(p), Some(c)) => {
let merged = (p & c).unwrap();
- Some(merged)
+ temp_rhs = Some(merged);
+ temp_rhs.as_ref()
}
};
equal_range(
lhs_values,
rhs_values,
- lhs_merged_nulls.as_ref(),
- rhs_merged_nulls.as_ref(),
+ lhs_merged_nulls,
+ rhs_merged_nulls,
lhs_start,
rhs_start,
len,
```
(Neville edited this add diff formatting to the code)
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
[email protected]