sub_bitmap (#6977)

Starting from the offset position, intercept the specified limit bitmap elements and return a bitmap subset.

Types of chang
This commit is contained in:
Xinyi Zou
2021-11-06 13:31:03 +08:00
committed by GitHub
parent 4f13f98424
commit e69249c082
9 changed files with 233 additions and 0 deletions

View File

@ -671,6 +671,25 @@ StringVal BitmapFunctions::bitmap_subset_in_range(FunctionContext* ctx, const St
return serialize(ctx, &ret_bitmap);
}
StringVal BitmapFunctions::sub_bitmap(FunctionContext* ctx, const StringVal& src,
const BigIntVal& offset, const BigIntVal& cardinality_limit) {
if (src.is_null || offset.is_null || cardinality_limit.is_null || cardinality_limit.val <= 0) {
return StringVal::null();
}
BitmapValue ret_bitmap;
if (src.len == 0) {
ret_bitmap = *reinterpret_cast<BitmapValue*>(src.ptr);
} else {
BitmapValue bitmap = BitmapValue((char*)src.ptr);
if (bitmap.offset_limit(offset.val, cardinality_limit.val, &ret_bitmap) == 0) {
return StringVal::null();
}
}
return serialize(ctx, &ret_bitmap);
}
StringVal BitmapFunctions::bitmap_subset_limit(FunctionContext* ctx, const StringVal& src,
const BigIntVal& range_start, const BigIntVal& cardinality_limit) {
if (src.is_null || range_start.is_null || cardinality_limit.is_null) {