From 901626652a944cbd9e3dda82f63b66b96b40d61f Mon Sep 17 00:00:00 2001 From: Kishore Nallan Date: Tue, 19 Sep 2017 22:01:08 +0530 Subject: [PATCH] Make type definitions less verbose. Use string[] instead of STRING_ARRAY and so on. --- TODO.md | 3 ++ include/collection_manager.h | 2 +- include/field.h | 14 ++++---- src/api.cpp | 6 ++-- src/collection.cpp | 45 ++++++++++++++------------ src/collection_manager.cpp | 4 +-- src/main/benchmark.cpp | 4 +-- src/main/main.cpp | 4 +-- test/collection_manager_test.cpp | 12 +++---- test/collection_test.cpp | 55 ++++++++++++++++---------------- 10 files changed, 78 insertions(+), 71 deletions(-) diff --git a/TODO.md b/TODO.md index 92f53ef3..1ce38d3b 100644 --- a/TODO.md +++ b/TODO.md @@ -62,6 +62,9 @@ - Validate before string to int conversion in the http api layer - When field of "id" but not string, what happens? - Typo in prefix search +- node score should be int32, no longer uint16 like in document struct +- json::parse must be wrapped in try catch +- test for num_documents - test for string filter comparison: title < "foo" - test for token ranking on float field - test for float int field deletion during doc deletion diff --git a/include/collection_manager.h b/include/collection_manager.h index 501073f5..d191d1e6 100644 --- a/include/collection_manager.h +++ b/include/collection_manager.h @@ -53,7 +53,7 @@ public: bool auth_key_matches(std::string auth_key_sent); - Collection* create_collection(std::string name, const std::vector & search_fields, + Option create_collection(std::string name, const std::vector & search_fields, const std::vector & facet_fields, const std::vector & sort_fields, const std::string & token_ranking_field = ""); diff --git a/include/field.h b/include/field.h index 7036eebc..4408c400 100644 --- a/include/field.h +++ b/include/field.h @@ -6,14 +6,14 @@ #include "string_utils.h" namespace field_types { - static const std::string STRING = "STRING"; - static const std::string INT32 = "INT32"; - static const std::string INT64 = "INT64"; + static const std::string STRING = "string"; + static const std::string INT32 = "int32"; + static const std::string INT64 = "int64"; static const std::string FLOAT = "FLOAT"; - static const std::string FLOAT_ARRAY = "FLOAT_ARRAY"; - static const std::string STRING_ARRAY = "STRING_ARRAY"; - static const std::string INT32_ARRAY = "INT32_ARRAY"; - static const std::string INT64_ARRAY = "INT64_ARRAY"; + static const std::string FLOAT_ARRAY = "float[]"; + static const std::string STRING_ARRAY = "string[]"; + static const std::string INT32_ARRAY = "int32[]"; + static const std::string INT64_ARRAY = "int64[]"; } namespace fields { diff --git a/src/api.cpp b/src/api.cpp index a089f271..319bfc56 100644 --- a/src/api.cpp +++ b/src/api.cpp @@ -110,8 +110,8 @@ void post_create_collection(http_req & req, http_res & res) { "[{\"name\": \"\", \"type\": \"\"}]"); } - if(sort_field_json["type"] != "INT32" && sort_field_json["type"] != "INT64") { - return res.send_400("Sort field `" + sort_field_json["name"].get() + "` must be a number."); + if(sort_field_json["type"] != field_types::INT32 && sort_field_json["type"] != field_types::INT64) { + return res.send_400("Sort field `" + sort_field_json["name"].get() + "` must be an integer."); } sort_fields.push_back(field(sort_field_json["name"], sort_field_json["type"])); @@ -122,7 +122,7 @@ void post_create_collection(http_req & req, http_res & res) { if(req_json.count(PREFIX_RANKING_FIELD) != 0) { if(!req_json[PREFIX_RANKING_FIELD].is_string()) { - return res.send_400(std::string("Wrong format for `") + PREFIX_RANKING_FIELD + "`. It should be the name of an unsigned INT32 field."); + return res.send_400(std::string("`") + PREFIX_RANKING_FIELD + "` should be the name of an unsigned integer field."); } token_ranking_field = req_json[PREFIX_RANKING_FIELD].get(); diff --git a/src/collection.cpp b/src/collection.cpp index b68b9897..cc138d09 100644 --- a/src/collection.cpp +++ b/src/collection.cpp @@ -66,7 +66,12 @@ void Collection::increment_next_seq_id_field() { } Option Collection::add(const std::string & json_str) { - nlohmann::json document = nlohmann::json::parse(json_str); + nlohmann::json document; + try { + document = nlohmann::json::parse(json_str); + } catch(...) { + return Option(400, "Bad JSON."); + } uint32_t seq_id = get_next_seq_id(); std::string seq_id_str = std::to_string(seq_id); @@ -97,12 +102,12 @@ Option Collection::index_in_memory(const nlohmann::json &document, uin "but is not found in the document."); } - if(!token_ranking_field.empty() && !document[token_ranking_field].is_number_unsigned()) { - return Option<>(400, "Token ranking field `" + token_ranking_field + "` must be an unsigned INT32."); + if(!token_ranking_field.empty() && !document[token_ranking_field].is_number_integer()) { + return Option<>(400, "Token ranking field `" + token_ranking_field + "` must be an int32."); } if(!token_ranking_field.empty() && document[token_ranking_field].get() > INT32_MAX) { - return Option<>(400, "Token ranking field `" + token_ranking_field + "` exceeds maximum value of INT32."); + return Option<>(400, "Token ranking field `" + token_ranking_field + "` exceeds maximum value of int32."); } if(!token_ranking_field.empty() && document[token_ranking_field].get() < 0) { @@ -126,75 +131,75 @@ Option Collection::index_in_memory(const nlohmann::json &document, uin if(field_pair.second.type == field_types::STRING) { if(!document[field_name].is_string()) { - return Option<>(400, "Search field `" + field_name + "` must be a STRING."); + return Option<>(400, "Search field `" + field_name + "` must be a string."); } const std::string & text = document[field_name]; index_string_field(text, points, t, seq_id, false); } else if(field_pair.second.type == field_types::INT32) { if(!document[field_name].is_number_integer()) { - return Option<>(400, "Search field `" + field_name + "` must be an INT32."); + return Option<>(400, "Search field `" + field_name + "` must be an int32."); } if(document[field_name].get() > INT32_MAX) { - return Option<>(400, "Search field `" + field_name + "` exceeds maximum value of INT32."); + return Option<>(400, "Search field `" + field_name + "` exceeds maximum value of int32."); } uint32_t value = document[field_name]; index_int32_field(value, points, t, seq_id); } else if(field_pair.second.type == field_types::INT64) { if(!document[field_name].is_number_integer()) { - return Option<>(400, "Search field `" + field_name + "` must be an INT64."); + return Option<>(400, "Search field `" + field_name + "` must be an int64."); } uint64_t value = document[field_name]; index_int64_field(value, points, t, seq_id); } else if(field_pair.second.type == field_types::FLOAT) { if(!document[field_name].is_number_float()) { - return Option<>(400, "Search field `" + field_name + "` must be a FLOAT."); + return Option<>(400, "Search field `" + field_name + "` must be a float."); } float value = document[field_name]; index_float_field(value, points, t, seq_id); } else if(field_pair.second.type == field_types::STRING_ARRAY) { if(!document[field_name].is_array()) { - return Option<>(400, "Search field `" + field_name + "` must be a STRING_ARRAY."); + return Option<>(400, "Search field `" + field_name + "` must be a string array."); } if(document[field_name].size() > 0 && !document[field_name][0].is_string()) { - return Option<>(400, "Search field `" + field_name + "` must be a STRING_ARRAY."); + return Option<>(400, "Search field `" + field_name + "` must be a string array."); } std::vector strings = document[field_name]; index_string_array_field(strings, points, t, seq_id, false); } else if(field_pair.second.type == field_types::INT32_ARRAY) { if(!document[field_name].is_array()) { - return Option<>(400, "Search field `" + field_name + "` must be an INT32_ARRAY."); + return Option<>(400, "Search field `" + field_name + "` must be an int32 array."); } if(document[field_name].size() > 0 && !document[field_name][0].is_number_integer()) { - return Option<>(400, "Search field `" + field_name + "` must be an INT32_ARRAY."); + return Option<>(400, "Search field `" + field_name + "` must be an int32 array."); } std::vector values = document[field_name]; index_int32_array_field(values, points, t, seq_id); } else if(field_pair.second.type == field_types::INT64_ARRAY) { if(!document[field_name].is_array()) { - return Option<>(400, "Search field `" + field_name + "` must be an INT64_ARRAY."); + return Option<>(400, "Search field `" + field_name + "` must be an int64 array."); } if(document[field_name].size() > 0 && !document[field_name][0].is_number_integer()) { - return Option<>(400, "Search field `" + field_name + "` must be an INT64_ARRAY."); + return Option<>(400, "Search field `" + field_name + "` must be an int64 array."); } std::vector values = document[field_name]; index_int64_array_field(values, points, t, seq_id); } else if(field_pair.second.type == field_types::FLOAT_ARRAY) { if(!document[field_name].is_array()) { - return Option<>(400, "Search field `" + field_name + "` must be an FLOAT_ARRAY."); + return Option<>(400, "Search field `" + field_name + "` must be a float array."); } if(document[field_name].size() > 0 && !document[field_name][0].is_number_float()) { - return Option<>(400, "Search field `" + field_name + "` must be an FLOAT_ARRAY."); + return Option<>(400, "Search field `" + field_name + "` must be a float array."); } std::vector values = document[field_name]; @@ -213,17 +218,17 @@ Option Collection::index_in_memory(const nlohmann::json &document, uin facet_value & fvalue = facet_index.at(field_name); if(field_pair.second.type == field_types::STRING) { if(!document[field_name].is_string()) { - return Option<>(400, "Facet field `" + field_name + "` must be a STRING."); + return Option<>(400, "Facet field `" + field_name + "` must be a string."); } const std::string & value = document[field_name]; fvalue.index_values(seq_id, { value }); } else if(field_pair.second.type == field_types::STRING_ARRAY) { if(!document[field_name].is_array()) { - return Option<>(400, "Facet field `" + field_name + "` must be a STRING_ARRAY."); + return Option<>(400, "Facet field `" + field_name + "` must be a string array."); } if(document[field_name].size() > 0 && !document[field_name][0].is_string()) { - return Option<>(400, "Facet field `" + field_name + "` must be a STRING_ARRAY."); + return Option<>(400, "Facet field `" + field_name + "` must be a string array."); } const std::vector & values = document[field_name]; diff --git a/src/collection_manager.cpp b/src/collection_manager.cpp index 54a8a78b..b0f3d7a3 100644 --- a/src/collection_manager.cpp +++ b/src/collection_manager.cpp @@ -109,12 +109,12 @@ bool CollectionManager::auth_key_matches(std::string auth_key_sent) { return (auth_key == auth_key_sent); } -Collection* CollectionManager::create_collection(std::string name, const std::vector & search_fields, +Option CollectionManager::create_collection(std::string name, const std::vector & search_fields, const std::vector & facet_fields, const std::vector & sort_fields, const std::string & token_ranking_field) { if(store->contains(Collection::get_meta_key(name))) { - return nullptr; + return Option(409, std::string("A collection with name `") + name + "` already exists."); } nlohmann::json collection_meta; diff --git a/src/main/benchmark.cpp b/src/main/benchmark.cpp index 03520aee..4a3bef22 100644 --- a/src/main/benchmark.cpp +++ b/src/main/benchmark.cpp @@ -17,14 +17,14 @@ int main(int argc, char* argv[]) { system("rm -rf /tmp/typesense-data && mkdir -p /tmp/typesense-data"); std::vector fields_to_index = {field("title", field_types::STRING)}; - std::vector sort_fields = { field("points", "INT32")}; + std::vector sort_fields = { field("points", field_types::INT32)}; Store *store = new Store("/tmp/typesense-data"); CollectionManager & collectionManager = CollectionManager::get_instance(); collectionManager.init(store, "abcd"); Collection *collection = collectionManager.get_collection("hnstories_direct"); if(collection == nullptr) { - collection = collectionManager.create_collection("hnstories_direct", fields_to_index, {}, sort_fields, "points"); + collection = collectionManager.create_collection("hnstories_direct", fields_to_index, {}, sort_fields, "points").get(); } std::ifstream infile("/Users/kishore/Downloads/hnstories_tiny.jsonl"); diff --git a/src/main/main.cpp b/src/main/main.cpp index 42c70e00..75adce40 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -39,12 +39,12 @@ int main(int argc, char* argv[]) { }; std::vector sort_fields = { - field("stars", "INT32") + field("stars", field_types::INT32) }; Collection *collection = collectionManager.get_collection("github_top1k"); if(collection == nullptr) { - collection = collectionManager.create_collection("github_top1k", fields_to_index, facet_fields_index, sort_fields); + collection = collectionManager.create_collection("github_top1k", fields_to_index, facet_fields_index, sort_fields).get(); } int j = 0; diff --git a/test/collection_manager_test.cpp b/test/collection_manager_test.cpp index dcc0d281..e49cd459 100644 --- a/test/collection_manager_test.cpp +++ b/test/collection_manager_test.cpp @@ -27,10 +27,10 @@ protected: search_fields = {field("title", field_types::STRING), field("starring", field_types::STRING)}; facet_fields = {field("starring", field_types::STRING)}; sort_fields = { sort_by("points", "DESC") }; - sort_fields_index = { field("points", "INT32") }; + sort_fields_index = { field("points", field_types::INT32) }; collection1 = collectionManager.create_collection("collection1", search_fields, facet_fields, - sort_fields_index, "points"); + sort_fields_index, "points").get(); } virtual void SetUp() { @@ -79,10 +79,10 @@ TEST_F(CollectionManagerTest, CollectionCreation) { ASSERT_EQ(3, num_keys); ASSERT_EQ("1", next_seq_id); // we already call `collection1->get_next_seq_id` above, which is side-effecting - ASSERT_EQ("{\"facet_fields\":[{\"name\":\"starring\",\"type\":\"STRING\"}],\"id\":0,\"name\":\"collection1\"," - "\"search_fields\":[{\"name\":\"title\",\"type\":\"STRING\"}," - "{\"name\":\"starring\",\"type\":\"STRING\"}]," - "\"sort_fields\":[{\"name\":\"points\",\"type\":\"INT32\"}]," + ASSERT_EQ("{\"facet_fields\":[{\"name\":\"starring\",\"type\":\"string\"}],\"id\":0,\"name\":\"collection1\"," + "\"search_fields\":[{\"name\":\"title\",\"type\":\"string\"}," + "{\"name\":\"starring\",\"type\":\"string\"}]," + "\"sort_fields\":[{\"name\":\"points\",\"type\":\"int32\"}]," "\"token_ranking_field\":\"points\"}", collection_meta_json); ASSERT_EQ("1", next_collection_id); } diff --git a/test/collection_test.cpp b/test/collection_test.cpp index 70d28449..af7c0504 100644 --- a/test/collection_test.cpp +++ b/test/collection_test.cpp @@ -32,12 +32,12 @@ protected: query_fields = {"title"}; facet_fields = { }; sort_fields = { sort_by("points", "DESC") }; - sort_fields_index = { field("points", "INT32") }; + sort_fields_index = { field("points", field_types::INT32) }; collection = collectionManager.get_collection("collection"); if(collection == nullptr) { collection = collectionManager.create_collection("collection", search_fields, facet_fields, - sort_fields_index, "points"); + sort_fields_index, "points").get(); } std::string json_line; @@ -419,7 +419,7 @@ TEST_F(CollectionTest, MultipleFields) { coll_mul_fields = collectionManager.get_collection("coll_mul_fields"); if(coll_mul_fields == nullptr) { - coll_mul_fields = collectionManager.create_collection("coll_mul_fields", fields, facet_fields, sort_fields_index); + coll_mul_fields = collectionManager.create_collection("coll_mul_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -498,11 +498,11 @@ TEST_F(CollectionTest, FilterOnNumericFields) { field("years", field_types::INT32_ARRAY), field("timestamps", field_types::INT64_ARRAY)}; std::vector sort_fields = { sort_by("age", "DESC") }; - std::vector sort_fields_index = { field("age", "INT32") }; + std::vector sort_fields_index = { field("age", field_types::INT32) }; coll_array_fields = collectionManager.get_collection("coll_array_fields"); if(coll_array_fields == nullptr) { - coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index); + coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -639,7 +639,7 @@ TEST_F(CollectionTest, FilterOnFloatFields) { coll_array_fields = collectionManager.get_collection("coll_array_fields"); if(coll_array_fields == nullptr) { - coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index); + coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -773,7 +773,7 @@ TEST_F(CollectionTest, SortOnFloatFields) { coll_float_fields = collectionManager.get_collection("coll_float_fields"); if(coll_float_fields == nullptr) { - coll_float_fields = collectionManager.create_collection("coll_float_fields", fields, facet_fields, sort_fields_index); + coll_float_fields = collectionManager.create_collection("coll_float_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -837,12 +837,12 @@ TEST_F(CollectionTest, FilterOnTextFields) { field("years", field_types::INT32_ARRAY), field("tags", field_types::STRING_ARRAY)}; - std::vector sort_fields_index = { field("age", "INT32") }; + std::vector sort_fields_index = { field("age", field_types::INT32) }; std::vector sort_fields = { sort_by("age", "DESC") }; coll_array_fields = collectionManager.get_collection("coll_array_fields"); if(coll_array_fields == nullptr) { - coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index); + coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -909,12 +909,12 @@ TEST_F(CollectionTest, HandleBadlyFormedFilterQuery) { field("timestamps", field_types::INT64_ARRAY), field("tags", field_types::STRING_ARRAY)}; - std::vector sort_fields_index = { field("age", "INT32") }; + std::vector sort_fields_index = { field("age", field_types::INT32) }; std::vector sort_fields = { sort_by("age", "DESC") }; coll_array_fields = collectionManager.get_collection("coll_array_fields"); if(coll_array_fields == nullptr) { - coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index); + coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -970,7 +970,7 @@ TEST_F(CollectionTest, FacetCounts) { coll_array_fields = collectionManager.get_collection("coll_array_fields"); if(coll_array_fields == nullptr) { - coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index); + coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -1046,7 +1046,7 @@ TEST_F(CollectionTest, SortingOrder) { coll_mul_fields = collectionManager.get_collection("coll_mul_fields"); if(coll_mul_fields == nullptr) { - coll_mul_fields = collectionManager.create_collection("coll_mul_fields", fields, facet_fields, sort_fields_index); + coll_mul_fields = collectionManager.create_collection("coll_mul_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -1134,7 +1134,7 @@ TEST_F(CollectionTest, SearchingWithMissingFields) { coll_array_fields = collectionManager.get_collection("coll_array_fields"); if(coll_array_fields == nullptr) { - coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index); + coll_array_fields = collectionManager.create_collection("coll_array_fields", fields, facet_fields, sort_fields_index).get(); } std::string json_line; @@ -1183,13 +1183,13 @@ TEST_F(CollectionTest, IndexingWithBadData) { std::vector fields = {field("name", field_types::STRING)}; facet_fields = {field("tags", field_types::STRING_ARRAY)}; - std::vector sort_fields_index = { field("age", "INT32"), field("average", "INT32") }; + std::vector sort_fields_index = { field("age", field_types::INT32), field("average", field_types::INT32) }; std::vector sort_fields = { sort_by("age", "DESC"), sort_by("average", "DESC") }; sample_collection = collectionManager.get_collection("sample_collection"); if(sample_collection == nullptr) { sample_collection = collectionManager.create_collection("sample_collection", fields, facet_fields, - sort_fields_index, "age"); + sort_fields_index, "age").get(); } const Option & search_fields_missing_op1 = sample_collection->add("{\"namezz\": \"foo\", \"age\": 29}"); @@ -1218,8 +1218,7 @@ TEST_F(CollectionTest, IndexingWithBadData) { doc_str = "{\"name\": \"foo\", \"age\": 34, \"tags\": 22}"; const Option & bad_facet_field_op = sample_collection->add(doc_str); ASSERT_FALSE(bad_facet_field_op.ok()); - ASSERT_STREQ("Facet field `tags` must be a STRING_ARRAY.", - bad_facet_field_op.error().c_str()); + ASSERT_STREQ("Facet field `tags` must be a string array.", bad_facet_field_op.error().c_str()); doc_str = "{\"name\": \"foo\", \"age\": 34, \"tags\": [], \"average\": 34}"; const Option & empty_facet_field_op = sample_collection->add(doc_str); @@ -1228,12 +1227,12 @@ TEST_F(CollectionTest, IndexingWithBadData) { doc_str = "{\"name\": \"foo\", \"age\": \"34\", \"tags\": [], \"average\": 34 }"; const Option & bad_token_ranking_field_op1 = sample_collection->add(doc_str); ASSERT_FALSE(bad_token_ranking_field_op1.ok()); - ASSERT_STREQ("Token ranking field `age` must be an unsigned INT32.", bad_token_ranking_field_op1.error().c_str()); + ASSERT_STREQ("Token ranking field `age` must be an int32.", bad_token_ranking_field_op1.error().c_str()); doc_str = "{\"name\": \"foo\", \"age\": 343234324234233234, \"tags\": [], \"average\": 34 }"; const Option & bad_token_ranking_field_op2 = sample_collection->add(doc_str); ASSERT_FALSE(bad_token_ranking_field_op2.ok()); - ASSERT_STREQ("Token ranking field `age` exceeds maximum value of INT32.", bad_token_ranking_field_op2.error().c_str()); + ASSERT_STREQ("Token ranking field `age` exceeds maximum value of int32.", bad_token_ranking_field_op2.error().c_str()); doc_str = "{\"name\": \"foo\", \"tags\": [], \"average\": 34 }"; const Option & bad_token_ranking_field_op3 = sample_collection->add(doc_str); @@ -1246,10 +1245,10 @@ TEST_F(CollectionTest, IndexingWithBadData) { ASSERT_FALSE(bad_rank_field_op.ok()); ASSERT_STREQ("Sort field `average` must be a number.", bad_rank_field_op.error().c_str()); - doc_str = "{\"name\": \"foo\", \"age\": -10, \"tags\": [], \"average\": 34 }"; + doc_str = "{\"name\": \"foo\", \"age\": asdadasd, \"tags\": [], \"average\": 34 }"; const Option & bad_token_ranking_field_op4 = sample_collection->add(doc_str); ASSERT_FALSE(bad_token_ranking_field_op4.ok()); - ASSERT_STREQ("Token ranking field `age` must be an unsigned INT32.", bad_token_ranking_field_op4.error().c_str()); + ASSERT_STREQ("Bad JSON.", bad_token_ranking_field_op4.error().c_str()); collectionManager.drop_collection("sample_collection"); } @@ -1260,12 +1259,12 @@ TEST_F(CollectionTest, EmptyIndexShouldNotCrash) { std::vector fields = {field("name", field_types::STRING)}; facet_fields = {field("tags", field_types::STRING_ARRAY)}; - std::vector sort_fields_index = { field("age", "INT32"), field("average", "INT32") }; + std::vector sort_fields_index = { field("age", field_types::INT32), field("average", field_types::INT32) }; std::vector sort_fields = { sort_by("age", "DESC"), sort_by("average", "DESC") }; empty_coll = collectionManager.get_collection("empty_coll"); if(empty_coll == nullptr) { - empty_coll = collectionManager.create_collection("empty_coll", fields, facet_fields, sort_fields_index, "age"); + empty_coll = collectionManager.create_collection("empty_coll", fields, facet_fields, sort_fields_index, "age").get(); } nlohmann::json results = empty_coll->search("a", {"name"}, "", {}, sort_fields, 0, 10, 1, FREQUENCY, false).get(); @@ -1279,12 +1278,12 @@ TEST_F(CollectionTest, IdFieldShouldBeAString) { std::vector fields = {field("name", field_types::STRING)}; facet_fields = {field("tags", field_types::STRING_ARRAY)}; - std::vector sort_fields_index = { field("age", "INT32"), field("average", "INT32") }; + std::vector sort_fields_index = { field("age", field_types::INT32), field("average", field_types::INT32) }; std::vector sort_fields = { sort_by("age", "DESC"), sort_by("average", "DESC") }; coll1 = collectionManager.get_collection("coll1"); if(coll1 == nullptr) { - coll1 = collectionManager.create_collection("coll1", fields, facet_fields, sort_fields_index, "age"); + coll1 = collectionManager.create_collection("coll1", fields, facet_fields, sort_fields_index, "age").get(); } nlohmann::json doc; @@ -1310,13 +1309,13 @@ TEST_F(CollectionTest, DeletionOfADocument) { std::vector query_fields = {"title"}; std::vector facet_fields = { }; std::vector sort_fields = { sort_by("points", "DESC") }; - std::vector sort_fields_index = { field("points", "INT32") }; + std::vector sort_fields_index = { field("points", field_types::INT32) }; Collection *collection_for_del; collection_for_del = collectionManager.get_collection("collection_for_del"); if(collection_for_del == nullptr) { collection_for_del = collectionManager.create_collection("collection_for_del", search_fields, facet_fields, - sort_fields_index, "points"); + sort_fields_index, "points").get(); } std::string json_line;