Fix filter_result_iterator_t::valid(uint32_t id) not updating seq_id in case of complex filter.

This commit is contained in:
Harpreet Sangar 2023-04-28 14:55:39 +05:30
parent e9ce1c0955
commit b72e31bc5c
2 changed files with 12 additions and 1 deletions

View File

@ -1014,6 +1014,14 @@ int filter_result_iterator_t::valid(uint32_t id) {
if (filter_node->isOperator) {
auto left_valid = left_it->valid(id), right_valid = right_it->valid(id);
if (left_it->is_valid && right_it->is_valid) {
seq_id = std::min(left_it->seq_id, right_it->seq_id);
} else if (left_it->is_valid) {
seq_id = left_it->seq_id;
} else if (right_it->is_valid) {
seq_id = right_it->seq_id;
}
if (filter_node->filter_operator == AND) {
is_valid = left_it->is_valid && right_it->is_valid;

View File

@ -284,10 +284,11 @@ TEST_F(FilterTest, FilterTreeIterator) {
auto iter_validate_ids_test = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_validate_ids_test.init_status().ok());
std::vector<int> validate_ids = {0, 1, 2, 3, 4, 5, 6};
std::vector<int> validate_ids = {0, 1, 2, 3, 4, 5, 6}, seq_ids = {0, 2, 2, 3, 4, 5, 5};
expected = {1, 0, 1, 0, 1, 1, -1};
for (uint32_t i = 0; i < validate_ids.size(); i++) {
ASSERT_EQ(expected[i], iter_validate_ids_test.valid(validate_ids[i]));
ASSERT_EQ(seq_ids[i], iter_validate_ids_test.seq_id);
}
delete filter_tree_root;
@ -301,9 +302,11 @@ TEST_F(FilterTest, FilterTreeIterator) {
ASSERT_TRUE(iter_validate_ids_not_equals_filter_test.init_status().ok());
validate_ids = {0, 1, 2, 3, 4, 5, 6};
seq_ids = {1, 1, 3, 3, 5, 5, 5};
expected = {0, 1, 0, 1, 0, 1, -1};
for (uint32_t i = 0; i < validate_ids.size(); i++) {
ASSERT_EQ(expected[i], iter_validate_ids_not_equals_filter_test.valid(validate_ids[i]));
ASSERT_EQ(seq_ids[i], iter_validate_ids_not_equals_filter_test.seq_id);
}
delete filter_tree_root;