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