|
20 | 20 |
|
21 | 21 | #include "gtest/gtest.h" |
22 | 22 | #include "paimon/status.h" |
| 23 | +#include "paimon/testing/utils/binary_row_generator.h" |
23 | 24 | #include "paimon/testing/utils/testharness.h" |
24 | 25 |
|
25 | 26 | namespace paimon::test { |
| 27 | +TEST(DataFileMetaTest, TestCopyWithoutStats) { |
| 28 | + std::shared_ptr<MemoryPool> pool = GetDefaultPool(); |
| 29 | + SimpleStats value_stats = BinaryRowGenerator::GenerateStats( |
| 30 | + {1, std::string("a")}, {5, std::string("z")}, {0, 1}, pool.get()); |
| 31 | + auto file_meta = std::make_shared<DataFileMeta>( |
| 32 | + "data-0.orc", /*file_size=*/645, /*row_count=*/5, BinaryRow::EmptyRow(), |
| 33 | + BinaryRow::EmptyRow(), SimpleStats::EmptyStats(), value_stats, |
| 34 | + /*min_sequence_number=*/0, /*max_sequence_number=*/4, /*schema_id=*/0, |
| 35 | + /*level=*/0, /*extra_files=*/std::vector<std::optional<std::string>>(), |
| 36 | + /*creation_time=*/Timestamp(1737111915429ll, 0), |
| 37 | + /*delete_row_count=*/2, /*embedded_index=*/nullptr, FileSource::Append(), |
| 38 | + /*value_stats_cols=*/std::vector<std::string>({"f0", "f1"}), |
| 39 | + /*external_path=*/"file:/tmp/bucket-0/data-0.orc", /*first_row_id=*/100, |
| 40 | + /*write_cols=*/std::vector<std::string>({"f0"})); |
| 41 | + |
| 42 | + std::shared_ptr<DataFileMeta> result = file_meta->CopyWithoutStats(); |
| 43 | + |
| 44 | + ASSERT_NE(file_meta.get(), result.get()); |
| 45 | + DataFileMeta expected = *file_meta; |
| 46 | + expected.value_stats = SimpleStats::EmptyStats(); |
| 47 | + expected.value_stats_cols = std::vector<std::string>(); |
| 48 | + ASSERT_EQ(expected, *result); |
| 49 | + ASSERT_EQ(value_stats, file_meta->value_stats); |
| 50 | + ASSERT_EQ(std::vector<std::string>({"f0", "f1"}), file_meta->value_stats_cols.value()); |
| 51 | + |
| 52 | + // Upgrade cannot restore stats once they have been dropped. Writer restore must therefore |
| 53 | + // retain full stats for metadata-only ADD entries; see the Paimon Java bug at |
| 54 | + // https://github.com/apache/paimon/issues/7026. |
| 55 | + ASSERT_OK_AND_ASSIGN(std::shared_ptr<DataFileMeta> upgraded, result->Upgrade(/*new_level=*/1)); |
| 56 | + ASSERT_EQ(SimpleStats::EmptyStats(), upgraded->value_stats); |
| 57 | + ASSERT_TRUE(upgraded->value_stats_cols.has_value()); |
| 58 | + ASSERT_TRUE(upgraded->value_stats_cols->empty()); |
| 59 | +} |
| 60 | + |
26 | 61 | TEST(DataFileMetaTest, TestAddRowCount) { |
27 | 62 | DataFileMeta file_meta("data-80110e15-97b5-4bcf-ac09-6ca2659a4950-0.orc", /*file_size=*/645, |
28 | 63 | /*row_count=*/5, BinaryRow::EmptyRow(), BinaryRow::EmptyRow(), |
|
0 commit comments