Add tests.

This commit is contained in:
Harpreet Sangar 2023-04-21 09:48:19 +05:30
parent 9896541874
commit 6db0b108a1
2 changed files with 81 additions and 12 deletions

View File

@ -858,11 +858,15 @@ void filter_result_iterator_t::skip_to(uint32_t id) {
seq_id = result_index;
uint32_t previous_match;
// Keep ignoring the found gaps till they cannot contain id.
do {
previous_match = seq_id;
advance_string_filter_token_iterators();
doc_matching_string_filter(f.is_array());
} while (is_valid && previous_match + 1 == seq_id && seq_id >= id);
do {
previous_match = seq_id;
advance_string_filter_token_iterators();
doc_matching_string_filter(f.is_array());
} while (is_valid && previous_match + 1 == seq_id);
} while (is_valid && seq_id <= id);
if (!is_valid) {
// filter matched all the ids in the index. So for not equals, there's no match.
@ -873,11 +877,22 @@ void filter_result_iterator_t::skip_to(uint32_t id) {
is_valid = true;
seq_id = previous_match + 1;
result_index = index->seq_ids->last_id() + 1;
// Skip to id, if possible.
if (seq_id < id && id < result_index) {
seq_id = id;
}
return;
}
result_index = seq_id;
seq_id = previous_match + 1;
if (seq_id < id && id < result_index) {
seq_id = id;
}
return;
}

View File

@ -186,16 +186,29 @@ TEST_F(FilterTest, FilterTreeIterator) {
filter_tree_root);
ASSERT_TRUE(filter_op.ok());
auto iter_skip_test = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_skip_test.init_status().ok());
auto iter_skip_test1 = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_skip_test1.init_status().ok());
ASSERT_TRUE(iter_skip_test.is_valid);
iter_skip_test.skip_to(3);
ASSERT_TRUE(iter_skip_test.is_valid);
ASSERT_EQ(4, iter_skip_test.seq_id);
iter_skip_test.next();
ASSERT_TRUE(iter_skip_test1.is_valid);
iter_skip_test1.skip_to(3);
ASSERT_TRUE(iter_skip_test1.is_valid);
ASSERT_EQ(4, iter_skip_test1.seq_id);
iter_skip_test1.next();
ASSERT_FALSE(iter_skip_test.is_valid);
ASSERT_FALSE(iter_skip_test1.is_valid);
delete filter_tree_root;
filter_tree_root = nullptr;
filter_op = filter::parse_filter_query("tags: != silver", coll->get_schema(), store, doc_id_prefix,
filter_tree_root);
ASSERT_TRUE(filter_op.ok());
auto iter_skip_test2 = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_skip_test2.init_status().ok());
ASSERT_TRUE(iter_skip_test2.is_valid);
iter_skip_test2.skip_to(3);
ASSERT_FALSE(iter_skip_test2.is_valid);
delete filter_tree_root;
filter_tree_root = nullptr;
@ -426,4 +439,45 @@ TEST_F(FilterTest, FilterTreeIterator) {
delete and_result;
delete filter_tree_root;
doc = R"({
"name": "James Rowdy",
"age": 36,
"years": [2005, 2022],
"rating": 6.03,
"tags": ["FINE PLATINUM"]
})"_json;
add_op = coll->add(doc.dump());
ASSERT_TRUE(add_op.ok());
filter_tree_root = nullptr;
filter_op = filter::parse_filter_query("tags: != FINE PLATINUM", coll->get_schema(), store, doc_id_prefix,
filter_tree_root);
ASSERT_TRUE(filter_op.ok());
auto iter_skip_test3 = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_skip_test3.init_status().ok());
ASSERT_TRUE(iter_skip_test3.is_valid);
iter_skip_test3.skip_to(4);
ASSERT_EQ(4, iter_skip_test3.seq_id);
ASSERT_TRUE(iter_skip_test3.is_valid);
delete filter_tree_root;
filter_tree_root = nullptr;
filter_op = filter::parse_filter_query("tags: != gold", coll->get_schema(), store, doc_id_prefix,
filter_tree_root);
ASSERT_TRUE(filter_op.ok());
auto iter_skip_test4 = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_skip_test4.init_status().ok());
ASSERT_TRUE(iter_skip_test4.is_valid);
iter_skip_test4.skip_to(6);
ASSERT_EQ(6, iter_skip_test4.seq_id);
ASSERT_TRUE(iter_skip_test4.is_valid);
delete filter_tree_root;
}