Removed contacts_db_delete_record and added DeleteContactRecord in AddressbookUtil...
[framework/osp/social.git] / src / FScl_AddressbookManagerImpl.cpp
index 659a460..3698b66 100644 (file)
@@ -249,13 +249,10 @@ _AddressbookManagerImpl::CreateAddressbookN(AccountId accountId, const String& n
 result
 _AddressbookManagerImpl::DeleteAddressbook(AddressbookId addressbookId)
 {
-       SysTryReturn(NID_SCL, addressbookId > 0, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The addressbook ID is invalid or the default addressbook ID.", GetErrorMessage(E_INVALID_ARG));
+       SysTryReturn(NID_SCL, addressbookId > 0, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument used.The addressbook ID is invalid or the default addressbook ID.", GetErrorMessage(E_INVALID_ARG));
        SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
-
-       int ret = contacts_db_delete_record(_contacts_address_book._uri, addressbookId);
-       SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-       SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The addressbook is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
-//     SysTryReturnResult(NID_SCL, ret == CONTACTS_ERROR_NONE, E_OPERATION_FAILED, "Failed to delete an addressbook.(%d)", ret); // temp
+       result r = _AddressbookUtil::DeleteContactRecord(_contacts_address_book._uri, addressbookId);
+       SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        return E_SUCCESS;
 }
@@ -268,25 +265,38 @@ _AddressbookManagerImpl::GetAddressbooksByAccountN(AccountId accountId) const
 
        ClearLastResult();
 
+       IList* pAddressbooks = null;
+
        __Filter<__ContactsAddressbook> accountFilter;
        accountFilter.Construct();
        accountFilter.AddInt(_contacts_address_book.account_id, CONTACTS_MATCH_EQUAL, accountId);
 
        unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
+       if (pRwAbFilter->Get() == null)
+       {
+               __Query<__ContactsAddressbook> query;
+               query.Construct();
+               query.SetFilter(accountFilter);
 
-       __Filter<__ContactsAddressbook> mainFilter;
-       mainFilter.Construct();
+               pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
+               SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Filter<__ContactsAddressbook> mainFilter;
+               mainFilter.Construct();
 
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(accountFilter);
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(accountFilter);
 
-       __Query<__ContactsAddressbook> query;
-       query.Construct();
-       query.SetFilter(mainFilter);
+               __Query<__ContactsAddressbook> query;
+               query.Construct();
+               query.SetFilter(mainFilter);
 
-       IList* pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
-       SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
+               SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
 
        return pAddressbooks;
 }
@@ -298,11 +308,13 @@ _AddressbookManagerImpl::GetAllAddressbooksN(void) const
 
        ClearLastResult();
 
-       unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
+       __Filter<__ContactsAddressbook> abFilter;
+       abFilter.Construct();
+       abFilter.AddInt(_contacts_address_book.mode, CONTACTS_MATCH_EQUAL, 0);
 
        __Query<__ContactsAddressbook> query;
        query.Construct();
-       query.SetFilter(*pRwAbFilter);
+       query.SetFilter(abFilter);
        query.SetSort(_contacts_address_book.name, true);
 
        IList* pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
@@ -604,9 +616,13 @@ _AddressbookManagerImpl::GetAllCategoriesN(void) const
 
        __Query<__ContactsGroup> query;
        query.Construct();
-       query.SetFilter(*pRwAbFilter);
        query.SetSort(_contacts_group.name, true);
 
+       if (pRwAbFilter->Get() != null)
+       {
+               query.SetFilter(*pRwAbFilter);
+       }
+
        IList* pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query);
        SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
@@ -620,25 +636,38 @@ _AddressbookManagerImpl::GetCategoriesByContactN(RecordId contactId) const
        SysTryReturn(NID_SCL, contactId != INVALID_RECORD_ID, null, E_INVALID_ARG, "[%s] Invalid argument is used. The specified contact is invalid.", GetErrorMessage(E_INVALID_ARG));
 
        ClearLastResult();
-
+       IList* pCategories = null;
+       
        unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
 
        __Filter<__ContactsContactGroupRel> relFilter;
        relFilter.Construct();
        relFilter.AddInt(_contacts_contact_grouprel.contact_id, CONTACTS_MATCH_EQUAL, contactId);
 
-       __Filter<__ContactsContactGroupRel> mainFilter;
-       mainFilter.Construct();
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(relFilter);
-
-       __Query<__ContactsContactGroupRel> query;
-       query.Construct();
-       query.SetFilter(mainFilter);
+       if (pRwAbFilter->Get() != null)
+       {
+               __Filter<__ContactsContactGroupRel> mainFilter;
+               mainFilter.Construct();
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(relFilter);
+
+               __Query<__ContactsContactGroupRel> query;
+               query.Construct();
+               query.SetFilter(mainFilter);
+
+               pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
+               SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Query<__ContactsContactGroupRel> query;
+               query.Construct();
+               query.SetFilter(relFilter);
 
-       IList* pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
-       SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
+               SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
 
        return pCategories;
 }
@@ -650,6 +679,8 @@ _AddressbookManagerImpl::GetCategoriesByPersonN(PersonId personId) const
 
        ClearLastResult();
 
+       IList* pCategories = null;
+
        unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
 
        __Filter<__ContactsContactGroupRel> relFilter;
@@ -658,26 +689,44 @@ _AddressbookManagerImpl::GetCategoriesByPersonN(PersonId personId) const
        relFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
        relFilter.AddInt(_contacts_contact_grouprel.group_id, CONTACTS_MATCH_GREATER_THAN, 0);
 
-       __Filter<__ContactsContactGroupRel> mainFilter;
-       mainFilter.Construct();
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(relFilter);
-
        unsigned int propertyIds[] =
        {
                _contacts_contact_grouprel.group_id,
        };
 
-       __Query<__ContactsContactGroupRel> query;
-       query.Construct();
-       query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
-       query.SetFilter(mainFilter);
-       query.SetSort(_contacts_contact_grouprel.group_name, true);
-       query.SetDistinct(true);
+       if (pRwAbFilter->Get() != null)
+       {
+
+               __Filter<__ContactsContactGroupRel> mainFilter;
+               mainFilter.Construct();
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(relFilter);
 
-       IList* pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
-       SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+               __Query<__ContactsContactGroupRel> query;
+               query.Construct();
+               query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
+               query.SetFilter(mainFilter);
+               query.SetSort(_contacts_contact_grouprel.group_name, true);
+               query.SetDistinct(true);
+
+               pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
+               SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Query<__ContactsContactGroupRel> query;
+               query.Construct();
+               query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
+               query.SetFilter(relFilter);
+               query.SetSort(_contacts_contact_grouprel.group_name, true);
+               query.SetDistinct(true);
+
+               pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
+               SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+       }
 
        return pCategories;
 }
@@ -693,9 +742,13 @@ _AddressbookManagerImpl::GetAllContactsN(void) const
 
        __Query<__ContactsContact> query;
        query.Construct();
-       query.SetFilter(*pRwAbFilter);
        query.SetSort(_contacts_contact.display_name, true);
 
+       if (pRwAbFilter->Get() != null)
+       {
+               query.SetFilter(*pRwAbFilter);
+       }
+
        IList* pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
        SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
@@ -710,6 +763,8 @@ _AddressbookManagerImpl::GetContactsByCategoryN(RecordId categoryId) const
 
        ClearLastResult();
 
+       IList* pContacts = null;
+
        unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
 
        __Filter<__ContactsContactGroupRel> relFilter;
@@ -724,19 +779,31 @@ _AddressbookManagerImpl::GetContactsByCategoryN(RecordId categoryId) const
                relFilter.AddInt(_contacts_contact_grouprel.group_id, CONTACTS_MATCH_NONE, 0);
        }
 
