1919#include < cstdint>
2020#include < cstdlib>
2121#include < cstring>
22+ #include < memory>
23+ #include < optional>
2224#include < set>
2325#include < vector>
2426
2527#include " gtest/gtest.h"
2628#include " paimon/core/deletionvectors/bitmap64_deletion_vector.h"
2729#include " paimon/core/deletionvectors/bitmap_deletion_vector.h"
30+ #include " paimon/core/io/data_file_meta.h"
31+ #include " paimon/core/table/source/deletion_file.h"
2832#include " paimon/io/byte_array_input_stream.h"
2933#include " paimon/io/byte_order.h"
3034#include " paimon/io/data_input_stream.h"
@@ -41,6 +45,16 @@ void AppendInt32BigEndian(std::vector<uint8_t>* bytes, int32_t value) {
4145 bytes->push_back (static_cast <uint8_t >(value & 0xFF ));
4246}
4347
48+ std::shared_ptr<DataFileMeta> CreateDataFileMeta (const std::string& file_name) {
49+ return std::make_shared<DataFileMeta>(
50+ file_name, /* file_size=*/ 100 , /* row_count=*/ 10 , DataFileMeta::EmptyMinKey (),
51+ DataFileMeta::EmptyMaxKey (), SimpleStats::EmptyStats (), SimpleStats::EmptyStats (),
52+ /* min_sequence_number=*/ 0 , /* max_sequence_number=*/ 0 , /* schema_id=*/ 0 ,
53+ DataFileMeta::DUMMY_LEVEL , std::vector<std::optional<std::string>>{}, Timestamp (0 , 0 ),
54+ std::nullopt , nullptr , FileSource::Append (), std::nullopt , std::nullopt , std::nullopt ,
55+ std::nullopt );
56+ }
57+
4458} // namespace
4559
4660TEST (DeletionVectorTest, TestSimple) {
@@ -161,4 +175,24 @@ TEST(DeletionVectorTest, ReadFromDataInputStreamInvalidMagicNumber) {
161175 " Invalid magic number" );
162176}
163177
178+ TEST (DeletionVectorTest, CreateDeletionFileMap) {
179+ std::vector<std::shared_ptr<DataFileMeta>> data_files = {CreateDataFileMeta (" file-0.orc" ),
180+ CreateDataFileMeta (" file-1.orc" ),
181+ CreateDataFileMeta (" file-2.orc" )};
182+
183+ auto empty_map = DeletionVector::CreateDeletionFileMap (data_files, {});
184+ ASSERT_TRUE (empty_map.empty ());
185+
186+ DeletionFile deletion_file_0 (" dv-0" , /* offset=*/ 10 , /* length=*/ 20 , /* cardinality=*/ 3 );
187+ DeletionFile deletion_file_2 (" dv-2" , /* offset=*/ 30 , /* length=*/ 40 , std::nullopt );
188+ std::vector<std::optional<DeletionFile>> deletion_files = {deletion_file_0, std::nullopt ,
189+ deletion_file_2};
190+
191+ auto deletion_file_map = DeletionVector::CreateDeletionFileMap (data_files, deletion_files);
192+ ASSERT_EQ (deletion_file_map.size (), 2 );
193+ ASSERT_EQ (deletion_file_map.at (" file-0.orc" ), deletion_file_0);
194+ ASSERT_EQ (deletion_file_map.count (" file-1.orc" ), 0 );
195+ ASSERT_EQ (deletion_file_map.at (" file-2.orc" ), deletion_file_2);
196+ }
197+
164198} // namespace paimon::test
0 commit comments