You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ka...@apache.org on 2020/03/05 13:30:39 UTC
[incubator-doris] branch master updated: Fix bitmap null crash
(#3042)
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 <ka...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org