template<>
std::shared_ptr<ContactList<ContactPersonNumber>> ContactManager::search<ContactPersonNumber>(const std::string &keyword)
{
+ contacts_query_h query = nullptr;
+ contacts_filter_h filter = nullptr;
contacts_list_h list = nullptr;
- contacts_db_search_records_with_range(ContactPersonNumber::getUri(), keyword.c_str(),
- 0, 0, CONTACTS_SEARCH_RANGE_NAME | CONTACTS_SEARCH_RANGE_NUMBER, &list);
+
+ contacts_query_create(ContactPersonNumber::getUri(), &query);
+ contacts_filter_create(ContactPersonNumber::getUri(), &filter);
+ contacts_filter_add_str(filter, _contacts_person_number.number, CONTACTS_MATCH_CONTAINS, keyword.c_str());
+ contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
+ contacts_filter_add_str(filter, _contacts_person_number.display_name, CONTACTS_MATCH_CONTAINS, keyword.c_str());
+ contacts_query_set_filter(query, filter);
+
+ /* set projection */
+ unsigned int numberProjection[] = {
+ _contacts_person_number.person_id,
+ _contacts_person_number.number,
+ _contacts_person_number.display_name,
+ _contacts_person_number.image_thumbnail_path
+ };
+
+ contacts_query_set_projection(query, numberProjection, sizeof(numberProjection)/sizeof(unsigned int));
+ contacts_query_set_distinct(query, true);
+
+ contacts_db_get_records_with_query(query, 0, 0, &list);
+ contacts_filter_destroy(filter);
+ contacts_query_destroy(query);
+
return list ? std::make_shared<ContactList<ContactPersonNumber>>(list) : nullptr;
}