TizenRefApp-9139 Fix predictive shearch for number without local code. 73/144373/2 submit/tizen/20170822.070940
authorEvgen Servetnik <e.servetnik@samsung.com>
Wed, 16 Aug 2017 10:36:55 +0000 (13:36 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Thu, 17 Aug 2017 10:03:21 +0000 (10:03 +0000)
Change-Id: I8de34607ec76e60f0fd618259a83aad78574231d
Signed-off-by: Evgen Servetnik <e.servetnik@samsung.com>
src/Common/ContactManager/src/ContactManager.cpp

index e78716b569950321cebfeea5261915b904e50a6d..62d40842522c2eb5c8da07c64b5318b52ff3a6fc 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;
        }