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


##########
be/src/vec/sink/vmysql_result_writer.cpp:
##########
@@ -624,269 +625,8 @@ Status 
VMysqlResultWriter<is_binary_format>::append_block(Block& input_block) {
                                block.get_by_position(i).column->size());
 
         int scale = _output_vexpr_ctxs[i]->root()->type().scale;
-        switch (_output_vexpr_ctxs[i]->root()->result_type()) {
-        case TYPE_BOOLEAN:
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_BOOLEAN, 
true>(column_ptr, result,
-                                                                            
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_BOOLEAN, false>(
-                        column_ptr, result, rows_buffer, col_const);
-            }
-            break;
-        case TYPE_TINYINT: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_TINYINT, 
true>(column_ptr, result,
-                                                                            
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_TINYINT, false>(
-                        column_ptr, result, rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_SMALLINT: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_SMALLINT, true>(
-                        column_ptr, result, rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_SMALLINT, false>(
-                        column_ptr, result, rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_INT: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_INT, 
true>(column_ptr, result,
-                                                                        
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_INT, 
false>(column_ptr, result,
-                                                                         
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_BIGINT: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_BIGINT, 
true>(column_ptr, result,
-                                                                           
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_BIGINT, 
false>(column_ptr, result,
-                                                                            
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_LARGEINT: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_LARGEINT, true>(
-                        column_ptr, result, rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_LARGEINT, false>(
-                        column_ptr, result, rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_FLOAT: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_FLOAT, 
true>(column_ptr, result,
-                                                                          
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_FLOAT, 
false>(column_ptr, result,
-                                                                           
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_DOUBLE: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_DOUBLE, 
true>(column_ptr, result,
-                                                                           
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_DOUBLE, 
false>(column_ptr, result,
-                                                                            
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_TIME: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_TIME, 
true>(column_ptr, result,
-                                                                         
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_TIME, 
false>(column_ptr, result,
-                                                                          
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_TIMEV2: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_TIMEV2, 
true>(column_ptr, result,
-                                                                           
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_TIMEV2, 
false>(column_ptr, result,
-                                                                            
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_STRING:
-        case TYPE_CHAR:
-        case TYPE_VARCHAR:
-        case TYPE_AGG_STATE: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_VARCHAR, 
true>(column_ptr, result,
-                                                                            
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_VARCHAR, false>(
-                        column_ptr, result, rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_DECIMALV2: {
-            if (type_ptr->is_nullable()) {
-                auto& nested_type =
-                        assert_cast<const 
DataTypeNullable&>(*type_ptr).get_nested_type();
-                status = _add_one_column<PrimitiveType::TYPE_DECIMALV2, true>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{nested_type});
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_DECIMALV2, false>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{type_ptr});
-            }
-            break;
-        }
-        case TYPE_DECIMAL32: {
-            if (type_ptr->is_nullable()) {
-                auto& nested_type =
-                        assert_cast<const 
DataTypeNullable&>(*type_ptr).get_nested_type();
-                status = _add_one_column<PrimitiveType::TYPE_DECIMAL32, true>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{nested_type});
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_DECIMAL32, false>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{type_ptr});
-            }
-            break;
-        }
-        case TYPE_DECIMAL64: {
-            if (type_ptr->is_nullable()) {
-                auto& nested_type =
-                        assert_cast<const 
DataTypeNullable&>(*type_ptr).get_nested_type();
-                status = _add_one_column<PrimitiveType::TYPE_DECIMAL64, true>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{nested_type});
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_DECIMAL64, false>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{type_ptr});
-            }
-            break;
-        }
-        case TYPE_DECIMAL128I: {
-            if (type_ptr->is_nullable()) {
-                auto& nested_type =
-                        assert_cast<const 
DataTypeNullable&>(*type_ptr).get_nested_type();
-                status = _add_one_column<PrimitiveType::TYPE_DECIMAL128I, 
true>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{nested_type});
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_DECIMAL128I, 
false>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{type_ptr});
-            }
-            break;
-        }
-        case TYPE_JSONB: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_JSONB, 
true>(column_ptr, result,
-                                                                          
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_JSONB, 
false>(column_ptr, result,
-                                                                           
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_DATE:
-        case TYPE_DATETIME: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_DATETIME, true>(
-                        column_ptr, result, rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_DATETIME, false>(
-                        column_ptr, result, rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_DATEV2: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_DATEV2, 
true>(column_ptr, result,
-                                                                           
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_DATEV2, 
false>(column_ptr, result,
-                                                                            
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_DATETIMEV2: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_DATETIMEV2, true>(
-                        column_ptr, result, rows_buffer, col_const, scale);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_DATETIMEV2, 
false>(
-                        column_ptr, result, rows_buffer, col_const, scale);
-            }
-            break;
-        }
-        case TYPE_HLL:
-        case TYPE_QUANTILE_STATE:
-        case TYPE_OBJECT: {
-            if (type_ptr->is_nullable()) {
-                status = _add_one_column<PrimitiveType::TYPE_OBJECT, 
true>(column_ptr, result,
-                                                                           
rows_buffer, col_const);
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_OBJECT, 
false>(column_ptr, result,
-                                                                            
rows_buffer, col_const);
-            }
-            break;
-        }
-        case TYPE_ARRAY: {
-            // Currently all functions only support single-level nested arrays,
-            // so we use Array's child scale to represent the scale of nested 
type.
-            scale = _output_vexpr_ctxs[i]->root()->type().children[0].scale;
-            if (type_ptr->is_nullable()) {
-                auto& nested_type =
-                        assert_cast<const 
DataTypeNullable&>(*type_ptr).get_nested_type();
-                auto& sub_type = assert_cast<const 
DataTypeArray&>(*nested_type).get_nested_type();
-                status = _add_one_column<PrimitiveType::TYPE_ARRAY, true>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{sub_type});
-            } else {
-                auto& sub_type = assert_cast<const 
DataTypeArray&>(*type_ptr).get_nested_type();
-                status = _add_one_column<PrimitiveType::TYPE_ARRAY, false>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{sub_type});
-            }
-            break;
-        }
-        case TYPE_STRUCT: {
-            if (type_ptr->is_nullable()) {
-                auto& nested_type =
-                        assert_cast<const 
DataTypeNullable&>(*type_ptr).get_nested_type();
-                auto& sub_types = assert_cast<const 
DataTypeStruct&>(*nested_type).get_elements();
-                status = _add_one_column<PrimitiveType::TYPE_STRUCT, true>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
sub_types);
-            } else {
-                auto& sub_types = assert_cast<const 
DataTypeStruct&>(*type_ptr).get_elements();
-                status = _add_one_column<PrimitiveType::TYPE_STRUCT, false>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
sub_types);
-            }
-            break;
-        }
-        case TYPE_MAP: {
-            if (type_ptr->is_nullable()) {
-                auto& nested_type =
-                        assert_cast<const 
DataTypeNullable&>(*type_ptr).get_nested_type(); //for map
-                status = _add_one_column<PrimitiveType::TYPE_MAP, true>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{nested_type});
-            } else {
-                status = _add_one_column<PrimitiveType::TYPE_MAP, false>(
-                        column_ptr, result, rows_buffer, col_const, scale, 
{type_ptr});
-            }
-            break;
-        }
-        default: {
-            LOG(WARNING) << "can't convert this type to mysql type. type = "
-                         << _output_vexpr_ctxs[i]->root()->type();
-            return Status::InternalError("vec block pack mysql buffer 
failed.");
-        }
-        }
+        
RETURN_IF_ERROR(type_ptr->get_serde()->write_column_to_mysql(*column_ptr, 
rows_buffer, 0, 0,

Review Comment:
   get_serde will return temporary DataTypeSerDeSPtr and may lead to bad 
performace



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