2424#include " parquet/arrow/test-util.h"
2525#include " parquet/arrow/writer.h"
2626
27+ #include " arrow/io/memory.h"
2728#include " arrow/test-util.h"
2829#include " arrow/types/construct.h"
2930#include " arrow/types/primitive.h"
@@ -342,6 +343,29 @@ TYPED_TEST(TestParquetIO, SingleColumnTableRequiredChunkedWrite) {
342343 this ->ReadAndCheckSingleColumnTable (values);
343344}
344345
346+ TYPED_TEST (TestParquetIO, SingleColumnTableRequiredChunkedWriteArrowIO) {
347+ std::shared_ptr<Array> values;
348+ ASSERT_OK (NonNullArray<TypeParam>(LARGE_SIZE, &values));
349+ std::shared_ptr<Table> table = MakeSimpleTable (values, false );
350+ this ->sink_ = std::make_shared<InMemoryOutputStream>();
351+ auto buffer = std::make_shared<::arrow::PoolBuffer>();
352+ auto arrow_sink_ = std::make_shared<::arrow::io::BufferOutputStream>(buffer);
353+ ASSERT_OK_NO_THROW (WriteFlatTable (
354+ table.get (), default_memory_pool (), arrow_sink_, 512 , default_writer_properties ()));
355+
356+ std::shared_ptr<ParquetBuffer> pbuffer =
357+ std::make_shared<ParquetBuffer>(buffer->data (), buffer->size ());
358+ std::unique_ptr<RandomAccessSource> source (new BufferReader (pbuffer));
359+ std::shared_ptr<::arrow::Table> out;
360+ this ->ReadTableFromFile (ParquetFileReader::Open (std::move (source)), &out);
361+ ASSERT_EQ (1 , out->num_columns ());
362+ ASSERT_EQ (values->length (), out->num_rows ());
363+
364+ std::shared_ptr<ChunkedArray> chunked_array = out->column (0 )->data ();
365+ ASSERT_EQ (1 , chunked_array->num_chunks ());
366+ ASSERT_TRUE (values->Equals (chunked_array->chunk (0 )));
367+ }
368+
345369TYPED_TEST (TestParquetIO, SingleColumnOptionalChunkedWrite) {
346370 int64_t chunk_size = SMALL_SIZE / 4 ;
347371 std::shared_ptr<Array> values;
@@ -456,10 +480,20 @@ TEST_F(TestStringParquetIO, EmptyStringColumnRequiredWrite) {
456480template <typename T>
457481using ParquetCDataType = typename ParquetDataType<T>::c_type;
458482
483+ template <typename T>
484+ struct c_type_trait {
485+ using ArrowCType = typename T::c_type;
486+ };
487+
488+ template <>
489+ struct c_type_trait <::arrow::BooleanType> {
490+ using ArrowCType = uint8_t ;
491+ };
492+
459493template <typename TestType>
460494class TestPrimitiveParquetIO : public TestParquetIO <TestType> {
461495 public:
462- typedef typename TestType::c_type T;
496+ typedef typename c_type_trait< TestType>::ArrowCType T;
463497
464498 void MakeTestFile (std::vector<T>& values, int num_chunks,
465499 std::unique_ptr<ParquetFileReader>* file_reader) {
@@ -497,7 +531,7 @@ class TestPrimitiveParquetIO : public TestParquetIO<TestType> {
497531
498532 std::shared_ptr<ChunkedArray> chunked_array = out->column (0 )->data ();
499533 ASSERT_EQ (1 , chunked_array->num_chunks ());
500- ExpectArray <TestType>(values.data (), chunked_array->chunk (0 ).get ());
534+ ExpectArrayT <TestType>(values.data (), chunked_array->chunk (0 ).get ());
501535 }
502536
503537 void CheckSingleColumnRequiredRead (int num_chunks) {
@@ -508,7 +542,7 @@ class TestPrimitiveParquetIO : public TestParquetIO<TestType> {
508542 std::shared_ptr<Array> out;
509543 this ->ReadSingleColumnFile (std::move (file_reader), &out);
510544
511- ExpectArray <TestType>(values.data (), out.get ());
545+ ExpectArrayT <TestType>(values.data (), out.get ());
512546 }
513547};
514548
0 commit comments