This is an automated email from the ASF dual-hosted git repository.

SteNicholas pushed a commit to branch release-0.3
in repository https://gitbox.apache.org/repos/asf/paimon-cpp.git

commit 794d39475677fada444d38f908511c0f4a83d75c
Author: lszskye <[email protected]>
AuthorDate: Tue Aug 4 23:29:49 2026 -0700

    feat: update commit message to version 12 (#179)
    
    * feat: update commit message to version 12
    
    * add compatibility test
    
    * fix pre-commit
---
 src/paimon/core/index/global_index_meta.cpp        |  39 ++++++-
 src/paimon/core/index/global_index_meta.h          |   8 +-
 .../core/index/index_file_meta_serializer_test.cpp |  31 +++++
 .../core/index/index_file_meta_v4_deserializer.h   | 125 +++++++++++++++++++++
 .../core/table/sink/commit_message_serializer.cpp  |   8 +-
 src/paimon/core/table/sink/commit_message_test.cpp |  35 +++++-
 .../pk_btree_source_meta/README                    |  32 ++++++
 ...data-022e32ce-1d75-4b9a-8496-a3311c44bad0-0.orc | Bin 0 -> 694 bytes
 ...data-293d6705-bd19-4986-9aa0-3a24443e7e8e-0.orc | Bin 0 -> 722 bytes
 ...data-b4949ff6-78f4-4e58-86ad-33eb3e5e6749-0.orc | Bin 0 -> 694 bytes
 ...data-b5896b79-1c4d-4359-920a-ce719ea303af-0.orc | Bin 0 -> 713 bytes
 ...data-c2e3ff2f-a3e1-48a1-8bb1-f868477c796a-0.orc | Bin 0 -> 722 bytes
 .../commit_messages/commit_messages-01             | Bin 0 -> 1633 bytes
 .../index-05388eac-7c9d-48cf-9053-f68b800ebe9e-0   | Bin 0 -> 112 bytes
 .../index-5d1ef2e5-c136-4059-8380-fe5d60344f83-0   | Bin 0 -> 112 bytes
 .../index-759d0483-a0e7-417b-8c3d-288f36679770-0   | Bin 0 -> 96 bytes
 ...manifest-0216d085-645d-486b-9ebb-e48df26b8aa7-0 | Bin 0 -> 1970 bytes
 ...manifest-5ba1f8c6-fcde-45f8-b59b-a948ef3013be-0 | Bin 0 -> 1970 bytes
 ...manifest-d347fbd7-d7cc-4e5e-9f4a-efa8d0ce8651-0 | Bin 0 -> 1961 bytes
 ...manifest-180aa8f5-0932-462f-8f02-a1000b585552-0 | Bin 0 -> 3083 bytes
 ...manifest-e108640e-b3a6-499d-9821-fe36afde58d6-0 | Bin 0 -> 2815 bytes
 ...manifest-e108640e-b3a6-499d-9821-fe36afde58d6-1 | Bin 0 -> 3078 bytes
 ...manifest-fbd7c824-c952-4f2b-ad6c-0227a823a745-0 | Bin 0 -> 2833 bytes
 ...manifest-fbd7c824-c952-4f2b-ad6c-0227a823a745-1 | Bin 0 -> 3184 bytes
 ...est-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-0 | Bin 0 -> 392 bytes
 ...est-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-1 | Bin 0 -> 1533 bytes
 ...est-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-2 | Bin 0 -> 1533 bytes
 ...est-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-3 | Bin 0 -> 1543 bytes
 ...est-list-6678a969-de46-4cb3-b744-36a17ac35371-0 | Bin 0 -> 1603 bytes
 ...est-list-6678a969-de46-4cb3-b744-36a17ac35371-1 | Bin 0 -> 1529 bytes
 ...est-list-6678a969-de46-4cb3-b744-36a17ac35371-2 | Bin 0 -> 1713 bytes
 ...est-list-6678a969-de46-4cb3-b744-36a17ac35371-3 | Bin 0 -> 1548 bytes
 ...est-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-0 | Bin 0 -> 1723 bytes
 ...est-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-1 | Bin 0 -> 1554 bytes
 .../pk_btree_source_meta/schema/schema-0           |  30 +++++
 .../pk_btree_source_meta/snapshot/EARLIEST         |   1 +
 .../pk_btree_source_meta/snapshot/LATEST           |   1 +
 .../pk_btree_source_meta/snapshot/snapshot-1       |  17 +++
 .../pk_btree_source_meta/snapshot/snapshot-2       |  18 +++
 .../pk_btree_source_meta/snapshot/snapshot-3       |  18 +++
 .../pk_btree_source_meta/snapshot/snapshot-4       |  18 +++
 .../pk_btree_source_meta/snapshot/snapshot-5       |  18 +++
 42 files changed, 390 insertions(+), 9 deletions(-)

diff --git a/src/paimon/core/index/global_index_meta.cpp 
b/src/paimon/core/index/global_index_meta.cpp
index ffe05e3..ab18280 100644
--- a/src/paimon/core/index/global_index_meta.cpp
+++ b/src/paimon/core/index/global_index_meta.cpp
@@ -33,11 +33,20 @@ GlobalIndexMeta::GlobalIndexMeta(int64_t _row_range_start, 
int64_t _row_range_en
                                  int32_t _index_field_id,
                                  const std::optional<std::vector<int32_t>>& 
_extra_field_ids,
                                  const std::shared_ptr<Bytes>& _index_meta)
+    : GlobalIndexMeta(_row_range_start, _row_range_end, _index_field_id, 
_extra_field_ids,
+                      _index_meta, nullptr) {}
+
+GlobalIndexMeta::GlobalIndexMeta(int64_t _row_range_start, int64_t 
_row_range_end,
+                                 int32_t _index_field_id,
+                                 const std::optional<std::vector<int32_t>>& 
_extra_field_ids,
+                                 const std::shared_ptr<Bytes>& _index_meta,
+                                 const std::shared_ptr<Bytes>& _source_meta)
     : row_range_start(_row_range_start),
       row_range_end(_row_range_end),
       index_field_id(_index_field_id),
       extra_field_ids(_extra_field_ids),
-      index_meta(_index_meta) {}
+      index_meta(_index_meta),
+      source_meta(_source_meta) {}
 
 bool GlobalIndexMeta::operator==(const GlobalIndexMeta& other) const {
     if (this == &other) {
@@ -49,6 +58,12 @@ bool GlobalIndexMeta::operator==(const GlobalIndexMeta& 
other) const {
     if (index_meta && other.index_meta && !(*index_meta == *other.index_meta)) 
{
         return false;
     }
+    if ((source_meta && !other.source_meta) || (!source_meta && 
other.source_meta)) {
+        return false;
+    }
+    if (source_meta && other.source_meta && !(*source_meta == 
*other.source_meta)) {
+        return false;
+    }
     return row_range_start == other.row_range_start && row_range_end == 
other.row_range_end &&
            index_field_id == other.index_field_id && extra_field_ids == 
other.extra_field_ids;
 }
@@ -61,14 +76,17 @@ std::string GlobalIndexMeta::ToString() const {
 
     std::string index_meta_str =
         index_meta == nullptr ? "null" : std::string(index_meta->data(), 
index_meta->size());
+    std::string source_meta_str =
+        source_meta == nullptr ? "null" : std::string(source_meta->data(), 
source_meta->size());
     return fmt::format(
         "{{row_range_start={}, row_range_end={}, index_field_id={}, 
extra_field_ids={}, "
-        "index_meta={}}}",
-        row_range_start, row_range_end, index_field_id, extra_field_ids_str, 
index_meta_str);
+        "index_meta={}, source_meta={}}}",
+        row_range_start, row_range_end, index_field_id, extra_field_ids_str, 
index_meta_str,
+        source_meta_str);
 }
 
 BinaryRow GlobalIndexMeta::ToRow(MemoryPool* pool) const {
-    BinaryRow row(5);
+    BinaryRow row(6);
     BinaryRowWriter writer(&row, 32 * 1024, pool);
     writer.WriteLong(0, row_range_start);
     writer.WriteLong(1, row_range_end);
@@ -83,6 +101,11 @@ BinaryRow GlobalIndexMeta::ToRow(MemoryPool* pool) const {
     } else {
         writer.WriteBinary(4, *index_meta);
     }
+    if (source_meta == nullptr) {
+        writer.SetNullAt(5);
+    } else {
+        writer.WriteBinary(5, *source_meta);
+    }
     writer.Complete();
     return row;
 }
@@ -104,8 +127,13 @@ Result<GlobalIndexMeta> GlobalIndexMeta::FromRow(const 
InternalRow& row) {
         index_meta = row.GetBinary(4);
         assert(index_meta);
     }
+    std::shared_ptr<Bytes> source_meta;
+    if (!row.IsNullAt(5)) {
+        source_meta = row.GetBinary(5);
+        assert(source_meta);
+    }
     return GlobalIndexMeta(row_range_start, row_range_end, index_field_id, 
extra_field_ids,
-                           index_meta);
+                           index_meta, source_meta);
 }
 
 const std::shared_ptr<arrow::DataType>& GlobalIndexMeta::DataType() {
@@ -117,6 +145,7 @@ const std::shared_ptr<arrow::DataType>& 
GlobalIndexMeta::DataType() {
                      arrow::list(arrow::field("item", arrow::int32(), 
/*nullable=*/false)),
                      /*nullable=*/true),
         arrow::field("_INDEX_META", arrow::binary(), /*nullable=*/true),
+        arrow::field("_SOURCE_META", arrow::binary(), /*nullable=*/true),
     });
     return schema;
 }
