@@ -714,6 +714,10 @@ impl HashJoinState for JoinHashTable {
714
714
}
715
715
}
716
716
717
+ if unmatched_build_indexes. is_empty ( ) && self . hash_join_desc . other_predicate . is_none ( ) {
718
+ return Ok ( blocks. to_vec ( ) ) ;
719
+ }
720
+
717
721
let unmatched_build_block = self . row_space . gather ( & unmatched_build_indexes) ?;
718
722
// Create null block for unmatched rows in probe side
719
723
let null_probe_block = DataBlock :: create (
@@ -728,7 +732,7 @@ impl HashJoinState for JoinHashTable {
728
732
} )
729
733
. collect :: < Result < Vec < _ > > > ( ) ?,
730
734
) ;
731
- let mut merged_block = self . merge_eq_block ( & null_probe_block , & unmatched_build_block ) ?;
735
+ let mut merged_block = self . merge_eq_block ( & unmatched_build_block , & null_probe_block ) ?;
732
736
merged_block = DataBlock :: concat_blocks ( & [ blocks, & [ merged_block] ] . concat ( ) ) ?;
733
737
734
738
if self . hash_join_desc . other_predicate . is_none ( ) {
@@ -750,7 +754,7 @@ impl HashJoinState for JoinHashTable {
750
754
// must be one of above
751
755
_ => unreachable ! ( ) ,
752
756
} ;
753
-
757
+ dbg ! ( merged_block . clone ( ) ) ;
754
758
let probe_column_len = self . probe_schema . fields ( ) . len ( ) ;
755
759
let probe_columns = merged_block. columns ( ) [ 0 ..probe_column_len]
756
760
. iter ( )
@@ -772,7 +776,9 @@ impl HashJoinState for JoinHashTable {
772
776
let mut bm = validity. into_mut ( ) . right ( ) . unwrap ( ) ;
773
777
Self :: filter_rows_for_right_join ( & mut bm, & build_indexes, & mut row_state) ;
774
778
let predicate = BooleanColumn :: from_arrow_data ( bm. into ( ) ) . arc ( ) ;
775
- return Ok ( vec ! [ DataBlock :: filter_block( merged_block, & predicate) ?] ) ;
779
+ let filtered_block = DataBlock :: filter_block ( merged_block, & predicate) ?;
780
+ dbg ! ( filtered_block. clone( ) ) ;
781
+ return Ok ( vec ! [ filtered_block] ) ;
776
782
}
777
783
778
784
Ok ( vec ! [ merged_block] )
0 commit comments