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