TizenRefApp-9139 Fix predictive shearch for number without local code. 54/144354/1 submit/tizen/20170817.101250
authorEvgen Servetnik <e.servetnik@samsung.com>
Wed, 16 Aug 2017 09:48:37 +0000 (12:48 +0300)
committerEvgen Servetnik <e.servetnik@samsung.com>
Wed, 16 Aug 2017 09:48:37 +0000 (12:48 +0300)
Change-Id: I981cfa6fbd79c422e037d3dd29fb27113df81636
Signed-off-by: Evgen Servetnik <e.servetnik@samsung.com>
src/Common/ContactManager/src/ContactManager.cpp

index 41708491560926948688f87ffabd749d9626f065..7ae6347cf634d21dd5b120af8860dc854b7e1e12 100644 (file)
        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;
        }