Add BE function bitmap_or and bitmap_and (#2707)

This commit is contained in:
DanyBin
2020-01-08 19:59:44 +08:00
committed by ZHAO Chun
parent d4a3b34319
commit a028c52edd
6 changed files with 95 additions and 10 deletions

View File

@ -387,7 +387,48 @@ BigIntVal BitmapFunctions::bitmap_intersect_finalize(FunctionContext* ctx, const
delete src_bitmap;
return result;
}
StringVal BitmapFunctions::bitmap_or(FunctionContext* ctx, const StringVal& lhs, const StringVal& rhs){
if (lhs.is_null || rhs.is_null) {
return StringVal::null();
}
RoaringBitmap bitmap;
if (lhs.len == 0) {
bitmap.merge(*reinterpret_cast<RoaringBitmap*>(lhs.ptr));
} else {
bitmap.merge(RoaringBitmap((char*)lhs.ptr));
}
if (rhs.len == 0) {
bitmap.merge(*reinterpret_cast<RoaringBitmap*>(rhs.ptr));
} else {
bitmap.merge(RoaringBitmap((char*)rhs.ptr));
}
StringVal result(ctx,bitmap.size());
bitmap.serialize((char*)result.ptr);
return result;
}
StringVal BitmapFunctions::bitmap_and(FunctionContext* ctx, const StringVal& lhs, const StringVal& rhs){
if (lhs.is_null || rhs.is_null) {
return StringVal::null();
}
RoaringBitmap bitmap;
if (lhs.len == 0) {
bitmap.merge(*reinterpret_cast<RoaringBitmap*>(lhs.ptr));
} else {
bitmap.merge(RoaringBitmap((char*)lhs.ptr));
}
if(rhs.len == 0){
bitmap.intersect(*reinterpret_cast<RoaringBitmap*>(rhs.ptr));
} else {
bitmap.intersect(RoaringBitmap((char*)rhs.ptr));
}
StringVal result(ctx,bitmap.size());
bitmap.serialize((char*)result.ptr);
return result;
}
template void BitmapFunctions::bitmap_update_int<TinyIntVal>(
FunctionContext* ctx, const TinyIntVal& src, StringVal* dst);