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