-       __Filter<__ContactsContactGroupRel> mainFilter;
-       mainFilter.Construct();
+       if (pRwAbFilter->Get() != null)
+       {
+               __Filter<__ContactsContactGroupRel> mainFilter;
+               mainFilter.Construct();
 
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(relFilter);
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(relFilter);
 
-       __Query<__ContactsContactGroupRel> query;
-       query.Construct();
-       query.SetFilter(mainFilter);
+               __Query<__ContactsContactGroupRel> query;
+               query.Construct();
+               query.SetFilter(mainFilter);
 
-       IList* pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Contact>(query);
-       SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Query<__ContactsContactGroupRel> query;
+               query.Construct();
+               query.SetFilter(relFilter);
+
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
 
        return pContacts;
 }
@@ -747,6 +814,8 @@ _AddressbookManagerImpl::GetContactsByPersonN(PersonId personId) const
        SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
        ClearLastResult();
+       
+       IList* pContacts = null;
 
        unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
 
@@ -754,20 +823,33 @@ _AddressbookManagerImpl::GetContactsByPersonN(PersonId personId) const
        contactFilter.Construct();
        contactFilter.AddInt(_contacts_contact.person_id, CONTACTS_MATCH_EQUAL, personId);
 
-       __Filter<__ContactsContact> mainFilter;
-       mainFilter.Construct();
+       if (pRwAbFilter->Get() != null)
+       {
+               __Filter<__ContactsContact> mainFilter;
+               mainFilter.Construct();
 
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(contactFilter);
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(contactFilter);
 
-       __Query<__ContactsContact> query;
-       query.Construct();
-       query.SetFilter(mainFilter);
-       query.SetSort(_contacts_contact.display_name, true);
+               __Query<__ContactsContact> query;
+               query.Construct();
+               query.SetFilter(mainFilter);
+               query.SetSort(_contacts_contact.display_name, true);
 
-       IList* pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
-       SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Query<__ContactsContact> query;
+               query.Construct();
+               query.SetFilter(contactFilter);
+               query.SetSort(_contacts_contact.display_name, true);
+
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
 
        return pContacts;
 }
