github-actions[bot] commented on code in PR #28877:
URL: https://github.com/apache/doris/pull/28877#discussion_r1434877793


##########
be/test/vec/jsonb/serialize_test.cpp:
##########
@@ -177,6 +181,159 @@ TEST(BlockSerializeTest, Array) {
     EXPECT_EQ(block.dump_data(), new_block.dump_data());
 }
 
+TEST(BlockSerializeTest, Map) {
+    TabletSchema schema;
+    TabletColumn map;
+    map.set_name("m");
+    map.set_unique_id(1);
+    map.set_type(FieldType::OLAP_FIELD_TYPE_MAP);
+    schema.append_column(map);
+    // map string string
+    DataTypePtr s = 
std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>());
+    DataTypePtr d = 
std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>());
+    DataTypePtr m = std::make_shared<DataTypeMap>(s, d);
+    Array k1, k2, v1, v2;
+    k1.push_back("null");
+    k1.push_back("doris");
+    k1.push_back("clever amory");
+    v1.push_back("ss");
+    v1.push_back(Null());
+    v1.push_back("NULL");
+    k2.push_back("hello amory");
+    k2.push_back("NULL");
+    k2.push_back("cute amory");
+    k2.push_back("doris");
+    v2.push_back("s");
+    v2.push_back("0");
+    v2.push_back("sf");
+    v2.push_back(Null());
+    Map m1, m2;
+    m1.push_back(k1);
+    m1.push_back(v1);
+    m2.push_back(k2);
+    m2.push_back(v2);
+    MutableColumnPtr map_column = m->create_column();
+    map_column->reserve(2);
+    map_column->insert(m1);
+    map_column->insert(m2);
+    vectorized::ColumnWithTypeAndName type_and_name(map_column->get_ptr(), m, 
"test_map");
+    vectorized::Block block;
+    block.insert(type_and_name);
+
+    MutableColumnPtr col = ColumnString::create();
+    // serialize
+    std::cout << "serialize to jsonb" << std::endl;
+    JsonbSerializeUtil::block_to_jsonb(schema, block, 
static_cast<ColumnString&>(*col.get()),
+                                       block.columns(),
+                                       
create_data_type_serdes(block.get_data_types()));
+    // deserialize
+    TupleDescriptor read_desc(PTupleDescriptor(), true);
+    // slot
+    TSlotDescriptor tslot;
+    tslot.__set_colName("m");
+    tslot.nullIndicatorBit = -1;
+    tslot.nullIndicatorByte = 0;
+    TypeDescriptor type_desc(TYPE_MAP);
+    type_desc.children.push_back(TypeDescriptor(TYPE_STRING));
+    type_desc.children.push_back(TypeDescriptor(TYPE_INT));
+    type_desc.contains_nulls.push_back(true);
+    type_desc.contains_nulls.push_back(true);
+    tslot.__set_col_unique_id(1);
+    tslot.__set_slotType(type_desc.to_thrift());
+    SlotDescriptor* slot = new SlotDescriptor(tslot);

Review Comment:
   warning: use auto when initializing with new to avoid duplicating the type 
name [modernize-use-auto]
   
   ```suggestion
       auto* slot = new SlotDescriptor(tslot);
   ```
   



##########
be/test/vec/jsonb/serialize_test.cpp:
##########
@@ -177,6 +181,159 @@
     EXPECT_EQ(block.dump_data(), new_block.dump_data());
 }
 
