mirror of
https://github.com/typesense/typesense.git
synced 2025-05-25 00:01:18 +08:00
Fix filter_result_iterator_t::valid(uint32_t id)
not updating seq_id
in case of complex filter.
This commit is contained in:
parent
e9ce1c0955
commit
b72e31bc5c
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user