diff --git a/src/paimon/core/index/global_index_meta.h 
b/src/paimon/core/index/global_index_meta.h
index a11cb82..2159936 100644
--- a/src/paimon/core/index/global_index_meta.h
+++ b/src/paimon/core/index/global_index_meta.h
@@ -31,12 +31,17 @@
 namespace paimon {
 /// Schema for global index.
 struct GlobalIndexMeta {
-    static constexpr int32_t NUM_FIELDS = 5;
+    static constexpr int32_t NUM_FIELDS = 6;
 
     GlobalIndexMeta(int64_t _row_range_start, int64_t _row_range_end, int32_t 
_index_field_id,
                     const std::optional<std::vector<int32_t>>& 
_extra_field_ids,
                     const std::shared_ptr<Bytes>& _index_meta);
 
+    GlobalIndexMeta(int64_t _row_range_start, int64_t _row_range_end, int32_t 
_index_field_id,
+                    const std::optional<std::vector<int32_t>>& 
_extra_field_ids,
+                    const std::shared_ptr<Bytes>& _index_meta,
+                    const std::shared_ptr<Bytes>& _source_meta);
+
     bool operator==(const GlobalIndexMeta& other) const;
 
     std::string ToString() const;
@@ -52,6 +57,7 @@ struct GlobalIndexMeta {
     int32_t index_field_id;
     std::optional<std::vector<int32_t>> extra_field_ids;
     std::shared_ptr<Bytes> index_meta;
+    std::shared_ptr<Bytes> source_meta;
 };
 
 }  // namespace paimon
diff --git a/src/paimon/core/index/index_file_meta_serializer_test.cpp 
b/src/paimon/core/index/index_file_meta_serializer_test.cpp
index 4db2ce3..ab1c77b 100644
--- a/src/paimon/core/index/index_file_meta_serializer_test.cpp
+++ b/src/paimon/core/index/index_file_meta_serializer_test.cpp
@@ -127,6 +127,37 @@ TEST_F(IndexFileMetaSerializerTest, 
TestToFromRowWithGlobalIndex) {
     }
 }
 
