From 8cd2d201e6f26ad9069c5542800b5a8be884b228 Mon Sep 17 00:00:00 2001 From: Harpreet Sangar Date: Wed, 15 Nov 2023 17:40:23 +0530 Subject: [PATCH] Log filter_query on error. --- include/filter.h | 5 +++-- src/filter.cpp | 3 +++ src/filter_result_iterator.cpp | 6 +++--- test/collection_filtering_test.cpp | 3 ++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/filter.h b/include/filter.h index 486b7a5e..84dd793b 100644 --- a/include/filter.h +++ b/include/filter.h @@ -62,10 +62,11 @@ struct filter { struct filter_node_t { filter filter_exp; - FILTER_OPERATOR filter_operator; - bool isOperator; + FILTER_OPERATOR filter_operator = AND; + bool isOperator = false; filter_node_t* left = nullptr; filter_node_t* right = nullptr; + std::string filter_query; filter_node_t() = default; diff --git a/src/filter.cpp b/src/filter.cpp index 7d8aa46a..f5a70b53 100644 --- a/src/filter.cpp +++ b/src/filter.cpp @@ -677,6 +677,7 @@ Option toParseTree(std::queue& postfix, filter_node_t*& root, nodeStack.pop(); filter_node = new filter_node_t(expression == "&&" ? AND : OR, operandA, operandB); + filter_node->filter_query = operandA->filter_query + " " + expression + " " + operandB->filter_query; } else { filter filter_exp; @@ -706,6 +707,7 @@ Option toParseTree(std::queue& postfix, filter_node_t*& root, } filter_node = new filter_node_t(filter_exp); + filter_node->filter_query = expression; } nodeStack.push(filter_node); @@ -765,5 +767,6 @@ Option filter::parse_filter_query(const std::string& filter_query, return toParseTree_op; } + root->filter_query = filter_query; return Option(true); } diff --git a/src/filter_result_iterator.cpp b/src/filter_result_iterator.cpp index 9c4a9233..6b45b32f 100644 --- a/src/filter_result_iterator.cpp +++ b/src/filter_result_iterator.cpp @@ -1772,17 +1772,17 @@ void filter_result_iterator_t::compute_result() { if (filter_result.count == 0) { is_valid = false; - LOG(ERROR) << "filter_result.count is 0"; + LOG(ERROR) << "filter_result.count is 0 " << filter_node->filter_query; return; } else if (result_index != 0) { result_index = 0; - LOG(ERROR) << "result_index is not 0"; + LOG(ERROR) << "result_index is not 0 " << filter_node->filter_query; return; } if (result_index >= filter_result.count) { is_valid = false; - LOG(ERROR) << "result_index is greater than filter_result.count"; + LOG(ERROR) << "result_index is greater than filter_result.count " << filter_node->filter_query; return; } diff --git a/test/collection_filtering_test.cpp b/test/collection_filtering_test.cpp index 1288cbd5..ec09ad0f 100644 --- a/test/collection_filtering_test.cpp +++ b/test/collection_filtering_test.cpp @@ -2094,7 +2094,8 @@ TEST_F(CollectionFilteringTest, ComplexFilterQuery) { {"name": "name", "type": "string"}, {"name": "age", "type": "int32"}, {"name": "years", "type": "int32[]"}, - {"name": "rating", "type": "float"} + {"name": "rating", "type": "float"}, + {"name": "tags", "type": "string[]"} ] })"_json;