@@ -780,6 +862,8 @@ _AddressbookManagerImpl::SearchContactsByEmailN(const String& email) const
 
        ClearLastResult();
 
+       IList* pContacts = null;
+
        unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
 
        unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(email));
@@ -789,20 +873,34 @@ _AddressbookManagerImpl::SearchContactsByEmailN(const String& email) const
        emailFilter.Construct();
        emailFilter.AddString(_contacts_contact_email.email, CONTACTS_MATCH_CONTAINS, pCharArray.get());
 
-       __Filter<__ContactsContactEmail> mainFilter;
-       mainFilter.Construct();
+       if (pRwAbFilter->Get() != null)
+       {
+               __Filter<__ContactsContactEmail> mainFilter;
+               mainFilter.Construct();
+
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(emailFilter);
 
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(emailFilter);
+               __Query<__ContactsContactEmail> query;
+               query.Construct();
+               query.SetFilter(mainFilter);
+               query.SetSort(_contacts_contact_email.display_name, true);
 
-       __Query<__ContactsContactEmail> query;
-       query.Construct();
-       query.SetFilter(mainFilter);
-       query.SetSort(_contacts_contact_email.display_name, true);
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Query<__ContactsContactEmail> query;
+               query.Construct();
+               query.SetFilter(emailFilter);
+               query.SetSort(_contacts_contact_email.display_name, true);
 
-       IList* pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, Contact>(query);
-       SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+       }
 
        return pContacts;
 }
@@ -814,6 +912,8 @@ _AddressbookManagerImpl::SearchContactsByNameN(const String& name) const
 
        ClearLastResult();
 
+       IList* pContacts = null;
+
        unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
 
        SysTryReturn(NID_SCL, !name.IsEmpty(), null, E_INVALID_ARG, "[%s] Invalid argument is used. The specified email is an name string.", GetErrorMessage(E_INVALID_ARG));
@@ -825,20 +925,33 @@ _AddressbookManagerImpl::SearchContactsByNameN(const String& name) const
        nameFilter.Construct();
        nameFilter.AddString(_contacts_contact.display_name, CONTACTS_MATCH_CONTAINS, pCharArray.get());
 
-       __Filter<__ContactsContact> mainFilter;
-       mainFilter.Construct();
+       if (pRwAbFilter->Get() != null)
+       {
+               __Filter<__ContactsContact> mainFilter;
+               mainFilter.Construct();
 
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(nameFilter);
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(nameFilter);
 
-       __Query<__ContactsContact> query;
-       query.Construct();
-       query.SetFilter(mainFilter);
-       query.SetSort(_contacts_contact.display_name, true);
+               __Query<__ContactsContact> query;
+               query.Construct();
+               query.SetFilter(mainFilter);
+               query.SetSort(_contacts_contact.display_name, true);
 
-       IList* pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
-       SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Query<__ContactsContact> query;
+               query.Construct();
+               query.SetFilter(nameFilter);
+               query.SetSort(_contacts_contact.display_name, true);
+
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
 
        return pContacts;
 }
