eldenmoon commented on code in PR #54181:
URL: https://github.com/apache/doris/pull/54181#discussion_r2250626790


##########
be/test/vec/columns/column_variant_test.cpp:
##########
@@ -3354,4 +3354,213 @@ TEST_F(ColumnVariantTest, 
subcolumn_operations_coverage) {
         }
     }
 }
+
+// Helper function to create ColumnVariant with various types (int, double, 
array, string)
+static auto create_mixed_type_variant_column() {
+    auto variant = ColumnVariant::create(1);
+
+    // Create test data with different types
+    std::vector<std::pair<std::string, doris::vectorized::Field>> test_data = {
+            // int type
+            {"data.int_field", 
doris::vectorized::Field::create_field<TYPE_INT>(42)},
+            // double type
+            {"data.double_field", 
doris::vectorized::Field::create_field<TYPE_DOUBLE>(3.14159)},
+            // string type
+            {"data.string_field",
+             
doris::vectorized::Field::create_field<TYPE_STRING>(String("hello_world"))},
+            // array of ints
+            {"data.array_int_field",
+             [] {
+                 auto array_field = 
doris::vectorized::Field::create_field<TYPE_ARRAY>(Array());
+                 auto& array = array_field.get<Array>();
+                 
array.emplace_back(doris::vectorized::Field::create_field<TYPE_INT>(1));
+                 
array.emplace_back(doris::vectorized::Field::create_field<TYPE_INT>(2));
+                 
array.emplace_back(doris::vectorized::Field::create_field<TYPE_INT>(3));
+                 return array_field;
+             }()},
+            // array of strings
+            {"data.array_string_field", [] {
+                 auto array_field = 
doris::vectorized::Field::create_field<TYPE_ARRAY>(Array());
+                 auto& array = array_field.get<Array>();
+                 array.emplace_back(
+                         
doris::vectorized::Field::create_field<TYPE_STRING>(String("apple")));
+                 array.emplace_back(
+                         
doris::vectorized::Field::create_field<TYPE_STRING>(String("banana")));
+                 return array_field;
+             }()}};
+
+    // Insert 5 rows with the same structure
+    for (int i = 0; i < 5; ++i) {
+        auto variant_map = VariantUtil::construct_variant_map(test_data);
+        variant->try_insert(variant_map);
+    }
+
+    // Add some additional rows with different structures for sparse column
+    std::vector<std::pair<std::string, doris::vectorized::Field>> sparse_data 
= {
+            {"data.int_field", 
doris::vectorized::Field::create_field<TYPE_INT>(100)},
+            {"data.double_field", 
doris::vectorized::Field::create_field<TYPE_DOUBLE>(2.71828)},
+            {"data.nested.sparse_string",
+             
doris::vectorized::Field::create_field<TYPE_STRING>(String("sparse_data"))},
+            {"data.nested.sparse_int", 
doris::vectorized::Field::create_field<TYPE_INT>(999)}};
+
+    // Insert 3 more rows with sparse structure
+    for (int i = 0; i < 3; ++i) {
+        auto sparse_variant_map = 
VariantUtil::construct_variant_map(sparse_data);
+        variant->try_insert(sparse_variant_map);
+    }
+
+    return variant;
+}
+
+// // Test to generate ColumnVariant data and serialize to binary file
+// TEST_F(ColumnVariantTest, generate_compatibility_test_data) {
+//     // 1. Create ColumnVariant with various types
+//     auto variant_column = create_mixed_type_variant_column();
+//     variant_column->finalize();
+//     EXPECT_EQ(variant_column->size(), 8);
+//
+//     // 2. Create DataTypeVariant for serialization
+//     auto data_type_variant = std::make_shared<DataTypeVariant>();
+//
+//     // 3. Calculate serialized size
+//     int be_exec_version = 0; // Use current version
+//     int64_t serialized_size = 
data_type_variant->get_uncompressed_serialized_bytes(*variant_column, 
be_exec_version);
+//     EXPECT_GT(serialized_size, 0);
+//
+//     // 4. Serialize to buffer
+//     std::vector<char> buffer(serialized_size);
+//     char* buf_end = data_type_variant->serialize(*variant_column, 
buffer.data(), be_exec_version);

Review Comment:
   ColumnVariant序列化会先用write_one_cell_to_binary序列化成String,然后再serialize序列化



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to