| 876 | |
| 877 | protected: |
| 878 | Future<> InitAfterFirstBuffer(const std::shared_ptr<Buffer>& first_buffer, |
| 879 | AsyncGenerator<std::shared_ptr<Buffer>> buffer_generator, |
| 880 | int max_readahead) { |
| 881 | if (first_buffer == nullptr) { |
| 882 | return Status::Invalid("Empty CSV file"); |
| 883 | } |
| 884 | |
| 885 | std::shared_ptr<Buffer> after_header; |
| 886 | ARROW_ASSIGN_OR_RAISE(auto header_bytes_consumed, |
| 887 | ProcessHeader(first_buffer, &after_header)); |
| 888 | bytes_decoded_->fetch_add(header_bytes_consumed); |
| 889 | |
| 890 | ARROW_ASSIGN_OR_RAISE( |
| 891 | auto decoder_op, |
| 892 | BlockDecodingOperator::Make(io_context_, convert_options_, conversion_schema_)); |
| 893 | |
| 894 | auto block_gen = SerialBlockReader::MakeAsyncIterator( |
| 895 | std::move(buffer_generator), MakeChunker(parse_options_), std::move(after_header), |
| 896 | read_options_.skip_rows_after_names); |
| 897 | auto parsed_block_gen = MakeMappedGenerator(std::move(block_gen), *parsing_operator_); |
| 898 | auto rb_gen = MakeMappedGenerator(std::move(parsed_block_gen), std::move(decoder_op)); |
| 899 | |
| 900 | auto self = shared_from_this(); |
| 901 | return rb_gen().Then([self, rb_gen, max_readahead](const DecodedBlock& first_block) { |
| 902 | return self->InitFromBlock(first_block, std::move(rb_gen), max_readahead, 0); |
| 903 | }); |
| 904 | } |
| 905 | |
| 906 | Future<> InitFromBlock(const DecodedBlock& block, |
| 907 | AsyncGenerator<DecodedBlock> batch_gen, int max_readahead, |
no test coverage detected