HappenLee commented on code in PR #47624:
URL: https://github.com/apache/doris/pull/47624#discussion_r1957338349


##########
be/src/olap/push_handler.cpp:
##########
@@ -692,4 +680,95 @@ Status PushBrokerReader::_get_next_reader() {
     return Status::OK();
 }
 
+Status PushBrokerReader::_convert_bitmap(vectorized::Block* block,
+                                         vectorized::ColumnWithTypeAndName& 
arg, uint32_t idx,
+                                         vectorized::DataTypePtr return_type) {
+    const vectorized::ColumnPtr& src_column = arg.column;
+    const vectorized::ColumnPtr& inner_column =
+            arg.type->is_nullable() ? assert_cast<const 
vectorized::ColumnNullable&>(*src_column)
+                                              .get_nested_column_ptr()
+                                    : src_column;
+    auto inner_type = std::make_shared<vectorized::DataTypeString>();
+    auto base64_return_type = std::make_shared<vectorized::DataTypeString>();
+
+    vectorized::Block temp_block;
+    temp_block.insert({inner_column, inner_type, "source"});
+    temp_block.insert({nullptr, base64_return_type, "result"});
+
+    auto func_to_base64 = 
vectorized::SimpleFunctionFactory::instance().get_function(
+            "to_base64", {vectorized::ColumnWithTypeAndName {inner_column, 
inner_type, "source"}},
+            base64_return_type);
+    auto dst_column = vectorized::ColumnString::create();
+    temp_block.replace_by_position(1, std::move(dst_column));
+
+    RETURN_IF_ERROR(func_to_base64->execute(nullptr, temp_block, {0}, 1, 
inner_column->size()));
+    auto result_column = temp_block.get_by_position(1).column;
+    if (arg.type->is_nullable()) {
+        const auto& null_map = assert_cast<const 
vectorized::ColumnNullable&>(*src_column)
+                                       .get_null_map_column_ptr();
+        auto nullable_result = 
vectorized::ColumnNullable::create(result_column, null_map);
+        block->get_by_position(idx).column = std::move(nullable_result);
+        block->get_by_position(idx).type = make_nullable(base64_return_type);
+    } else {
+        block->get_by_position(idx).column = std::move(result_column);
+        block->get_by_position(idx).type = std::move(base64_return_type);
+    }
+
+    auto& arg_base64 = _src_block_ptr->get_by_position(idx);
+    auto func_bitmap_from_base64 = 
vectorized::SimpleFunctionFactory::instance().get_function(
+            "bitmap_from_base64", {arg_base64}, return_type);
+
+    RETURN_IF_ERROR(func_bitmap_from_base64->execute(nullptr, *block, {idx}, 
idx,
+                                                     
arg_base64.column->size()));
+    block->get_by_position(idx).type = std::move(return_type);
+    return Status::OK();
+}
+
+Status PushBrokerReader::_convert_hll(vectorized::Block* block,

Review Comment:
   the only different with `_convert_hll` and `_convert_bitmap` is the last 
function name `hll_from_base64` or `bitmap_from_base64`. so the better way is 
make the function name be a param or template param



-- 
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