@@ -850,6 +963,8 @@ _AddressbookManagerImpl::SearchContactsByPhoneNumberN(const String& phoneNumber)
 
        ClearLastResult();
 
+       IList* pContacts = null;
+
        SysTryReturn(NID_SCL, !phoneNumber.IsEmpty(), null, E_INVALID_ARG, "[%s] Invalid argument is used. The specified phoneNumber is an empty string.", GetErrorMessage(E_INVALID_ARG));
 
        unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
@@ -861,21 +976,36 @@ _AddressbookManagerImpl::SearchContactsByPhoneNumberN(const String& phoneNumber)
        numberFilter.Construct();
        numberFilter.AddString(_contacts_contact_number.number, CONTACTS_MATCH_CONTAINS, pCharArray.get());
 
-       __Filter<__ContactsContactNumber> mainFilter;
-       mainFilter.Construct();
+       if (pRwAbFilter->Get() != null)
+       {
+               __Filter<__ContactsContactNumber> mainFilter;
+               mainFilter.Construct();
 
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(numberFilter);
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(numberFilter);
 
-       __Query<__ContactsContactNumber> query;
-       query.Construct();
-       query.SetFilter(mainFilter);
-       query.SetDistinct(true);
-       query.SetSort(_contacts_contact_number.display_name, true);
+               __Query<__ContactsContactNumber> query;
+               query.Construct();
+               query.SetFilter(mainFilter);
+               query.SetDistinct(true);
+               query.SetSort(_contacts_contact_number.display_name, true);
 
-       IList* pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, Contact>(query);
-       SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Query<__ContactsContactNumber> query;
+               query.Construct();
+               query.SetFilter(numberFilter);
+               query.SetDistinct(true);
+               query.SetSort(_contacts_contact_number.display_name, true);
+
+               pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, Contact>(query);
+               SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       
 
        return pContacts;
 }
@@ -1209,7 +1339,6 @@ _AddressbookManagerImpl::GetAllPersonsN(void) const
 
        unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
 
-//     unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
        unsigned int propertyIds[] =
        {
                _contacts_person_grouprel.person_id,
@@ -1225,11 +1354,15 @@ _AddressbookManagerImpl::GetAllPersonsN(void) const
 
        __Query<__ContactsPersonGroupRel> query;
        query.Construct();
-       query.SetFilter(*pRwAbFilter);
        query.SetSort(_contacts_person.display_name, true);
        query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
        query.SetDistinct(true);
 
+       if (pRwAbFilter->Get() != null)
+       {
+               query.SetFilter(*pRwAbFilter);
+       }
+
        IList* pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
        SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
@@ -1244,6 +1377,8 @@ _AddressbookManagerImpl::GetPersonsByCategoryN(RecordId categoryId) const
 
        ClearLastResult();
 
+       IList* pPersons = null;
+
        unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
 
        __Filter<__ContactsPersonGroupRel> groupFilter;
@@ -1269,23 +1404,38 @@ _AddressbookManagerImpl::GetPersonsByCategoryN(RecordId categoryId) const
                _contacts_person_grouprel.addressbook_ids,
        };
 
-       __Filter<__ContactsPersonGroupRel> mainFilter;
-       mainFilter.Construct();
-
-       mainFilter.AddFilter(*pRwAbFilter);
-       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-       mainFilter.AddFilter(groupFilter);
+       if (pRwAbFilter->Get() != null)
+       {
+               __Filter<__ContactsPersonGroupRel> mainFilter;
+               mainFilter.Construct();
+
+               mainFilter.AddFilter(*pRwAbFilter);
+               mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+               mainFilter.AddFilter(groupFilter);
+
+               __Query<__ContactsPersonGroupRel> query;
+               query.Construct();
+               query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
+               query.SetFilter(mainFilter);
+               query.SetSort(_contacts_person_grouprel.display_name, true);
+               query.SetDistinct(true);
+
+               pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
+               SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __Query<__ContactsPersonGroupRel> query;
+               query.Construct();
+               query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
+               query.SetFilter(groupFilter);
+               query.SetSort(_contacts_person_grouprel.display_name, true);
+               query.SetDistinct(true);
 
+               pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
+               SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
-       __Query<__ContactsPersonGroupRel> query;
-       query.Construct();
-       query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
-       query.SetFilter(mainFilter);
-       query.SetSort(_contacts_person_grouprel.display_name, true);
-       query.SetDistinct(true);
-
-       IList* pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
-       SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
 
        return pPersons;
 }
