@@ -63,7 +63,8 @@ Status WriteArray(std::shared_ptr<::arrow::Array> data,
6363}
6464
6565Status ReadArray (std::shared_ptr<::arrow::Array>& out,
66- const ReaderOptions& reader_options) {
66+ const ReaderOptions& reader_options,
67+ std::unordered_map<std::string, std::string>* metadata) {
6768 ICEBERG_ASSIGN_OR_RAISE (
6869 auto reader, ReaderFactoryRegistry::Open (FileFormatType::kParquet , reader_options));
6970 ICEBERG_ASSIGN_OR_RAISE (auto read_data, reader->Next ());
@@ -77,6 +78,11 @@ Status ReadArray(std::shared_ptr<::arrow::Array>& out,
7778 ICEBERG_ASSIGN_OR_RAISE (ArrowSchema arrow_schema, reader->Schema ());
7879 ICEBERG_ARROW_ASSIGN_OR_RETURN (out,
7980 ::arrow::ImportArray (&arrow_c_array, &arrow_schema));
81+
82+ if (metadata) {
83+ ICEBERG_ASSIGN_OR_RAISE (*metadata, reader->Metadata ());
84+ }
85+
8086 return {};
8187}
8288
@@ -85,18 +91,25 @@ void DoRoundtrip(std::shared_ptr<::arrow::Array> data, std::shared_ptr<Schema> s
8591 std::shared_ptr<FileIO> file_io = arrow::ArrowFileSystemFileIO::MakeMockFileIO ();
8692 const std::string basePath = " base.parquet" ;
8793
94+ std::unordered_map<std::string, std::string> metadata = {{" k1" , " v1" }, {" k2" , " v2" }};
95+
8896 auto writer_data = WriterFactoryRegistry::Open (
89- FileFormatType::kParquet , {.path = basePath, .schema = schema, .io = file_io});
97+ FileFormatType::kParquet ,
98+ {.path = basePath, .schema = schema, .io = file_io, .metadata = metadata});
9099 ASSERT_THAT (writer_data, IsOk ())
91100 << " Failed to create writer: " << writer_data.error ().message ;
92101 auto writer = std::move (writer_data.value ());
93102 ASSERT_THAT (WriteArray (data, *writer), IsOk ());
94103
95- ASSERT_THAT (ReadArray (out, {.path = basePath,
96- .length = writer->length (),
97- .io = file_io,
98- .projection = schema}),
104+ std::unordered_map<std::string, std::string> read_metadata;
105+ ASSERT_THAT (ReadArray (out,
106+ {.path = basePath,
107+ .length = writer->length (),
108+ .io = file_io,
109+ .projection = schema},
110+ &read_metadata),
99111 IsOk ());
112+ ASSERT_EQ (read_metadata, metadata);
100113
101114 ASSERT_TRUE (out != nullptr ) << " Reader.Next() returned no data" ;
102115}
0 commit comments