| 893 | } |
| 894 | |
| 895 | Status PartitionedHashJoinNode::BeginNullAwareProbe(bool* has_null_aware_rows) { |
| 896 | DCHECK_ENUM_EQ(probe_state_, ProbeState::PROBE_COMPLETE); |
| 897 | DCHECK(builder_->null_aware_partition() != nullptr); |
| 898 | DCHECK(null_aware_probe_partition_ != nullptr); |
| 899 | DCHECK_EQ(probe_batch_pos_, -1); |
| 900 | DCHECK_EQ(probe_batch_->num_rows(), 0); |
| 901 | |
| 902 | BufferedTupleStream* probe_stream = null_aware_probe_partition_->probe_rows(); |
| 903 | if (builder_->null_aware_partition()->build_rows()->num_rows() == 0) { |
| 904 | // There were no build rows. Nothing to do. Just prepare to output the null |
| 905 | // probe rows. |
| 906 | DCHECK_EQ(probe_stream->num_rows(), 0); |
| 907 | RETURN_IF_ERROR(PrepareNullAwareNullProbe()); |
| 908 | *has_null_aware_rows = false; |
| 909 | return Status::OK(); |
| 910 | } |
| 911 | |
| 912 | RETURN_IF_ERROR(builder_->BeginNullAwareProbe()); |
| 913 | |
| 914 | // Initialize the probe stream for reading. |
| 915 | bool got_read_buffer; |
| 916 | RETURN_IF_ERROR(probe_stream->PrepareForRead(true, &got_read_buffer)); |
| 917 | if (!got_read_buffer) { |
| 918 | return mem_tracker()->MemLimitExceeded( |
| 919 | runtime_state_, Substitute(PREPARE_FOR_READ_FAILED_ERROR_MSG, id_)); |
| 920 | } |
| 921 | probe_batch_pos_ = 0; |
| 922 | *has_null_aware_rows = true; |
| 923 | return Status::OK(); |
| 924 | } |
| 925 | |
| 926 | Status PartitionedHashJoinNode::OutputNullAwareProbeRows( |
| 927 | RuntimeState* state, RowBatch* out_batch, bool* done) { |
nothing calls this directly
no test coverage detected