This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 8cded12044a [refactor](opt) optimize BE code of array_distinct function (#38560) 8cded12044a is described below commit 8cded12044a82d78738c29ce57283714a8a32669 Author: Chester <cheste...@tencent.com> AuthorDate: Tue Aug 13 16:04:36 2024 +0800 [refactor](opt) optimize BE code of array_distinct function (#38560) ## Proposed changes refactor part of BE code of `array_distinct` function by: 1. optimize the head files 2. use type deduction(auto) 3. use macro definition to simplify if-else code 4. add error log for unsupported element type of array --- .../vec/functions/array/function_array_distinct.h | 106 ++++++++------------- 1 file changed, 40 insertions(+), 66 deletions(-) diff --git a/be/src/vec/functions/array/function_array_distinct.h b/be/src/vec/functions/array/function_array_distinct.h index 936db435447..a3b70aa60d7 100644 --- a/be/src/vec/functions/array/function_array_distinct.h +++ b/be/src/vec/functions/array/function_array_distinct.h @@ -21,12 +21,10 @@ #include <fmt/format.h> #include <glog/logging.h> -#include <string.h> -#include <boost/iterator/iterator_facade.hpp> +#include <cstring> #include <memory> #include <ostream> -#include <string> #include <utility> #include "common/status.h" @@ -103,7 +101,7 @@ public: const NullMapType* src_null_map = nullptr; if (src_nested_column->is_nullable()) { - const ColumnNullable* src_nested_nullable_col = + const auto* src_nested_nullable_col = check_and_get_column<ColumnNullable>(*src_nested_column); src_nested_column = src_nested_nullable_col->get_nested_column_ptr(); src_null_map = &src_nested_nullable_col->get_null_map_column().get_data(); @@ -111,8 +109,7 @@ public: NullMapType* dest_null_map = nullptr; if (dest_nested_column->is_nullable()) { - ColumnNullable* dest_nested_nullable_col = - reinterpret_cast<ColumnNullable*>(dest_nested_column); + auto* dest_nested_nullable_col = reinterpret_cast<ColumnNullable*>(dest_nested_column); dest_nested_column = dest_nested_nullable_col->get_nested_column_ptr(); dest_null_map = &dest_nested_nullable_col->get_null_map_column().get_data(); } @@ -140,13 +137,13 @@ private: using NestType = typename ColumnType::value_type; using ElementNativeType = typename NativeType<NestType>::Type; - const ColumnType* src_data_concrete = reinterpret_cast<const ColumnType*>(&src_column); + const auto* src_data_concrete = reinterpret_cast<const ColumnType*>(&src_column); if (!src_data_concrete) { return false; } const PaddedPODArray<NestType>& src_datas = src_data_concrete->get_data(); - ColumnType& dest_data_concrete = reinterpret_cast<ColumnType&>(dest_column); + auto& dest_data_concrete = reinterpret_cast<ColumnType&>(dest_column); PaddedPODArray<NestType>& dest_datas = dest_data_concrete.get_data(); using Set = HashSetWithStackMemory<ElementNativeType, DefaultHash<ElementNativeType>, @@ -194,12 +191,12 @@ private: bool _execute_string(const IColumn& src_column, const ColumnArray::Offsets64& src_offsets, IColumn& dest_column, ColumnArray::Offsets64& dest_offsets, const NullMapType* src_null_map, NullMapType* dest_null_map) const { - const ColumnString* src_data_concrete = reinterpret_cast<const ColumnString*>(&src_column); + const auto* src_data_concrete = reinterpret_cast<const ColumnString*>(&src_column); if (!src_data_concrete) { return false; } - ColumnString& dest_column_string = reinterpret_cast<ColumnString&>(dest_column); + auto& dest_column_string = reinterpret_cast<ColumnString&>(dest_column); ColumnString::Chars& column_string_chars = dest_column_string.get_chars(); ColumnString::Offsets& column_string_offsets = dest_column_string.get_offsets(); column_string_chars.reserve(src_column.size()); @@ -257,64 +254,41 @@ private: IColumn& dest_column, ColumnArray::Offsets64& dest_offsets, const NullMapType* src_null_map, NullMapType* dest_null_map, DataTypePtr& nested_type) const { - bool res = false; +#define EXECUTE_NUMBER(TYPE, NAME) \ + if (which.is_##NAME()) { \ + return _execute_number<TYPE>(src_column, src_offsets, dest_column, dest_offsets, \ + src_null_map, dest_null_map); \ + } + WhichDataType which(remove_nullable(nested_type)); - if (which.is_uint8()) { - res = _execute_number<ColumnUInt8>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_int8()) { - res = _execute_number<ColumnInt8>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_int16()) { - res = _execute_number<ColumnInt16>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_int32()) { - res = _execute_number<ColumnInt32>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_int64()) { - res = _execute_number<ColumnInt64>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_int128()) { - res = _execute_number<ColumnInt128>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_float32()) { - res = _execute_number<ColumnFloat32>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_float64()) { - res = _execute_number<ColumnFloat64>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_date()) { - res = _execute_number<ColumnDate>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_date_time()) { - res = _execute_number<ColumnDateTime>(src_column, src_offsets, dest_column, - dest_offsets, src_null_map, dest_null_map); - } else if (which.is_date_v2()) { - res = _execute_number<ColumnDateV2>(src_column, src_offsets, dest_column, dest_offsets, - src_null_map, dest_null_map); - } else if (which.is_date_time_v2()) { - res = _execute_number<ColumnDateTimeV2>(src_column, src_offsets, dest_column, - dest_offsets, src_null_map, dest_null_map); - } else if (which.is_decimal32()) { - res = _execute_number<ColumnDecimal32>(src_column, src_offsets, dest_column, - dest_offsets, src_null_map, dest_null_map); - } else if (which.is_decimal64()) { - res = _execute_number<ColumnDecimal64>(src_column, src_offsets, dest_column, - dest_offsets, src_null_map, dest_null_map); - } else if (which.is_decimal128v3()) { - res = _execute_number<ColumnDecimal128V3>(src_column, src_offsets, dest_column, - dest_offsets, src_null_map, dest_null_map); - } else if (which.is_decimal256()) { - res = _execute_number<ColumnDecimal256>(src_column, src_offsets, dest_column, - dest_offsets, src_null_map, dest_null_map); - } else if (which.is_decimal128v2()) { - res = _execute_number<ColumnDecimal128V2>(src_column, src_offsets, dest_column, - dest_offsets, src_null_map, dest_null_map); - } else if (which.is_string()) { - res = _execute_string(src_column, src_offsets, dest_column, dest_offsets, src_null_map, - dest_null_map); + EXECUTE_NUMBER(ColumnUInt8, uint8); + EXECUTE_NUMBER(ColumnInt8, int8); + EXECUTE_NUMBER(ColumnInt16, int16); + EXECUTE_NUMBER(ColumnInt32, int32); + EXECUTE_NUMBER(ColumnInt64, int64); + EXECUTE_NUMBER(ColumnInt128, int128); + EXECUTE_NUMBER(ColumnFloat32, float32); + EXECUTE_NUMBER(ColumnFloat64, float64); + EXECUTE_NUMBER(ColumnDate, date); + EXECUTE_NUMBER(ColumnDateTime, date_time); + EXECUTE_NUMBER(ColumnDateV2, date_v2); + EXECUTE_NUMBER(ColumnDateTimeV2, date_time_v2); + EXECUTE_NUMBER(ColumnDecimal32, decimal32); + EXECUTE_NUMBER(ColumnDecimal64, decimal64); + EXECUTE_NUMBER(ColumnDecimal128V3, decimal128v3); + EXECUTE_NUMBER(ColumnDecimal256, decimal256); + EXECUTE_NUMBER(ColumnDecimal128V2, decimal128v2); + if (which.is_string()) { + return _execute_string(src_column, src_offsets, dest_column, dest_offsets, src_null_map, + dest_null_map); + } else { + LOG(ERROR) << "Unsupported array's element type: " + << remove_nullable(nested_type)->get_name() << " for function " + << this->get_name(); + return false; } - return res; + +#undef EXECUTE_NUMBER } }; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org