| 1270 | } |
| 1271 | |
| 1272 | RowVectorPtr HashProbe::fillFilterInput(vector_size_t size) { |
| 1273 | std::vector<VectorPtr> filterColumns(filterInputType_->size()); |
| 1274 | for (auto projection : filterInputProjections_) { |
| 1275 | if (std::any_of( |
| 1276 | projectedInputColumns_.begin(), |
| 1277 | projectedInputColumns_.end(), |
| 1278 | [&](const auto& p) { |
| 1279 | return p.inputChannel == projection.inputChannel; |
| 1280 | })) { |
| 1281 | // If the column is projected to the output, ensure it's loaded if it's |
| 1282 | // lazy in case the filter only loads an incomplete subset of the rows |
| 1283 | // that will be output. |
| 1284 | ensureLoaded(projection.inputChannel); |
| 1285 | } else { |
| 1286 | // If the column isn't projected to the output, the Vector will only be |
| 1287 | // reused if we've broken the input batch into multiple output batches, |
| 1288 | // i.e. if results_ is not at the end of the iterator. |
| 1289 | ensureLoadedIfNotAtEnd(projection.inputChannel); |
| 1290 | } |
| 1291 | } |
| 1292 | |
| 1293 | wrapIndirectChildren( |
| 1294 | filterInputProjections_, |
| 1295 | input_->children(), |
| 1296 | size, |
| 1297 | outputRowMapping_, |
| 1298 | filterColumns); |
| 1299 | |
| 1300 | extractColumns( |
| 1301 | table_.get(), |
| 1302 | folly::Range<char**>(outputTableRows_.data(), size), |
| 1303 | filterTableProjections_, |
| 1304 | pool(), |
| 1305 | filterInputType_->children(), |
| 1306 | filterColumns); |
| 1307 | |
| 1308 | return std::make_shared<RowVector>( |
| 1309 | pool(), filterInputType_, nullptr, size, std::move(filterColumns)); |
| 1310 | } |
| 1311 | |
| 1312 | void HashProbe::prepareFilterRowsForNullAwareJoin( |
| 1313 | const RowVector* filterInput, |
nothing calls this directly
no test coverage detected