+TEST_F(IndexFileMetaSerializerTest, 
TestToFromRowWithGlobalIndexWithSourceMeta) {
+    auto index_meta_bytes = std::make_shared<Bytes>("apple", 
memory_pool_.get());
+    auto source_meta_bytes = std::make_shared<Bytes>("banana", 
memory_pool_.get());
+    IndexFileMetaSerializer serializer(memory_pool_);
+    GlobalIndexMeta global_index_meta(
+        /*row_range_start=*/10, /*row_range_end=*/50,
+        /*index_field_id=*/5, 
/*extra_field_ids=*/std::optional<std::vector<int32_t>>({0, 1}),
+        index_meta_bytes, source_meta_bytes);
+    {
+        auto expected =
+            std::make_shared<IndexFileMeta>("bitmap", "bitmap_index_file_0", 
/*file_size=*/10,
+                                            /*row_count=*/41, 
/*dv_ranges=*/std::nullopt,
+                                            /*external_path=*/std::nullopt, 
global_index_meta);
+        ASSERT_OK_AND_ASSIGN(BinaryRow row, serializer.ToRow(expected));
+        ASSERT_OK_AND_ASSIGN(std::shared_ptr<IndexFileMeta> actual, 
serializer.FromRow(row));
+        ASSERT_EQ(expected->ToString(), actual->ToString());
+        ASSERT_EQ(*expected, *actual);
+    }
+    {
+        // test external path
+        auto expected = std::make_shared<IndexFileMeta>(
+            "bitmap", "bitmap_index_file_0", /*file_size=*/10,
+            /*row_count=*/41, /*dv_ranges=*/std::nullopt,
+            /*external_path=*/"FILE:/tmp/external/bitmap_index_file_0", 
global_index_meta);
+        ASSERT_OK_AND_ASSIGN(BinaryRow row, serializer.ToRow(expected));
+        ASSERT_OK_AND_ASSIGN(std::shared_ptr<IndexFileMeta> actual, 
serializer.FromRow(row));
+        ASSERT_EQ(expected->ToString(), actual->ToString());
+        ASSERT_EQ(*expected, *actual);
+    }
+}
+
 TEST_F(IndexFileMetaSerializerTest, TestSerialize) {
     IndexFileMetaSerializer serializer(memory_pool_);
     auto expected = GetRandomDeletionVectorIndexFile();
diff --git a/src/paimon/core/index/index_file_meta_v4_deserializer.h 
b/src/paimon/core/index/index_file_meta_v4_deserializer.h
new file mode 100644
index 0000000..c7207f6
--- /dev/null
+++ b/src/paimon/core/index/index_file_meta_v4_deserializer.h
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#pragma once
+
+#include <cassert>
+#include <cstdint>
+#include <list>
+#include <memory>
+#include <optional>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "paimon/common/data/internal_array.h"
+#include "paimon/common/data/internal_row.h"
+#include "paimon/common/utils/linked_hash_map.h"
+#include "paimon/core/index/deletion_vector_meta.h"
+#include "paimon/core/index/index_file_meta.h"
+#include "paimon/core/index/index_file_meta_v2_deserializer.h"
+#include "paimon/core/utils/object_serializer.h"
+#include "paimon/result.h"
+
+namespace paimon {
+class MemoryPool;
+
+class IndexFileMetaV4Deserializer : public 
ObjectSerializer<std::shared_ptr<IndexFileMeta>> {
+ public:
+    static const std::shared_ptr<arrow::DataType>& GlobalIndexMetaDataType() {
+        static std::shared_ptr<arrow::DataType> schema = arrow::struct_({
+            arrow::field("_ROW_RANGE_START", arrow::int64(), 
/*nullable=*/false),
+            arrow::field("_ROW_RANGE_END", arrow::int64(), /*nullable=*/false),
+            arrow::field("_INDEX_FIELD_ID", arrow::int32(), 
/*nullable=*/false),
+            arrow::field("_EXTRA_FIELD_IDS",
+                         arrow::list(arrow::field("item", arrow::int32(), 
/*nullable=*/false)),
+                         /*nullable=*/true),
+            arrow::field("_INDEX_META", arrow::binary(), /*nullable=*/true),
+        });
+        return schema;
+    }
+
+    static const std::shared_ptr<arrow::DataType>& DataType() {
+        static std::shared_ptr<arrow::DataType> schema = arrow::struct_({
+            arrow::field("_INDEX_TYPE", arrow::utf8(), false),
+            arrow::field("_FILE_NAME", arrow::utf8(), false),
+            arrow::field("_FILE_SIZE", arrow::int64(), false),
+            arrow::field("_ROW_COUNT", arrow::int64(), false),
+            arrow::field("_DELETIONS_VECTORS_RANGES",
+                         arrow::list(arrow::field("item", 
DeletionVectorMeta::DataType(), true)),
+                         true),
+            arrow::field("_EXTERNAL_PATH", arrow::utf8(), true),
+            arrow::field("_GLOBAL_INDEX", GlobalIndexMetaDataType(), true),
+        });
+        return schema;
+    }
+
+    explicit IndexFileMetaV4Deserializer(const std::shared_ptr<MemoryPool>& 
pool)
+        : ObjectSerializer<std::shared_ptr<IndexFileMeta>>(DataType(), pool) {}
+
+    Result<BinaryRow> ToRow(const std::shared_ptr<IndexFileMeta>& meta) const 
override {
+        assert(false);
+        return Status::Invalid("IndexFileMetaV4Deserializer to row is not 
valid");
+    }
+
+    Result<std::shared_ptr<IndexFileMeta>> FromRow(const InternalRow& row) 
const override {
+        auto file_type = row.GetString(0);
+        auto file_name = row.GetString(1);
+        auto file_size = row.GetLong(2);
+        auto row_count = row.GetLong(3);
+        std::optional<LinkedHashMap<std::string, DeletionVectorMeta>> 
dv_ranges;
+        if (!row.IsNullAt(4)) {
+            dv_ranges = 
IndexFileMetaV2Deserializer::RowArrayDataToDvRanges(row.GetArray(4).get());
+        }
+        std::optional<std::string> external_path;
+        if (!row.IsNullAt(5)) {
+            external_path = row.GetString(5).ToString();
+        }
+        std::optional<GlobalIndexMeta> global_index_meta;
+        if (!row.IsNullAt(6)) {
+            std::shared_ptr<InternalRow> global_index_meta_row =
+                row.GetRow(6, GlobalIndexMetaDataType()->num_fields());
+            assert(global_index_meta_row);
+            int64_t row_range_start = global_index_meta_row->GetLong(0);
+            int64_t row_range_end = global_index_meta_row->GetLong(1);
+            int32_t index_field_id = global_index_meta_row->GetInt(2);
+            std::optional<std::vector<int32_t>> extra_field_ids;
+            if (!global_index_meta_row->IsNullAt(3)) {
+                std::shared_ptr<InternalArray> array = 
global_index_meta_row->GetArray(3);
+                if (!array) {
+                    return Status::Invalid(
+                        "GlobalIndexMeta FromRow failed with nullptr extra 
field ids");
+                }
+                PAIMON_ASSIGN_OR_RAISE(extra_field_ids, array->ToIntArray());
+            }
+            std::shared_ptr<Bytes> index_meta;
+            if (!global_index_meta_row->IsNullAt(4)) {
+                index_meta = global_index_meta_row->GetBinary(4);
+                assert(index_meta);
+            }
+            global_index_meta = GlobalIndexMeta(row_range_start, 
row_range_end, index_field_id,
+                                                extra_field_ids, index_meta);
+        }
+        return std::make_shared<IndexFileMeta>(file_type.ToString(), 
file_name.ToString(),
+                                               file_size, row_count, 
dv_ranges, external_path,
+                                               global_index_meta);
+    }
+};
+
+}  // namespace paimon
diff --git a/src/paimon/core/table/sink/commit_message_serializer.cpp 
b/src/paimon/core/table/sink/commit_message_serializer.cpp
index b2533a7..1b0645f 100644
--- a/src/paimon/core/table/sink/commit_message_serializer.cpp
+++ b/src/paimon/core/table/sink/commit_message_serializer.cpp
@@ -31,6 +31,7 @@
 #include "paimon/core/index/index_file_meta_v1_deserializer.h"
 #include "paimon/core/index/index_file_meta_v2_deserializer.h"
 #include "paimon/core/index/index_file_meta_v3_deserializer.h"
+#include "paimon/core/index/index_file_meta_v4_deserializer.h"
 #include "paimon/core/io/compact_increment.h"
 #include "paimon/core/io/data_file_meta_09_serializer.h"
 #include "paimon/core/io/data_file_meta_10_serializer.h"
@@ -45,7 +46,7 @@
 namespace paimon {
 class MemoryPool;
 
-const int32_t CommitMessageSerializer::CURRENT_VERSION = 11;
+const int32_t CommitMessageSerializer::CURRENT_VERSION = 12;
 
 CommitMessageSerializer::CommitMessageSerializer(const 
std::shared_ptr<MemoryPool>& pool)
     : memory_pool_(pool),
@@ -203,6 +204,11 @@ Result<std::shared_ptr<CommitMessage>> 
CommitMessageSerializer::Deserialize(int3
                                                                             
DataInputStream* in) {
     if (version == CURRENT_VERSION) {
         return Deserialize(version, data_file_serializer_.get(), 
index_entry_serializer_.get(), in);
+    } else if (version == 11) {
+        auto index_entry_v4_deserializer =
+            std::make_unique<IndexFileMetaV4Deserializer>(memory_pool_);
+        return Deserialize(version, data_file_serializer_.get(), 
index_entry_v4_deserializer.get(),
+                           in);
     } else if (version == 9 || version == 10) {
         auto index_entry_v3_deserializer =
             std::make_unique<IndexFileMetaV3Deserializer>(memory_pool_);
diff --git a/src/paimon/core/table/sink/commit_message_test.cpp 
b/src/paimon/core/table/sink/commit_message_test.cpp
index 6c00bb9..935e45d 100644
--- a/src/paimon/core/table/sink/commit_message_test.cpp
+++ b/src/paimon/core/table/sink/commit_message_test.cpp
@@ -65,6 +65,39 @@ TEST(CommitMessageTest, TestCurrentVersion) {
     ASSERT_EQ(CommitMessageSerializer::CURRENT_VERSION, 
CommitMessage::CurrentVersion());
 }
 
+TEST(CommitMessageTest, TestCompatibleWithVersion12) {
+    // index file meta: add global index meta source meta
+    int32_t version = 12;
+    std::string data_path = paimon::test::GetDataDir() +
+                            "orc/pk_btree_source_meta.db/pk_btree_source_meta/"
+                            "commit_messages/commit_messages-01";
+    auto file_system = std::make_shared<LocalFileSystem>();
+    auto buffer_length = 
file_system->GetFileStatus(data_path).value()->GetLen();
+
+    std::vector<char> buffer(buffer_length, 0);
+    ASSERT_OK_AND_ASSIGN(auto in_stream, file_system->Open(data_path));
+    ASSERT_OK(in_stream->Read(reinterpret_cast<char*>(buffer.data()), 
buffer.size()));
+    ASSERT_OK(in_stream->Close());
+
+    auto pool = GetDefaultPool();
+    ASSERT_OK_AND_ASSIGN(std::shared_ptr<CommitMessage> ret,
+                         CommitMessage::Deserialize(version, 
reinterpret_cast<char*>(buffer.data()),
+                                                    buffer.size(), pool));
+    auto res_msg = std::dynamic_pointer_cast<CommitMessageImpl>(ret);
+    ASSERT_NE(res_msg, nullptr);
+
+    // check source_meta exists
+    const auto& new_indexes = res_msg->GetCompactIncrement().NewIndexFiles();
+    ASSERT_EQ(new_indexes.size(), 1);
+    const auto& global_index_meta = new_indexes[0]->GetGlobalIndexMeta();
+    ASSERT_TRUE(global_index_meta.has_value());
+    ASSERT_NE(global_index_meta->source_meta, nullptr);
+
+    // check result
+    ASSERT_OK_AND_ASSIGN(std::string serialized_bytes, 
CommitMessage::Serialize(ret, pool));
+    ASSERT_EQ(serialized_bytes, 
std::string(reinterpret_cast<char*>(buffer.data()), buffer.size()));
+}
+
 TEST(CommitMessageTest, TestCompatibleWithVersion11) {
     // index file meta: add global index meta
     int32_t version = 11;
@@ -106,8 +139,6 @@ TEST(CommitMessageTest, TestCompatibleWithVersion11) {
 
     // check result
     ASSERT_EQ(res_msgs, expected_msgs);
-    ASSERT_OK_AND_ASSIGN(std::string serialized_bytes, 
CommitMessage::SerializeList(ret, pool));
-    ASSERT_EQ(serialized_bytes, 
std::string(reinterpret_cast<char*>(buffer.data()), buffer.size()));
 }
 
 TEST(CommitMessageTest, TestCompatibleWithVersion10) {
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/README 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/README
new file mode 100644
index 0000000..692b105
--- /dev/null
+++ b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/README
@@ -0,0 +1,32 @@
+id:int score:int tag:string
+primary key: id
+no partition key
+no bucket key
+bucket count: 1
+
+file format: orc
+manifest format: orc
+deletion-vectors.enabled: true
+primary-key btree index: score
+compaction.force-rewrite-all-files: true
+
+Msgs:
+snapshot-1: APPEND
+Add: 1, 10, first
+Add: 2, 20, second
+
+snapshot-2: COMPACT
+Build the primary-key btree index for score.
+
+snapshot-3: APPEND
+Add: 3, 30, third
+Add: 4, 40, fourth
+
+snapshot-4: COMPACT
+Rebuild the primary-key btree index for score.
+
+snapshot-5: COMPACT
+Force a full compaction and rebuild the primary-key btree index for score.
+
+commit_messages-01:
+Single CommitMessage serialized by Java CommitMessageSerializer version 12 for 
snapshot-5.
\ No newline at end of file
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-022e32ce-1d75-4b9a-8496-a3311c44bad0-0.orc
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-022e32ce-1d75-4b9a-8496-a3311c44bad0-0.orc
new file mode 100644
index 0000000..767c7ee
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-022e32ce-1d75-4b9a-8496-a3311c44bad0-0.orc
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-293d6705-bd19-4986-9aa0-3a24443e7e8e-0.orc
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-293d6705-bd19-4986-9aa0-3a24443e7e8e-0.orc
new file mode 100644
index 0000000..02673d7
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-293d6705-bd19-4986-9aa0-3a24443e7e8e-0.orc
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-b4949ff6-78f4-4e58-86ad-33eb3e5e6749-0.orc
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-b4949ff6-78f4-4e58-86ad-33eb3e5e6749-0.orc
new file mode 100644
index 0000000..767c7ee
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-b4949ff6-78f4-4e58-86ad-33eb3e5e6749-0.orc
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-b5896b79-1c4d-4359-920a-ce719ea303af-0.orc
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-b5896b79-1c4d-4359-920a-ce719ea303af-0.orc
new file mode 100644
index 0000000..d741dbd
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-b5896b79-1c4d-4359-920a-ce719ea303af-0.orc
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-c2e3ff2f-a3e1-48a1-8bb1-f868477c796a-0.orc
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-c2e3ff2f-a3e1-48a1-8bb1-f868477c796a-0.orc
new file mode 100644
index 0000000..02673d7
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/bucket-0/data-c2e3ff2f-a3e1-48a1-8bb1-f868477c796a-0.orc
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/commit_messages/commit_messages-01
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/commit_messages/commit_messages-01
new file mode 100644
index 0000000..374b9b8
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/commit_messages/commit_messages-01
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-05388eac-7c9d-48cf-9053-f68b800ebe9e-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-05388eac-7c9d-48cf-9053-f68b800ebe9e-0
new file mode 100644
index 0000000..dcf43f6
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-05388eac-7c9d-48cf-9053-f68b800ebe9e-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-5d1ef2e5-c136-4059-8380-fe5d60344f83-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-5d1ef2e5-c136-4059-8380-fe5d60344f83-0
new file mode 100644
index 0000000..dcf43f6
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-5d1ef2e5-c136-4059-8380-fe5d60344f83-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-759d0483-a0e7-417b-8c3d-288f36679770-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-759d0483-a0e7-417b-8c3d-288f36679770-0
new file mode 100644
index 0000000..83e0054
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/index/index-759d0483-a0e7-417b-8c3d-288f36679770-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-0216d085-645d-486b-9ebb-e48df26b8aa7-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-0216d085-645d-486b-9ebb-e48df26b8aa7-0
new file mode 100644
index 0000000..ee5c88f
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-0216d085-645d-486b-9ebb-e48df26b8aa7-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-5ba1f8c6-fcde-45f8-b59b-a948ef3013be-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-5ba1f8c6-fcde-45f8-b59b-a948ef3013be-0
new file mode 100644
index 0000000..fb7a5f1
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-5ba1f8c6-fcde-45f8-b59b-a948ef3013be-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-d347fbd7-d7cc-4e5e-9f4a-efa8d0ce8651-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-d347fbd7-d7cc-4e5e-9f4a-efa8d0ce8651-0
new file mode 100644
index 0000000..e0bea20
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/index-manifest-d347fbd7-d7cc-4e5e-9f4a-efa8d0ce8651-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-180aa8f5-0932-462f-8f02-a1000b585552-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-180aa8f5-0932-462f-8f02-a1000b585552-0
new file mode 100644
index 0000000..6015b47
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-180aa8f5-0932-462f-8f02-a1000b585552-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-e108640e-b3a6-499d-9821-fe36afde58d6-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-e108640e-b3a6-499d-9821-fe36afde58d6-0
new file mode 100644
index 0000000..816e82b
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-e108640e-b3a6-499d-9821-fe36afde58d6-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-e108640e-b3a6-499d-9821-fe36afde58d6-1
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-e108640e-b3a6-499d-9821-fe36afde58d6-1
new file mode 100644
index 0000000..a1a46f2
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-e108640e-b3a6-499d-9821-fe36afde58d6-1
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-fbd7c824-c952-4f2b-ad6c-0227a823a745-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-fbd7c824-c952-4f2b-ad6c-0227a823a745-0
new file mode 100644
index 0000000..cd45ccc
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-fbd7c824-c952-4f2b-ad6c-0227a823a745-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-fbd7c824-c952-4f2b-ad6c-0227a823a745-1
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-fbd7c824-c952-4f2b-ad6c-0227a823a745-1
new file mode 100644
index 0000000..7cfbf59
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-fbd7c824-c952-4f2b-ad6c-0227a823a745-1
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-0
new file mode 100644
index 0000000..bc2b65e
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-1
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-1
new file mode 100644
index 0000000..e3378b1
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-1
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-2
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-2
new file mode 100644
index 0000000..e3378b1
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-2
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-3
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-3
new file mode 100644
index 0000000..158525f
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-3
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-0
new file mode 100644
index 0000000..c810bea
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-1
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-1
new file mode 100644
index 0000000..78cece9
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-1
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-2
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-2
new file mode 100644
index 0000000..f4f2396
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-2
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-3
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-3
new file mode 100644
index 0000000..a4954a1
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-3
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-0
new file mode 100644
index 0000000..7a53461
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-0
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-1
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-1
new file mode 100644
index 0000000..fa3e6d6
Binary files /dev/null and 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/manifest/manifest-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-1
 differ
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/schema/schema-0
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/schema/schema-0
new file mode 100644
index 0000000..2a12245
--- /dev/null
+++ 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/schema/schema-0
@@ -0,0 +1,30 @@
+{
+  "version" : 3,
+  "id" : 0,
+  "fields" : [ {
+    "id" : 0,
+    "name" : "id",
+    "type" : "INT NOT NULL"
+  }, {
+    "id" : 1,
+    "name" : "score",
+    "type" : "INT"
+  }, {
+    "id" : 2,
+    "name" : "tag",
+    "type" : "STRING"
+  } ],
+  "highestFieldId" : 2,
+  "partitionKeys" : [ ],
+  "primaryKeys" : [ "id" ],
+  "options" : {
+    "bucket" : "1",
+    "compaction.force-rewrite-all-files" : "true",
+    "num-sorted-run.compaction-trigger" : "100",
+    "manifest.format" : "orc",
+    "pk-btree.index.columns" : "score",
+    "file.format" : "orc",
+    "deletion-vectors.enabled" : "true"
+  },
+  "timeMillis" : 1785840706107
+}
\ No newline at end of file
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/EARLIEST
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/EARLIEST
new file mode 100644
index 0000000..56a6051
--- /dev/null
+++ 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/EARLIEST
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/LATEST
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/LATEST
new file mode 100644
index 0000000..7813681
--- /dev/null
+++ 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/LATEST
@@ -0,0 +1 @@
+5
\ No newline at end of file
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-1
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-1
new file mode 100644
index 0000000..340133f
--- /dev/null
+++ 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-1
@@ -0,0 +1,17 @@
+{
+  "version" : 3,
+  "uuid" : "fac92a8a-8b53-4e8b-b48a-3bd1bd0d3830",
+  "id" : 1,
+  "schemaId" : 0,
+  "baseManifestList" : "manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-0",
+  "baseManifestListSize" : 392,
+  "deltaManifestList" : "manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-1",
+  "deltaManifestListSize" : 1533,
+  "commitUser" : "f391a034-adf4-4c09-8936-7c9646929aa1",
+  "commitIdentifier" : 9223372036854775807,
+  "commitKind" : "APPEND",
+  "timeMillis" : 1785840707537,
+  "totalRecordCount" : 2,
+  "deltaRecordCount" : 2,
+  "nextRowId" : 0
+}
\ No newline at end of file
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-2
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-2
new file mode 100644
index 0000000..3549501
--- /dev/null
+++ 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-2
@@ -0,0 +1,18 @@
+{
+  "version" : 3,
+  "uuid" : "9b609570-5b41-42c0-a69f-ba6bff5deb5f",
+  "id" : 2,
+  "schemaId" : 0,
+  "baseManifestList" : "manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-2",
+  "baseManifestListSize" : 1533,
+  "deltaManifestList" : "manifest-list-3fe1dd64-b6ac-46dc-b968-1740e05383a2-3",
+  "deltaManifestListSize" : 1543,
+  "indexManifest" : "index-manifest-d347fbd7-d7cc-4e5e-9f4a-efa8d0ce8651-0",
+  "commitUser" : "f391a034-adf4-4c09-8936-7c9646929aa1",
+  "commitIdentifier" : 9223372036854775807,
+  "commitKind" : "COMPACT",
+  "timeMillis" : 1785840707755,
+  "totalRecordCount" : 2,
+  "deltaRecordCount" : 0,
+  "nextRowId" : 0
+}
\ No newline at end of file
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-3
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-3
new file mode 100644
index 0000000..bd3fbf0
--- /dev/null
+++ 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-3
@@ -0,0 +1,18 @@
+{
+  "version" : 3,
+  "uuid" : "9e585ab7-2f32-4166-aee7-b5fb5efc7432",
+  "id" : 3,
+  "schemaId" : 0,
+  "baseManifestList" : "manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-0",
+  "baseManifestListSize" : 1603,
+  "deltaManifestList" : "manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-1",
+  "deltaManifestListSize" : 1529,
+  "indexManifest" : "index-manifest-d347fbd7-d7cc-4e5e-9f4a-efa8d0ce8651-0",
+  "commitUser" : "f3a789d1-3e17-42f7-858c-3d0bc96a8128",
+  "commitIdentifier" : 9223372036854775807,
+  "commitKind" : "APPEND",
+  "timeMillis" : 1785840707913,
+  "totalRecordCount" : 4,
+  "deltaRecordCount" : 2,
+  "nextRowId" : 0
+}
\ No newline at end of file
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-4
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-4
new file mode 100644
index 0000000..e45fedc
--- /dev/null
+++ 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-4
@@ -0,0 +1,18 @@
+{
+  "version" : 3,
+  "uuid" : "a9477987-a7ea-4f90-9722-fd95450883f4",
+  "id" : 4,
+  "schemaId" : 0,
+  "baseManifestList" : "manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-2",
+  "baseManifestListSize" : 1713,
+  "deltaManifestList" : "manifest-list-6678a969-de46-4cb3-b744-36a17ac35371-3",
+  "deltaManifestListSize" : 1548,
+  "indexManifest" : "index-manifest-5ba1f8c6-fcde-45f8-b59b-a948ef3013be-0",
+  "commitUser" : "f3a789d1-3e17-42f7-858c-3d0bc96a8128",
+  "commitIdentifier" : 9223372036854775807,
+  "commitKind" : "COMPACT",
+  "timeMillis" : 1785840707981,
+  "totalRecordCount" : 4,
+  "deltaRecordCount" : 0,
+  "nextRowId" : 0
+}
\ No newline at end of file
diff --git 
a/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-5
 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-5
new file mode 100644
index 0000000..490a0dc
--- /dev/null
+++ 
b/test/test_data/orc/pk_btree_source_meta.db/pk_btree_source_meta/snapshot/snapshot-5
@@ -0,0 +1,18 @@
+{
+  "version" : 3,
+  "uuid" : "7c3a0002-b775-4d25-88e2-62b5d87b7059",
+  "id" : 5,
+  "schemaId" : 0,
+  "baseManifestList" : "manifest-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-0",
+  "baseManifestListSize" : 1723,
+  "deltaManifestList" : "manifest-list-8e8a1e2e-9fbe-4fb9-920b-82edaed23f41-1",
+  "deltaManifestListSize" : 1554,
+  "indexManifest" : "index-manifest-0216d085-645d-486b-9ebb-e48df26b8aa7-0",
+  "commitUser" : "7474e587-57d5-4214-913d-e16e4ca8dfd7",
+  "commitIdentifier" : 9223372036854775807,
+  "commitKind" : "COMPACT",
+  "timeMillis" : 1785840708181,
+  "totalRecordCount" : 4,
+  "deltaRecordCount" : 0,
+  "nextRowId" : 0
+}
\ No newline at end of file

Reply via email to