This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch dev-1.0.1 in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit 318267227961c1d347e77e8ab07c9b85b99dc3b0 Author: zhangstar333 <87313068+zhangstar...@users.noreply.github.com> AuthorDate: Thu Jun 2 10:37:45 2022 +0800 [fix](Function) fix to_bitmap to return always not nullable (#9859) --- be/src/vec/functions/function_bitmap.cpp | 45 +++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/be/src/vec/functions/function_bitmap.cpp b/be/src/vec/functions/function_bitmap.cpp index 0b80c88b5d..69b5bd6737 100644 --- a/be/src/vec/functions/function_bitmap.cpp +++ b/be/src/vec/functions/function_bitmap.cpp @@ -39,24 +39,39 @@ struct BitmapEmpty { struct ToBitmap { static constexpr auto name = "to_bitmap"; + using ReturnType = DataTypeBitMap; - static Status vector(const ColumnString::Chars& data, const ColumnString::Offsets& offsets, - std::vector<BitmapValue>& res, NullMap& null_map) { - auto size = offsets.size(); - res.reserve(size); - for (size_t i = 0; i < size; ++i) { - res.emplace_back(); + static void vector(const ColumnString::Chars& data, const ColumnString::Offsets& offsets, + MutableColumnPtr& col_res) { + execute<false>(data, offsets, nullptr, col_res); + } - const char* raw_str = reinterpret_cast<const char*>(&data[offsets[i - 1]]); - size_t str_size = offsets[i] - offsets[i - 1] - 1; - StringParser::ParseResult parse_result = StringParser::PARSE_SUCCESS; - uint64_t int_value = StringParser::string_to_unsigned_int<uint64_t>(raw_str, str_size, - &parse_result); - if (LIKELY(parse_result == StringParser::PARSE_SUCCESS)) { - res.back().add(int_value); + static void vector_nullable(const ColumnString::Chars& data, + const ColumnString::Offsets& offsets, const NullMap& nullmap, + MutableColumnPtr& col_res) { + execute<true>(data, offsets, &nullmap, col_res); + } + template <bool arg_is_nullable> + static void execute(const ColumnString::Chars& data, const ColumnString::Offsets& offsets, + const NullMap* nullmap, MutableColumnPtr& col_res) { + auto* res_column = reinterpret_cast<ColumnBitmap*>(col_res.get()); + auto& res_data = res_column->get_data(); + size_t size = offsets.size(); + + for (size_t i = 0; i < size; ++i) { + if (arg_is_nullable && ((*nullmap)[i])) { + continue; + } else { + const char* raw_str = reinterpret_cast<const char*>(&data[offsets[i - 1]]); + size_t str_size = offsets[i] - offsets[i - 1] - 1; + StringParser::ParseResult parse_result = StringParser::PARSE_SUCCESS; + uint64_t int_value = StringParser::string_to_unsigned_int<uint64_t>( + raw_str, str_size, &parse_result); + if (LIKELY(parse_result == StringParser::PARSE_SUCCESS)) { + res_data[i].add(int_value); + } } } - return Status::OK(); } }; @@ -494,7 +509,7 @@ public: }; using FunctionBitmapEmpty = FunctionConst<BitmapEmpty, false>; -using FunctionToBitmap = FunctionBitmapAlwaysNull<ToBitmap>; +using FunctionToBitmap = FunctionAlwaysNotNullable<ToBitmap>; using FunctionBitmapFromString = FunctionBitmapAlwaysNull<BitmapFromString>; using FunctionBitmapHash = FunctionAlwaysNotNullable<BitmapHash>; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org