alamb commented on code in PR #9163:
URL: https://github.com/apache/arrow-datafusion/pull/9163#discussion_r1484779625
##########
datafusion/physical-plan/src/joins/sort_merge_join.rs:
##########
@@ -1209,7 +1209,14 @@ impl SMJStream {
) {
// The reverse of the selection mask. For the rows not
pass join filter above,
// we need to join them (left or right) with null rows
for outer joins.
- let not_mask = compute::not(mask)?;
+ let not_mask = if mask.null_count() > 0 {
+ // If the mask contains nulls, we need to use
`prep_null_mask_filter` to
+ // handle the nulls in the mask as false.
Review Comment:
```suggestion
// handle the nulls in the mask as false to
produce rows where the mask
// was null itself.
```
##########
datafusion/physical-plan/src/joins/sort_merge_join.rs:
##########
@@ -1254,6 +1261,20 @@ impl SMJStream {
// For full join, we also need to output the null
joined rows from the buffered side
if matches!(self.join_type, JoinType::Full) {
+ // Handle not mask for buffered side further.
+ // For buffered side, we want to output the rows
that are not null joined with
+ // the streamed side. i.e. the rows that are not
null in the `buffered_indices`.
+ let not_mask = if buffered_indices.null_count() >
0 {
Review Comment:
You might be able to avoid the unwrap by using
```rust
let not_mask = if let Some(nulls) = if
buffered_indices.nulls() {
let mask = not_mask.values() & nulls.inner();
BooleanArray::new(mask, None)
} else {
not_mask
};
```
--
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]