Handle null filter tree.

This commit is contained in:
Harpreet Sangar 2023-03-30 09:52:10 +05:30
parent 025f4bbd3a
commit dc74be283f
3 changed files with 20 additions and 1 deletions

View File

@ -53,6 +53,11 @@ public:
collection_name(collection_name),
index(index),
filter_node(filter_node) {
if (filter_node == nullptr) {
is_valid = false;
return;
}
// Generate the iterator tree and then initialize each node.
if (filter_node->isOperator) {
left_it = new filter_result_iterator_t(collection_name, index, filter_node->left);

View File

@ -207,6 +207,10 @@ void filter_result_iterator_t::next() {
}
void filter_result_iterator_t::init() {
if (filter_node == nullptr) {
return;
}
if (filter_node->isOperator) {
if (filter_node->filter_operator == AND) {
and_filter_iterators();
@ -494,7 +498,7 @@ int filter_result_iterator_t::valid(uint32_t id) {
}
Option<bool> filter_result_iterator_t::init_status() {
if (filter_node->isOperator) {
if (filter_node != nullptr && filter_node->isOperator) {
auto left_status = left_it->init_status();
return !left_status.ok() ? left_status : right_it->init_status();
@ -546,6 +550,10 @@ bool filter_result_iterator_t::contains_atleast_one(const void *obj) {
}
void filter_result_iterator_t::reset() {
if (filter_node == nullptr) {
return;
}
if (filter_node->isOperator) {
// Reset the subtrees then apply operators to arrive at the first valid doc.
left_it->reset();

View File

@ -61,6 +61,12 @@ TEST_F(FilterTest, FilterTreeIterator) {
const std::string doc_id_prefix = std::to_string(coll->get_collection_id()) + "_" + Collection::DOC_ID_PREFIX + "_";
filter_node_t* filter_tree_root = nullptr;
auto iter_null_filter_tree_test = filter_result_iterator_t(coll->get_name(), coll->_get_index(), filter_tree_root);
ASSERT_TRUE(iter_null_filter_tree_test.init_status().ok());
ASSERT_FALSE(iter_null_filter_tree_test.valid());
Option<bool> filter_op = filter::parse_filter_query("name: foo", coll->get_schema(), store, doc_id_prefix,
filter_tree_root);
ASSERT_TRUE(filter_op.ok());