@@ -1000,23 +1000,56 @@ TEST_F(TestStringParquetIO, EmptyStringColumnRequiredWrite) {
10001000using TestNullParquetIO = TestParquetIO<::arrow::NullType>;
10011001
10021002TEST_F (TestNullParquetIO, NullColumn) {
1003- std::shared_ptr<Array> values = std::make_shared<::arrow::NullArray>(SMALL_SIZE);
1004- std::shared_ptr<Table> table = MakeSimpleTable (values, true );
1005- this ->sink_ = std::make_shared<InMemoryOutputStream>();
1006- ASSERT_OK_NO_THROW (WriteTable (*table, ::arrow::default_memory_pool (), this ->sink_ ,
1007- values->length (), default_writer_properties ()));
1003+ for (int32_t num_rows : {0 , SMALL_SIZE}) {
1004+ std::shared_ptr<Array> values = std::make_shared<::arrow::NullArray>(num_rows);
1005+ std::shared_ptr<Table> table = MakeSimpleTable (values, true /* nullable */ );
1006+ this ->sink_ = std::make_shared<InMemoryOutputStream>();
10081007
1009- std::shared_ptr<Table> out;
1010- std::unique_ptr<FileReader> reader;
1011- this ->ReaderFromSink (&reader);
1012- this ->ReadTableFromFile (std::move (reader), &out);
1013- ASSERT_EQ (1 , out->num_columns ());
1014- ASSERT_EQ (100 , out->num_rows ());
1008+ const int64_t chunk_size = std::max (static_cast <int64_t >(1 ), table->num_rows ());
1009+ ASSERT_OK_NO_THROW (WriteTable (*table, ::arrow::default_memory_pool (), this ->sink_ ,
1010+ chunk_size, default_writer_properties ()));
10151011
1016- std::shared_ptr<ChunkedArray> chunked_array = out->column (0 )->data ();
1017- ASSERT_EQ (1 , chunked_array->num_chunks ());
1012+ std::shared_ptr<Table> out;
1013+ std::unique_ptr<FileReader> reader;
1014+ this ->ReaderFromSink (&reader);
1015+ this ->ReadTableFromFile (std::move (reader), &out);
1016+ ASSERT_EQ (1 , out->num_columns ());
1017+ ASSERT_EQ (num_rows, out->num_rows ());
10181018
1019- internal::AssertArraysEqual (*values, *chunked_array->chunk (0 ));
1019+ std::shared_ptr<ChunkedArray> chunked_array = out->column (0 )->data ();
1020+ ASSERT_EQ (1 , chunked_array->num_chunks ());
1021+ internal::AssertArraysEqual (*values, *chunked_array->chunk (0 ));
1022+ }
1023+ }
1024+
1025+ TEST_F (TestNullParquetIO, NullListColumn) {
1026+ std::vector<int32_t > offsets1 = {0 };
1027+ std::vector<int32_t > offsets2 = {0 , 2 , 2 , 3 , 115 };
1028+ for (std::vector<int32_t > offsets : {offsets1, offsets2}) {
1029+ std::shared_ptr<Array> offsets_array, values_array, list_array;
1030+ ::arrow::ArrayFromVector<::arrow::Int32Type, int32_t >(offsets, &offsets_array);
1031+ values_array = std::make_shared<::arrow::NullArray>(offsets.back ());
1032+ ASSERT_OK (::arrow::ListArray::FromArrays (*offsets_array, *values_array,
1033+ default_memory_pool (), &list_array));
1034+
1035+ std::shared_ptr<Table> table = MakeSimpleTable (list_array, false /* nullable */ );
1036+ this ->sink_ = std::make_shared<InMemoryOutputStream>();
1037+
1038+ const int64_t chunk_size = std::max (static_cast <int64_t >(1 ), table->num_rows ());
1039+ ASSERT_OK_NO_THROW (WriteTable (*table, ::arrow::default_memory_pool (), this ->sink_ ,
1040+ chunk_size, default_writer_properties ()));
1041+
1042+ std::shared_ptr<Table> out;
1043+ std::unique_ptr<FileReader> reader;
1044+ this ->ReaderFromSink (&reader);
1045+ this ->ReadTableFromFile (std::move (reader), &out);
1046+ ASSERT_EQ (1 , out->num_columns ());
1047+ ASSERT_EQ (offsets.size () - 1 , out->num_rows ());
1048+
1049+ std::shared_ptr<ChunkedArray> chunked_array = out->column (0 )->data ();
1050+ ASSERT_EQ (1 , chunked_array->num_chunks ());
1051+ internal::AssertArraysEqual (*list_array, *chunked_array->chunk (0 ));
1052+ }
10201053}
10211054
10221055TEST_F (TestNullParquetIO, NullDictionaryColumn) {
0 commit comments