| 273 | } |
| 274 | |
| 275 | void PartitionedHashJoinNode::CloseAndDeletePartitions(RowBatch* row_batch) { |
| 276 | // Close all the partitions and clean up all references to them. |
| 277 | for (unique_ptr<ProbePartition>& partition : probe_hash_partitions_) { |
| 278 | if (partition != nullptr) partition->Close(row_batch); |
| 279 | } |
| 280 | probe_hash_partitions_.clear(); |
| 281 | for (auto& entry : spilled_partitions_) entry.second->Close(row_batch); |
| 282 | spilled_partitions_.clear(); |
| 283 | if (input_partition_ != nullptr) { |
| 284 | input_partition_->Close(row_batch); |
| 285 | input_partition_.reset(); |
| 286 | } |
| 287 | if (null_aware_probe_partition_ != nullptr) { |
| 288 | null_aware_probe_partition_->Close(row_batch); |
| 289 | null_aware_probe_partition_.reset(); |
| 290 | } |
| 291 | for (unique_ptr<PhjBuilderPartition>& partition : output_build_partitions_) { |
| 292 | partition->Close(row_batch); |
| 293 | } |
| 294 | output_build_partitions_.clear(); |
| 295 | if (null_probe_rows_ != nullptr) { |
| 296 | null_probe_rows_->Close(row_batch, RowBatch::FlushMode::NO_FLUSH_RESOURCES); |
| 297 | null_probe_rows_.reset(); |
| 298 | } |
| 299 | } |
| 300 | |
| 301 | void PartitionedHashJoinNode::Close(RuntimeState* state) { |
| 302 | if (is_closed()) return; |