+TEST(BlockSerializeTest, Map) {
+    TabletSchema schema;
+    TabletColumn map;
+    map.set_name("m");
+    map.set_unique_id(1);
+    map.set_type(FieldType::OLAP_FIELD_TYPE_MAP);
+    schema.append_column(map);
+    // map string string
+    DataTypePtr s = 
std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>());
+    DataTypePtr d = 
std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>());
+    DataTypePtr m = std::make_shared<DataTypeMap>(s, d);
+    Array k1, k2, v1, v2;
+    k1.push_back("null");
+    k1.push_back("doris");
+    k1.push_back("clever amory");
+    v1.push_back("ss");
+    v1.push_back(Null());
+    v1.push_back("NULL");
+    k2.push_back("hello amory");
+    k2.push_back("NULL");
+    k2.push_back("cute amory");
+    k2.push_back("doris");
+    v2.push_back("s");
+    v2.push_back("0");
+    v2.push_back("sf");
+    v2.push_back(Null());
+    Map m1, m2;
+    m1.push_back(k1);
+    m1.push_back(v1);
+    m2.push_back(k2);
+    m2.push_back(v2);
+    MutableColumnPtr map_column = m->create_column();
+    map_column->reserve(2);
+    map_column->insert(m1);
+    map_column->insert(m2);
+    vectorized::ColumnWithTypeAndName type_and_name(map_column->get_ptr(), m, 
"test_map");
+    vectorized::Block block;
+    block.insert(type_and_name);
+
+    MutableColumnPtr col = ColumnString::create();
+    // serialize
+    std::cout << "serialize to jsonb" << std::endl;
+    JsonbSerializeUtil::block_to_jsonb(schema, block, 
static_cast<ColumnString&>(*col.get()),
+                                       block.columns(),
+                                       
create_data_type_serdes(block.get_data_types()));
+    // deserialize
+    TupleDescriptor read_desc(PTupleDescriptor(), true);
+    // slot
+    TSlotDescriptor tslot;
+    tslot.__set_colName("m");
+    tslot.nullIndicatorBit = -1;
+    tslot.nullIndicatorByte = 0;
+    TypeDescriptor type_desc(TYPE_MAP);
+    type_desc.children.push_back(TypeDescriptor(TYPE_STRING));
+    type_desc.children.push_back(TypeDescriptor(TYPE_INT));
+    type_desc.contains_nulls.push_back(true);
+    type_desc.contains_nulls.push_back(true);
+    tslot.__set_col_unique_id(1);
+    tslot.__set_slotType(type_desc.to_thrift());
+    SlotDescriptor* slot = new SlotDescriptor(tslot);
+    read_desc.add_slot(slot);
+
+    Block new_block = block.clone_empty();
+    std::unordered_map<uint32_t, uint32_t> col_uid_to_idx;
+    std::vector<std::string> default_values;
+    default_values.resize(read_desc.slots().size());
+    for (int i = 0; i < read_desc.slots().size(); ++i) {
+        col_uid_to_idx[read_desc.slots()[i]->col_unique_id()] = i;
+        default_values[i] = read_desc.slots()[i]->col_default_value();
+        std::cout << "uid " << read_desc.slots()[i]->col_unique_id() << ":" << 
i << std::endl;
+    }
+    std::cout << block.dump_data() << std::endl;
+    std::cout << new_block.dump_data() << std::endl;
+    std::cout << "deserialize from jsonb" << std::endl;
+    
JsonbSerializeUtil::jsonb_to_block(create_data_type_serdes(read_desc.slots()),
+                                       static_cast<ColumnString&>(*col.get()), 
col_uid_to_idx,
+                                       new_block, default_values);
+    std::cout << block.dump_data() << std::endl;
+    std::cout << new_block.dump_data() << std::endl;
+    EXPECT_EQ(block.dump_data(), new_block.dump_data());
+}
+
+TEST(BlockSerializeTest, Struct) {
+    TabletSchema schema;
+    TabletColumn struct_col;
+    struct_col.set_name("struct");
+    struct_col.set_unique_id(1);
+    struct_col.set_type(FieldType::OLAP_FIELD_TYPE_STRUCT);
+    schema.append_column(struct_col);
+    vectorized::Block block;
+    {
+        DataTypePtr s = 
std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>());
+        DataTypePtr d = 
std::make_shared<DataTypeNullable>(std::make_shared<DataTypeInt128>());
+        DataTypePtr m = 
std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt8>());
+        DataTypePtr st = 
std::make_shared<DataTypeStruct>(std::vector<DataTypePtr> {s, d, m});
+        Tuple t1, t2;
+        t1.push_back(String("amory cute"));
+        t1.push_back(__int128_t(37));
+        t1.push_back(true);
+        t2.push_back("null");
+        t2.push_back(__int128_t(26));
+        t2.push_back(false);
+        MutableColumnPtr struct_column = st->create_column();
+        struct_column->reserve(2);
+        struct_column->insert(t1);
+        struct_column->insert(t2);
+        vectorized::ColumnWithTypeAndName 
type_and_name(struct_column->get_ptr(), st,
+                                                        "test_struct");
+        block.insert(type_and_name);
+    }
+
+    MutableColumnPtr col = ColumnString::create();
+    // serialize
+    std::cout << "serialize to jsonb" << std::endl;
+    JsonbSerializeUtil::block_to_jsonb(schema, block, 
static_cast<ColumnString&>(*col.get()),
+                                       block.columns(),
+                                       
create_data_type_serdes(block.get_data_types()));
+    // deserialize
+    TupleDescriptor read_desc(PTupleDescriptor(), true);
+    // slot
+    TSlotDescriptor tslot;
+    tslot.__set_colName("struct");
+    tslot.nullIndicatorBit = -1;
+    tslot.nullIndicatorByte = 0;
+    TypeDescriptor type_desc(TYPE_STRUCT);
+    type_desc.add_sub_type(TYPE_STRING, "name", true);
+    type_desc.add_sub_type(TYPE_LARGEINT, "age", true);
+    type_desc.add_sub_type(TYPE_BOOLEAN, "is", true);
+    tslot.__set_col_unique_id(1);
+    tslot.__set_slotType(type_desc.to_thrift());
+    SlotDescriptor* slot = new SlotDescriptor(tslot);

Review Comment:
   warning: use auto when initializing with new to avoid duplicating the type 
name [modernize-use-auto]
   
   ```suggestion
       auto* slot = new SlotDescriptor(tslot);
   ```
   



-- 
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: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to