mirror of
https://github.com/typesense/typesense.git
synced 2025-05-17 12:12:35 +08:00
Fix eval valgrind errors.
# Conflicts: # src/collection.cpp
This commit is contained in:
parent
6bb2e6e6f8
commit
241a6e0476
@ -500,6 +500,7 @@ struct sort_by {
|
||||
exclude_radius = other.exclude_radius;
|
||||
geo_precision = other.geo_precision;
|
||||
missing_values = other.missing_values;
|
||||
eval = other.eval;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
@ -93,7 +93,7 @@ struct search_args {
|
||||
std::vector<facet>& facets;
|
||||
std::vector<std::pair<uint32_t, uint32_t>>& included_ids;
|
||||
std::vector<uint32_t> excluded_ids;
|
||||
std::vector<sort_by> sort_fields_std;
|
||||
std::vector<sort_by>& sort_fields_std;
|
||||
facet_query_t facet_query;
|
||||
std::vector<uint32_t> num_typos;
|
||||
size_t max_facet_values;
|
||||
@ -133,7 +133,7 @@ struct search_args {
|
||||
search_args(std::vector<query_tokens_t> field_query_tokens, std::vector<search_field_t> search_fields,
|
||||
std::vector<filter> filters, std::vector<facet>& facets,
|
||||
std::vector<std::pair<uint32_t, uint32_t>>& included_ids, std::vector<uint32_t> excluded_ids,
|
||||
std::vector<sort_by> sort_fields_std, facet_query_t facet_query, const std::vector<uint32_t>& num_typos,
|
||||
std::vector<sort_by>& sort_fields_std, facet_query_t facet_query, const std::vector<uint32_t>& num_typos,
|
||||
size_t max_facet_values, size_t max_hits, size_t per_page, size_t page, token_ordering token_order,
|
||||
const std::vector<bool>& prefixes, size_t drop_tokens_threshold, size_t typo_tokens_threshold,
|
||||
const std::vector<std::string>& group_by_fields, size_t group_limit,
|
||||
|
@ -38,6 +38,20 @@ struct match_index_t {
|
||||
}
|
||||
};
|
||||
|
||||
struct sort_fields_guard_t {
|
||||
std::vector<sort_by> sort_fields_std;
|
||||
|
||||
~sort_fields_guard_t() {
|
||||
for(auto& sort_by_clause: sort_fields_std) {
|
||||
if(sort_by_clause.eval.ids) {
|
||||
delete [] sort_by_clause.eval.ids;
|
||||
sort_by_clause.eval.ids = nullptr;
|
||||
sort_by_clause.eval.size = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Collection::Collection(const std::string& name, const uint32_t collection_id, const uint64_t created_at,
|
||||
const uint32_t next_seq_id, Store *store, const std::vector<field> &fields,
|
||||
const std::string& default_sorting_field,
|
||||
@ -1039,7 +1053,8 @@ Option<nlohmann::json> Collection::search(const std::string & raw_query,
|
||||
|
||||
// validate sort fields and standardize
|
||||
|
||||
std::vector<sort_by> sort_fields_std;
|
||||
sort_fields_guard_t sort_fields_guard;
|
||||
std::vector<sort_by>& sort_fields_std = sort_fields_guard.sort_fields_std;
|
||||
|
||||
if(curated_sort_by.empty()) {
|
||||
auto sort_validation_op = validate_and_standardize_sort_fields(sort_fields, sort_fields_std);
|
||||
|
@ -1835,7 +1835,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingWildcard) {
|
||||
ASSERT_TRUE(coll1->add(doc.dump()).ok());
|
||||
}
|
||||
|
||||
auto sort_fields = {
|
||||
std::vector<sort_by> sort_fields = {
|
||||
sort_by("_eval(brand:nike)", "DESC"),
|
||||
sort_by("points", "DESC"),
|
||||
};
|
||||
@ -1844,7 +1844,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingWildcard) {
|
||||
|
||||
ASSERT_EQ(5, results["hits"].size());
|
||||
std::vector<std::string> expected_ids = {"3", "0", "4", "2", "1"};
|
||||
for(size_t i = 0; i > expected_ids.size(); i++) {
|
||||
for(size_t i = 0; i < expected_ids.size(); i++) {
|
||||
ASSERT_EQ(expected_ids[i], results["hits"][i]["document"]["id"].get<std::string>());
|
||||
}
|
||||
|
||||
@ -1858,7 +1858,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingWildcard) {
|
||||
ASSERT_EQ(5, results["hits"].size());
|
||||
|
||||
expected_ids = {"0", "4", "3", "2", "1"};
|
||||
for(size_t i = 0; i > expected_ids.size(); i++) {
|
||||
for(size_t i = 0; i < expected_ids.size(); i++) {
|
||||
ASSERT_EQ(expected_ids[i], results["hits"][i]["document"]["id"].get<std::string>());
|
||||
}
|
||||
|
||||
@ -1872,7 +1872,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingWildcard) {
|
||||
|
||||
ASSERT_EQ(5, results["hits"].size());
|
||||
expected_ids = {"4", "3", "2", "1", "0"};
|
||||
for(size_t i = 0; i > expected_ids.size(); i++) {
|
||||
for(size_t i = 0; i < expected_ids.size(); i++) {
|
||||
ASSERT_EQ(expected_ids[i], results["hits"][i]["document"]["id"].get<std::string>());
|
||||
}
|
||||
|
||||
@ -1933,7 +1933,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingSearch) {
|
||||
ASSERT_TRUE(coll1->add(doc.dump()).ok());
|
||||
}
|
||||
|
||||
auto sort_fields = {
|
||||
std::vector<sort_by> sort_fields = {
|
||||
sort_by("_eval(brand:nike)", "DESC"),
|
||||
sort_by("points", "DESC"),
|
||||
};
|
||||
@ -1942,7 +1942,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingSearch) {
|
||||
|
||||
ASSERT_EQ(5, results["hits"].size());
|
||||
std::vector<std::string> expected_ids = {"3", "0", "4", "2", "1"};
|
||||
for(size_t i = 0; i > expected_ids.size(); i++) {
|
||||
for(size_t i = 0; i < expected_ids.size(); i++) {
|
||||
ASSERT_EQ(expected_ids[i], results["hits"][i]["document"]["id"].get<std::string>());
|
||||
}
|
||||
|
||||
@ -1956,7 +1956,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingSearch) {
|
||||
ASSERT_EQ(5, results["hits"].size());
|
||||
|
||||
expected_ids = {"0", "4", "3", "2", "1"};
|
||||
for(size_t i = 0; i > expected_ids.size(); i++) {
|
||||
for(size_t i = 0; i < expected_ids.size(); i++) {
|
||||
ASSERT_EQ(expected_ids[i], results["hits"][i]["document"]["id"].get<std::string>());
|
||||
}
|
||||
|
||||
@ -1970,7 +1970,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingSearch) {
|
||||
|
||||
ASSERT_EQ(5, results["hits"].size());
|
||||
expected_ids = {"4", "3", "2", "1", "0"};
|
||||
for(size_t i = 0; i > expected_ids.size(); i++) {
|
||||
for(size_t i = 0; i < expected_ids.size(); i++) {
|
||||
ASSERT_EQ(expected_ids[i], results["hits"][i]["document"]["id"].get<std::string>());
|
||||
}
|
||||
|
||||
@ -2022,7 +2022,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingSecondThirdParams) {
|
||||
ASSERT_TRUE(coll1->add(doc.dump()).ok());
|
||||
}
|
||||
|
||||
auto sort_fields = {
|
||||
std::vector<sort_by> sort_fields = {
|
||||
sort_by("val", "DESC"),
|
||||
sort_by("_eval(brand:nike)", "DESC"),
|
||||
sort_by("points", "DESC"),
|
||||
@ -2032,7 +2032,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingSecondThirdParams) {
|
||||
|
||||
ASSERT_EQ(5, results["hits"].size());
|
||||
std::vector<std::string> expected_ids = {"3", "0", "4", "2", "1"};
|
||||
for(size_t i = 0; i > expected_ids.size(); i++) {
|
||||
for(size_t i = 0; i < expected_ids.size(); i++) {
|
||||
ASSERT_EQ(expected_ids[i], results["hits"][i]["document"]["id"].get<std::string>());
|
||||
}
|
||||
|
||||
@ -2045,7 +2045,7 @@ TEST_F(CollectionSortingTest, OptionalFilteringViaSortingSecondThirdParams) {
|
||||
|
||||
results = coll1->search("title", {"title"}, "", {}, sort_fields, {2}, 10, 1, FREQUENCY, {true}, 10).get();
|
||||
ASSERT_EQ(5, results["hits"].size());
|
||||
for(size_t i = 0; i > expected_ids.size(); i++) {
|
||||
for(size_t i = 0; i < expected_ids.size(); i++) {
|
||||
ASSERT_EQ(expected_ids[i], results["hits"][i]["document"]["id"].get<std::string>());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user