@@ -1430,23 +1580,42 @@ _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long
                        __Filter<__ContactsAddressbook> abFilter;
                        abFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsAddressbook> mainFilter;
-                       mainFilter.Construct();
+                       if (pRwAbFilter->Get() != null)
+                       {
+                               __Filter<__ContactsAddressbook> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (abFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(abFilter);
+                               }
+
+                               __Query<__ContactsAddressbook> query;
+                               query.Construct();
+                               query.SetFilter(mainFilter);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
+
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
+                       }
+                       else
+                       {
+                               __Query<__ContactsAddressbook> query;
+                               query.Construct();
+                               query.SetFilter(abFilter);
 
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(abFilter);
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
 
-                       __Query<__ContactsAddressbook> query;
-                       query.Construct();
-                       query.SetFilter(mainFilter);
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
 
-                       if (viewSortPropertyId != 0)
-                       {
-                               query.SetSort(viewSortPropertyId, ascending);
                        }
-
-                       pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
                }
                break;
        case AB_FI_TYPE_PERSON:
@@ -1456,13 +1625,6 @@ _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long
                        __Filter<__ContactsPersonGroupRel> personFilter;
                        personFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsPersonGroupRel> mainFilter;
-                       mainFilter.Construct();
-
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(personFilter);
-
                        unsigned int propertyIds[] =
                        { _contacts_person_grouprel.person_id,
                                _contacts_person_grouprel.addressbook_ids,
@@ -1474,18 +1636,45 @@ _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long
                                _contacts_person_grouprel.display_name
                        };
 
-                       __Query<__ContactsPersonGroupRel> query;
-                       query.Construct();
-                       query.SetFilter(mainFilter);
-                       query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
-                       query.SetDistinct(true);
-
-                       if (viewSortPropertyId != 0)
+                       if (pRwAbFilter->Get() != null)
                        {
-                               query.SetSort(viewSortPropertyId, ascending);
+                               __Filter<__ContactsPersonGroupRel> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (personFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(personFilter);
+                               }
+
+                               __Query<__ContactsPersonGroupRel> query;
+                               query.Construct();
+                               query.SetFilter(mainFilter);
+                               query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
+                               query.SetDistinct(true);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
+
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
+                       }
+                       else
+                       {
+                               __Query<__ContactsPersonGroupRel> query;
+                               query.Construct();
+                               query.SetFilter(personFilter);
+                               query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
+                               query.SetDistinct(true);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
+
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
                        }
-
-                       pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
                }
                break;
        case AB_FI_TYPE_CONTACT:
@@ -1495,23 +1684,42 @@ _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long
                        __Filter<__ContactsContact> contactFilter;
                        contactFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsContact> mainFilter;
-                       mainFilter.Construct();
+                       if (pRwAbFilter->Get() != null)
+                       {
+                               __Filter<__ContactsContact> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (contactFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(contactFilter);
+                               }
+
+                               __Query<__ContactsContact> query;
+                               query.Construct();
+                               query.SetFilter(mainFilter);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
+
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
+                       }
+                       else
+                       {
+                               __Query<__ContactsContact> query;
+                               query.Construct();
+                               query.SetFilter(contactFilter);
 
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(contactFilter);
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
 
-                       __Query<__ContactsContact> query;
-                       query.Construct();
-                       query.SetFilter(mainFilter);
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
 
-                       if (viewSortPropertyId != 0)
-                       {
-                               query.SetSort(viewSortPropertyId, ascending);
                        }
-
-                       pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
                }
                break;
        case AB_FI_TYPE_CATEGORY:
@@ -1521,23 +1729,41 @@ _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long
                        __Filter<__ContactsGroup> groupFilter;
                        groupFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsGroup> mainFilter;
-                       mainFilter.Construct();
-
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(groupFilter);
-
-                       __Query<__ContactsGroup> query;
-                       query.Construct();
-                       query.SetFilter(mainFilter);
-
-                       if (viewSortPropertyId != 0)
+                       if (pRwAbFilter->Get() != null)
                        {
-                               query.SetSort(viewSortPropertyId, ascending);
+                               __Filter<__ContactsGroup> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (groupFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(groupFilter);
+                               }
+
+                               __Query<__ContactsGroup> query;
+                               query.Construct();
+                               query.SetFilter(mainFilter);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
+
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
                        }
