MCPcopy Create free account
hub / github.com/apache/arrow / GetFragmentsImpl

Method GetFragmentsImpl

cpp/src/arrow/dataset/file_base.cc:307–346  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

305}
306
307Result<FragmentIterator> FileSystemDataset::GetFragmentsImpl(
308 compute::Expression predicate) {
309 if (predicate == compute::literal(true)) {
310 // trivial predicate; skip subtree pruning
311 return MakeVectorIterator(FragmentVector(fragments_.begin(), fragments_.end()));
312 }
313
314 std::vector<int> fragment_indices;
315
316 std::vector<compute::Expression> predicates{predicate};
317 RETURN_NOT_OK(subtrees_->forest.Visit(
318 [&](Forest::Ref ref) -> Result<bool> {
319 if (auto fragment_index =
320 std::get_if<int>(&subtrees_->fragments_and_subtrees[ref.i])) {
321 fragment_indices.push_back(*fragment_index);
322 return false;
323 }
324
325 const auto& subtree_expr =
326 std::get<compute::Expression>(subtrees_->fragments_and_subtrees[ref.i]);
327 ARROW_ASSIGN_OR_RAISE(auto simplified,
328 SimplifyWithGuarantee(predicates.back(), subtree_expr));
329
330 if (!simplified.IsSatisfiable()) {
331 return false;
332 }
333
334 predicates.push_back(std::move(simplified));
335 return true;
336 },
337 [&](Forest::Ref ref) { predicates.pop_back(); }));
338
339 std::sort(fragment_indices.begin(), fragment_indices.end());
340
341 FragmentVector fragments(fragment_indices.size());
342 std::transform(fragment_indices.begin(), fragment_indices.end(), fragments.begin(),
343 [this](int i) { return fragments_[i]; });
344
345 return MakeVectorIterator(std::move(fragments));
346}
347
348Status FileWriter::Write(RecordBatchReader* batches) {
349 while (true) {

Callers

nothing calls this directly

Calls 8

MakeVectorIteratorFunction · 0.85
push_backMethod · 0.80
IsSatisfiableMethod · 0.80
literalFunction · 0.50
beginMethod · 0.45
endMethod · 0.45
VisitMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected