This is an automated email from the ASF dual-hosted git repository. kangkaisen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push: new fca6c4e Fix bitmap null crash (#3042) fca6c4e is described below commit fca6c4e5239a84754a19df2b5a297908c60ec7a2 Author: kangkaisen <kangkai...@apache.org> AuthorDate: Thu Mar 5 21:30:32 2020 +0800 Fix bitmap null crash (#3042) --- be/src/exprs/bitmap_function.cpp | 10 +++++++++- be/test/exprs/bitmap_function_test.cpp | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/be/src/exprs/bitmap_function.cpp b/be/src/exprs/bitmap_function.cpp index dda07e3..09fdd14 100644 --- a/be/src/exprs/bitmap_function.cpp +++ b/be/src/exprs/bitmap_function.cpp @@ -269,7 +269,6 @@ void BitmapFunctions::bitmap_update_int(FunctionContext* ctx, const T& src, Stri if (src.is_null) { return; } - auto dst_bitmap = reinterpret_cast<BitmapValue*>(dst->ptr); dst_bitmap->add(src.val); } @@ -282,12 +281,18 @@ BigIntVal BitmapFunctions::bitmap_finalize(FunctionContext* ctx, const StringVal } BigIntVal BitmapFunctions::bitmap_get_value(FunctionContext* ctx, const StringVal& src) { + if (src.is_null) { + return 0; + } auto src_bitmap = reinterpret_cast<BitmapValue*>(src.ptr); BigIntVal result(src_bitmap->cardinality()); return result; } void BitmapFunctions::bitmap_union(FunctionContext* ctx, const StringVal& src, StringVal* dst) { + if (src.is_null) { + return; + } auto dst_bitmap = reinterpret_cast<BitmapValue*>(dst->ptr); // zero size means the src input is a agg object if (src.len == 0) { @@ -298,6 +303,9 @@ void BitmapFunctions::bitmap_union(FunctionContext* ctx, const StringVal& src, S } BigIntVal BitmapFunctions::bitmap_count(FunctionContext* ctx, const StringVal& src) { + if (src.is_null) { + return 0; + } // zero size means the src input is a agg object if (src.len == 0) { auto bitmap = reinterpret_cast<BitmapValue*>(src.ptr); diff --git a/be/test/exprs/bitmap_function_test.cpp b/be/test/exprs/bitmap_function_test.cpp index c1bf245..16239d9 100644 --- a/be/test/exprs/bitmap_function_test.cpp +++ b/be/test/exprs/bitmap_function_test.cpp @@ -138,6 +138,9 @@ TEST_F(BitmapFunctionsTest, bitmap_get_value) { BigIntVal finalize_result = BitmapFunctions::bitmap_finalize(ctx, dst); ASSERT_EQ(result, finalize_result); + + BigIntVal null_bitmap = BitmapFunctions::bitmap_get_value(ctx, StringVal::null()); + ASSERT_EQ(BigIntVal(0), null_bitmap); } @@ -159,6 +162,9 @@ TEST_F(BitmapFunctionsTest, bitmap_union) { StringVal src4 = convert_bitmap_to_string(ctx, bitmap3); BitmapFunctions::bitmap_union(ctx, src4, &dst); + StringVal src5 = StringVal::null(); + BitmapFunctions::bitmap_union(ctx, src5, &dst); + StringVal serialized = BitmapFunctions::bitmap_serialize(ctx, dst); BigIntVal result = BitmapFunctions::bitmap_count(ctx, serialized); @@ -175,6 +181,9 @@ TEST_F(BitmapFunctionsTest, bitmap_count) { BigIntVal result = BitmapFunctions::bitmap_count(ctx, bitmap_str); BigIntVal expected(3); ASSERT_EQ(expected, result); + + BigIntVal null_bitmap = BitmapFunctions::bitmap_count(ctx, StringVal::null()); + ASSERT_EQ(BigIntVal(0), null_bitmap); } template<typename ValType, typename ValueType> --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org