Add tests for filter_result_iterator_t::valid.

This commit is contained in:
Harpreet Sangar 2023-05-18 07:50:37 +05:30
parent 460ed6730a
commit 3fe8177737
2 changed files with 47 additions and 8 deletions

View File

@ -1061,7 +1061,7 @@ int filter_result_iterator_t::valid(uint32_t id) {
seq_id = std::max(left_it->seq_id, right_it->seq_id);
} else if (left_valid == 0) {
seq_id = left_it->seq_id;
} else if (right_valid == 0) {
} else {
seq_id = right_it->seq_id;
}
@ -1078,9 +1078,16 @@ int filter_result_iterator_t::valid(uint32_t id) {
return -1;
}
// id did not match the filter but both of the sub-iterators are still valid.
// Next seq_id match would be the minimum of the two.
seq_id = std::min(left_it->seq_id, right_it->seq_id);
// id did not match the filter; both of the sub-iterators or one of them might be valid.
// Updating seq_id to the next match.
if (left_valid == 0 && right_valid == 0) {
seq_id = std::min(left_it->seq_id, right_it->seq_id);
} else if (left_valid == 0) {
seq_id = left_it->seq_id;
} else {
seq_id = right_it->seq_id;
}
return 0;
}

View File

@ -281,14 +281,46 @@ TEST_F(FilterTest, FilterTreeIterator) {
filter_tree_root);
ASSERT_TRUE(filter_op.ok());
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());
auto iter_validate_ids_test1 = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_validate_ids_test1.init_status().ok());
std::vector<int> validate_ids = {0, 1, 2, 3, 4, 5, 6}, seq_ids = {0, 2, 2, 4, 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);
ASSERT_EQ(expected[i], iter_validate_ids_test1.valid(validate_ids[i]));
ASSERT_EQ(seq_ids[i], iter_validate_ids_test1.seq_id);
}
delete filter_tree_root;
filter_tree_root = nullptr;
filter_op = filter::parse_filter_query("tags: platinum || name: James", coll->get_schema(), store, doc_id_prefix,
filter_tree_root);
ASSERT_TRUE(filter_op.ok());
auto iter_validate_ids_test2 = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_validate_ids_test2.init_status().ok());
validate_ids = {0, 1, 2, 3, 4, 5, 6}, seq_ids = {1, 1, 5, 5, 5, 5, 5};
expected = {0, 1, 0, 0, 0, 1, -1};
for (uint32_t i = 0; i < validate_ids.size(); i++) {
ASSERT_EQ(expected[i], iter_validate_ids_test2.valid(validate_ids[i]));
ASSERT_EQ(seq_ids[i], iter_validate_ids_test2.seq_id);
}
delete filter_tree_root;
filter_tree_root = nullptr;
filter_op = filter::parse_filter_query("tags: gold && rating: < 6", coll->get_schema(), store, doc_id_prefix,
filter_tree_root);
ASSERT_TRUE(filter_op.ok());
auto iter_validate_ids_test3 = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_validate_ids_test3.init_status().ok());
validate_ids = {0, 1, 2, 3, 4, 5, 6}, seq_ids = {0, 3, 3, 4, 4, 4, 4};
expected = {1, 0, 0, 0, 1, -1, -1};
for (uint32_t i = 0; i < validate_ids.size(); i++) {
ASSERT_EQ(expected[i], iter_validate_ids_test3.valid(validate_ids[i]));
ASSERT_EQ(seq_ids[i], iter_validate_ids_test3.seq_id);
}
delete filter_tree_root;