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

Method ReadNext

cpp/src/arrow/table.cc:687–737  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

685void TableBatchReader::set_chunksize(int64_t chunksize) { max_chunksize_ = chunksize; }
686
687Status TableBatchReader::ReadNext(std::shared_ptr<RecordBatch>* out) {
688 if (absolute_row_position_ == table_.num_rows()) {
689 *out = nullptr;
690 return Status::OK();
691 }
692
693 // Determine the minimum contiguous slice across all columns
694 int64_t chunksize =
695 std::min(table_.num_rows() - absolute_row_position_, max_chunksize_);
696 std::vector<const Array*> chunks(table_.num_columns());
697 for (int i = 0; i < table_.num_columns(); ++i) {
698 auto chunk = column_data_[i]->chunk(chunk_numbers_[i]).get();
699 int64_t chunk_remaining = chunk->length() - chunk_offsets_[i];
700
701 if (chunk_remaining < chunksize) {
702 chunksize = chunk_remaining;
703 }
704
705 chunks[i] = chunk;
706 }
707
708 // Slice chunks and advance chunk index as appropriate
709 std::vector<std::shared_ptr<ArrayData>> batch_data(table_.num_columns());
710
711 for (int i = 0; i < table_.num_columns(); ++i) {
712 // Exhausted chunk
713 const Array* chunk = chunks[i];
714 const int64_t offset = chunk_offsets_[i];
715 std::shared_ptr<ArrayData> slice_data;
716 if ((chunk->length() - offset) == chunksize) {
717 ++chunk_numbers_[i];
718 chunk_offsets_[i] = 0;
719 if (offset > 0) {
720 // Need to slice
721 slice_data = chunk->Slice(offset, chunksize)->data();
722 } else {
723 // No slice
724 slice_data = chunk->data();
725 }
726 } else {
727 chunk_offsets_[i] += chunksize;
728 slice_data = chunk->Slice(offset, chunksize)->data();
729 }
730 batch_data[i] = std::move(slice_data);
731 }
732
733 absolute_row_position_ += chunksize;
734 *out = RecordBatch::Make(table_.schema(), chunksize, std::move(batch_data));
735
736 return Status::OK();
737}
738
739} // namespace arrow

Callers 3

table_test.ccFile · 0.45
TEST_FFunction · 0.45

Calls 9

OKFunction · 0.70
MakeFunction · 0.70
num_rowsMethod · 0.45
num_columnsMethod · 0.45
getMethod · 0.45
lengthMethod · 0.45
dataMethod · 0.45
SliceMethod · 0.45
schemaMethod · 0.45

Tested by 1

TEST_FFunction · 0.36