Use all() api for bitset check (#20462)

Signed-off-by: Li Liu <liliu@LideMacBook-Pro.local>

Signed-off-by: Li Liu <liliu@LideMacBook-Pro.local>
Co-authored-by: Li Liu <liliu@LideMacBook-Pro.local>
pull/20483/head
liliu-z 2022-11-10 16:15:05 +08:00 committed by GitHub
parent a68cec85af
commit 174310a14e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 8 deletions

View File

@ -88,22 +88,23 @@ ExecPlanNodeVisitor::VectorVisitorImpl(VectorPlanNode& node) {
return;
}
BitsetType bitset_holder;
std::unique_ptr<BitsetType> bitset_holder;
if (node.predicate_.has_value()) {
bitset_holder = ExecExprVisitor(*segment, active_count, timestamp_).call_child(*node.predicate_.value());
bitset_holder.flip();
bitset_holder = std::make_unique<BitsetType>(
ExecExprVisitor(*segment, active_count, timestamp_).call_child(*node.predicate_.value()));
bitset_holder->flip();
} else {
bitset_holder.resize(active_count, false);
bitset_holder = std::make_unique<BitsetType>(active_count, false);
}
segment->mask_with_timestamps(bitset_holder, timestamp_);
segment->mask_with_timestamps(*bitset_holder, timestamp_);
segment->mask_with_delete(bitset_holder, active_count, timestamp_);
segment->mask_with_delete(*bitset_holder, active_count, timestamp_);
// if bitset_holder is all 1's, we got empty result
if (bitset_holder.count() == bitset_holder.size()) {
if (bitset_holder->all()) {
search_result_opt_ = empty_search_result(num_queries, node.search_info_);
return;
}
BitsetView final_view = bitset_holder;
BitsetView final_view = *bitset_holder;
segment->vector_search(node.search_info_, src_data, num_queries, timestamp_, final_view, search_result);
search_result_opt_ = std::move(search_result);