+                       else
+                       {
+                               __Query<__ContactsGroup> query;
+                               query.Construct();
+                               query.SetFilter(groupFilter);
 
-                       pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
+
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
+                       }
                }
                break;
        case AB_FI_TYPE_PHONE_CONTACT:
@@ -1547,23 +1773,41 @@ _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long
                        __Filter<__ContactsContactNumber> numberFilter;
                        numberFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsContactNumber> mainFilter;
-                       mainFilter.Construct();
-
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(numberFilter);
-
-                       __Query<__ContactsContactNumber> query;
-                       query.Construct();
-                       query.SetFilter(mainFilter);
-
-                       if (viewSortPropertyId != 0)
+                       if (pRwAbFilter->Get() != null)
                        {
-                               query.SetSort(viewSortPropertyId, ascending);
+                               __Filter<__ContactsContactNumber> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (numberFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(numberFilter);
+                               }
+
+                               __Query<__ContactsContactNumber> query;
+                               query.Construct();
+                               query.SetFilter(mainFilter);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
+
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
                        }
+                       else
+                       {
+                               __Query<__ContactsContactNumber> query;
+                               query.Construct();
+                               query.SetFilter(numberFilter);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
 
-                       pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
+                       }
                }
                break;
        case AB_FI_TYPE_EMAIL_CONTACT:
@@ -1573,23 +1817,41 @@ _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long
                        __Filter<__ContactsContactEmail> emailFilter;
                        emailFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsContactEmail> mainFilter;
-                       mainFilter.Construct();
-
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(emailFilter);
-
-                       __Query<__ContactsContactEmail> query;
-                       query.Construct();
-                       query.SetFilter(mainFilter);
-
-                       if (viewSortPropertyId != 0)
+                       if (pRwAbFilter->Get() != null)
                        {
-                               query.SetSort(viewSortPropertyId, ascending);
+                               __Filter<__ContactsContactEmail> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (emailFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(emailFilter);
+                               }
+
+                               __Query<__ContactsContactEmail> query;
+                               query.Construct();
+                               query.SetFilter(mainFilter);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
+
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
                        }
+                       else
+                       {
+                               __Query<__ContactsContactEmail> query;
+                               query.Construct();
+                               query.SetFilter(emailFilter);
+
+                               if (viewSortPropertyId != 0)
+                               {
+                                       query.SetSort(viewSortPropertyId, ascending);
+                               }
 
-                       pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
+                               pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
+                       }
                }
                break;
        default:
@@ -1620,13 +1882,23 @@ _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
                        __Filter<__ContactsAddressbook> abFilter;
                        abFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsAddressbook> mainFilter;
-                       mainFilter.Construct();
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(abFilter);
-
-                       count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(mainFilter.Get());
+                       if (pRwAbFilter->Get() != null)
+                       {
+                               __Filter<__ContactsAddressbook> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (abFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(abFilter);
+                               }
+
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(mainFilter.Get());
+                       }
+                       else
+                       {
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(abFilter.Get());
+                       }
                }
                break;
        case AB_FI_TYPE_PERSON:
@@ -1636,21 +1908,40 @@ _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
                        __Filter<__ContactsPersonGroupRel> personFilter;
                        personFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsPersonGroupRel> mainFilter;
-                       mainFilter.Construct();
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(personFilter);
+                       if (pRwAbFilter->Get() != null)
+                       {
+                               __Filter<__ContactsPersonGroupRel> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (personFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(personFilter);
+                               }
+
+                               unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
+
+                               __Query<__ContactsPersonGroupRel> query;
+                               query.Construct();
+                               query.SetFilter(mainFilter);
+                               query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
+                               query.SetDistinct(true);
+
+                               count = _AddressbookUtil::GetCountWithQuery(query);
+                       }
+                       else
+                       {
+                               unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
 
-                       unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
+                               __Query<__ContactsPersonGroupRel> query;
+                               query.Construct();
+                               query.SetFilter(personFilter);
+                               query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
+                               query.SetDistinct(true);
 
-                       __Query<__ContactsPersonGroupRel> query;
-                       query.Construct();
-                       query.SetFilter(mainFilter);
-                       query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
-                       query.SetDistinct(true);
+                               count = _AddressbookUtil::GetCountWithQuery(query);
 
-                       count = _AddressbookUtil::GetCountWithQuery(query);
+                       }
                }
 
                break;
