Handle apply_not_equals.

This commit is contained in:
Harpreet Sangar 2023-03-21 18:01:26 +05:30
parent 198488d428
commit 709e65ccbd
2 changed files with 33 additions and 1 deletions

View File

@ -459,6 +459,23 @@ bool filter_result_iterator_t::valid(uint32_t id) {
}
}
if (filter_node->filter_exp.apply_not_equals) {
// Even when iterator becomes invalid, we keep it marked as valid since we are evaluating not equals.
if (!valid()) {
is_valid = true;
return is_valid;
}
skip_to(id);
if (!is_valid) {
is_valid = true;
return is_valid;
}
return doc != id;
}
skip_to(id);
return is_valid && doc == id;
}

View File

@ -256,7 +256,22 @@ TEST_F(FilterTest, FilterTreeIterator) {
ASSERT_TRUE(iter_validate_ids_test.valid(i));
}
ASSERT_FALSE(iter_skip_complex_filter_test.valid());
ASSERT_TRUE(iter_op.ok());
delete filter_tree_root;
filter_tree_root = nullptr;
filter_op = filter::parse_filter_query("name: James || tags: != gold", coll->get_schema(), store, doc_id_prefix,
filter_tree_root);
ASSERT_TRUE(filter_op.ok());
auto iter_validate_ids_not_equals_filter_test = filter_result_iterator_t(coll->get_name(), coll->_get_index(),
filter_tree_root, iter_op);
expected = {1, 3, 5};
for (auto const& i : expected) {
ASSERT_TRUE(iter_validate_ids_not_equals_filter_test.valid(i));
}
ASSERT_TRUE(iter_op.ok());
delete filter_tree_root;