mirror of
https://github.com/typesense/typesense.git
synced 2025-05-23 15:23:40 +08:00
Handle apply_not_equals
.
This commit is contained in:
parent
198488d428
commit
709e65ccbd
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user