[Function] add bitmap function of bitmap_has_all (#6918)

The 'bitmap_has_all' function returns true if the first bitmap contains all the elements of the second bitmap.
This commit is contained in:
luozenglin
2021-11-01 12:50:47 +08:00
committed by GitHub
parent 210625b358
commit c7a3116f98
8 changed files with 172 additions and 0 deletions

View File

@ -607,6 +607,24 @@ BooleanVal BitmapFunctions::bitmap_has_any(FunctionContext* ctx, const StringVal
return {bitmap.cardinality() != 0};
}
BooleanVal BitmapFunctions::bitmap_has_all(FunctionContext *ctx, const StringVal &lhs,
const StringVal &rhs) {
if (lhs.is_null || rhs.is_null) {
return BooleanVal::null();
}
if (lhs.len != 0 && rhs.len != 0) {
BitmapValue bitmap = BitmapValue(reinterpret_cast<char *>(lhs.ptr));
int64_t lhs_cardinality = bitmap.cardinality();
bitmap |= BitmapValue(reinterpret_cast<char *>(rhs.ptr));
return {bitmap.cardinality() == lhs_cardinality};
} else if (rhs.len != 0) {
return {false};
} else {
return {true};
}
}
BigIntVal BitmapFunctions::bitmap_max(FunctionContext* ctx, const StringVal& src) {
if (src.is_null) {
return BigIntVal::null();