@@ -1661,13 +1952,23 @@ _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
                        __Filter<__ContactsContact> contactFilter;
                        contactFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsContact> mainFilter;
-                       mainFilter.Construct();
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(contactFilter);
-
-                       count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(mainFilter.Get());
+                       if (pRwAbFilter->Get() != null)
+                       {
+                               __Filter<__ContactsContact> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (contactFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(contactFilter);
+                               }
+
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(mainFilter.Get());
+                       }
+                       else
+                       {
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(contactFilter.Get());
+                       }
                }
                break;
        case AB_FI_TYPE_CATEGORY:
@@ -1677,13 +1978,23 @@ _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
                        __Filter<__ContactsGroup> groupFilter;
                        groupFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsGroup> mainFilter;
-                       mainFilter.Construct();
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(groupFilter);
-
-                       count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(mainFilter.Get());
+                       if (pRwAbFilter->Get() != null)
+                       {
+                               __Filter<__ContactsGroup> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (groupFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(groupFilter);
+                               }
+
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(mainFilter.Get());
+                       }
+                       else
+                       {
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(groupFilter.Get());
+                       }
                }
                break;
        case AB_FI_TYPE_PHONE_CONTACT:
@@ -1693,13 +2004,23 @@ _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
                        __Filter<__ContactsContactNumber> numberFilter;
                        numberFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsContactNumber> mainFilter;
-                       mainFilter.Construct();
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(numberFilter);
-
-                       count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(mainFilter.Get());
+                       if (pRwAbFilter->Get() != null)
+                       {
+                               __Filter<__ContactsContactNumber> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (numberFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(numberFilter);
+                               }
+
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(mainFilter.Get());
+                       }
+                       else
+                       {
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(numberFilter.Get());
+                       }
                }
                break;
        case AB_FI_TYPE_EMAIL_CONTACT:
@@ -1709,13 +2030,23 @@ _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
                        __Filter<__ContactsContactEmail> emailFilter;
                        emailFilter.Construct(filterHandle);
 
-                       __Filter<__ContactsContactEmail> mainFilter;
-                       mainFilter.Construct();
-                       mainFilter.AddFilter(*pRwAbFilter);
-                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
-                       mainFilter.AddFilter(emailFilter);
-
-                       count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(mainFilter.Get());
+                       if (pRwAbFilter->Get() != null)
+                       {
+                               __Filter<__ContactsContactEmail> mainFilter;
+                               mainFilter.Construct();
+                               mainFilter.AddFilter(*pRwAbFilter);
+                               if (emailFilter.Get() != null)
+                               {
+                                       mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
+                                       mainFilter.AddFilter(emailFilter);
+                               }
+
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(mainFilter.Get());
+                       }
+                       else
+                       {
+                               count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(emailFilter.Get());
+                       }
                }
                break;
        default:
@@ -2389,12 +2720,16 @@ _AddressbookManagerImpl::GetAllUserProfilesN(void) const
        unique_ptr< __Filter<__ContactsUserProfile> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsUserProfile>());
        SysTryReturn(NID_SCL, pRwAbFilter != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
-       __Query<__ContactsUserProfile> query2;
-       query2.Construct();
-       query2.SetFilter(*pRwAbFilter);
-       query2.SetSort(_contacts_my_profile.display_name, true);
+       __Query<__ContactsUserProfile> query;
+       query.Construct();
+       query.SetSort(_contacts_my_profile.display_name, true);
+
+       if (pRwAbFilter->Get() != null)
+       {
+               query.SetFilter(*pRwAbFilter);
+       }
 
-       IList* pUserProfilesList = _AddressbookUtil::SearchWithQueryN<__ContactsUserProfile, UserProfile>(query2);
+       IList* pUserProfilesList = _AddressbookUtil::SearchWithQueryN<__ContactsUserProfile, UserProfile>(query);
        SysTryReturn(NID_SCL, pUserProfilesList != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
        return pUserProfilesList;