qtmobility/plugins/contacts/symbian/src/filtering/cntsymbianfiltersqlhelper.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 5 453da2cfceef
--- a/qtmobility/plugins/contacts/symbian/src/filtering/cntsymbianfiltersqlhelper.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,731 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-//system includes
-#include <e32base.h>
-#include <s32mem.h>
-#include <centralrepository.h>
-
-#include <QDebug>
-
-//user includes
-#include "cntsymbianfiltersqlhelper.h"
-#include "qcontactdetailfilter.h"
-#include "cnttransformcontact.h"
-#include "cntdisplaylabel.h"
-#include "cntdisplaylabelsqlfilter.h"
-#include "cntsqlsearch.h"
-
-// Telephony Configuration API
-// Keys under this category are used in defining telephony configuration.
-const TUid KCRUidTelConfiguration = {0x102828B8};
-// Amount of digits to be used in contact matching.
-// This allows a customer to variate the amount of digits to be matched.
-const TUint32 KTelMatchDigits                               = 0x00000001;
-// Default match length
-const TInt KDefaultMatchLength(7);
-//Class documentation go here:
-/*!
-    \class CntSymbianFilterSqlHelper
-    \brief Helper class for converting filter to sql queries
-*/
-
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::SingleQuote,"'")  ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::PercentSign,"%") ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::Space," ") ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::EqualTo,"=") ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::SqlLike," LIKE ") ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::SqlNotNull," NOT NULL ") ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::SqlWhere," WHERE ") ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::SqlOr," OR ") ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::contactsTable," contact ") ;
- Q_DEFINE_LATIN1_LITERAL(CntSymbianFilterSqlHelper::commAddrTable," comm_addr ") ;
- 
-
-/*!
- * The constructor
- */
-CntSymbianFilterSqlHelper::CntSymbianFilterSqlHelper(CContactDatabase& contactDatabase)
-                                               : m_contactDatabase(contactDatabase),
-                                                 isPhoneNumberSearchforDetailFilter(false)
-{
-   m_srvConnection = new CntSymbianSrvConnection();
-   m_sqlSearch = new CntSqlSearch();
-
-   contactsTableIdColumNameMapping.insert(KUidContactFieldGivenName.iUid,"first_name" );
-   contactsTableIdColumNameMapping.insert(KUidContactFieldGivenNamePronunciation.iUid,"firstname_prn" );
-   contactsTableIdColumNameMapping.insert(KUidContactFieldFamilyName.iUid,"last_name" );
-   contactsTableIdColumNameMapping.insert(KUidContactFieldFamilyNamePronunciation.iUid,"lastname_prn" );
-   contactsTableIdColumNameMapping.insert(KUidContactFieldCompanyName.iUid,"company_name" );
-   contactsTableIdColumNameMapping.insert(KUidContactFieldCompanyNamePronunciation.iUid,"companyname_prn" );
-
-   //commAddrTableIdColumNameMapping.insert(KUidContactFieldIMPP.iUid,ESipAddress );
-   commAddrTableIdColumNameMapping.insert(KUidContactFieldSIPID.iUid,ESipAddress );
-   commAddrTableIdColumNameMapping.insert(KUidContactFieldEMail.iUid,EEmailAddress );
-
-}
-
-/*!
- * Destructor
- */
-CntSymbianFilterSqlHelper::~CntSymbianFilterSqlHelper()
-
-{
-    delete m_srvConnection;
-    delete m_sqlSearch;
-    contactsTableIdColumNameMapping.clear();
-    commAddrTableIdColumNameMapping.clear();
-}
-
-/*!
- * Fetch search results from the database.
- *
- * \a filter The simple/complex QContactFilter passed .
- * \a error On return, contains the possible error.
- * \return the list of matched contact ids
- */
-QList<QContactLocalId> CntSymbianFilterSqlHelper::searchContacts(const QContactFilter& filter, const QList<QContactSortOrder>& sortOrders,
-                                                                  QContactManager::Error& error)
-{
-    isPhoneNumberSearchforDetailFilter = false;
-    QList<QContactLocalId> idList;
-    bool isPredSearch;
-    idList =  HandlePredictiveSearchFilter(filter,isPredSearch, error);
-    if(isPredSearch)
-            return idList;
-   if(filterSupportLevel(filter)){
-        
-        // Create sql query from the filters
-        QString sqlQuery;
-        createSqlQuery(filter, sqlQuery, error);
-
-        if( error != QContactManager::NoError) {
-            return QList<QContactLocalId>();
-        }
-        // Query the database
-        // If isPhoneNumberSearchforDetailFilter flag is set, we use the existing cntmodel
-        // else call searchContacts
-        if(isPhoneNumberSearchforDetailFilter)
-        {
-            // cast the filter into detail filte
-            const QContactDetailFilter detailFilter(filter);
-            idList = HandlePhonenumberDetailFilter(detailFilter);
-        }
-        else
-        {
-            //append the sort order to the query
-            appendSortOrderQuery(sqlQuery, sortOrders);
-            
-            //fetch the contacts
-            idList =  m_srvConnection->searchContacts(sqlQuery, error);
-        }
-
-    }
-    else
-        {
-        error = QContactManager::NotSupportedError;
-        }
-    return idList;
-    
-        
-}
-
-QList<QContactLocalId>  CntSymbianFilterSqlHelper::HandlePredictiveSearchFilter(const QContactFilter& filter, bool &isPredSearch,
-        QContactManager::Error& error)
-    {
-    isPredSearch = false;
-    QString sqlQuery;
-    if(filter.type() == QContactFilter::ContactDetailFilter){
-       const QContactDetailFilter detailFilter(filter);
-       if(  detailFilter.matchFlags() == QContactFilter::MatchKeypadCollation ){
-          //convert string to numeric format
-            QString pattern = detailFilter.value().toString();
-            sqlQuery = m_sqlSearch->CreatePredictiveSearch(pattern);
-            isPredSearch = true;
-        
-            return  m_srvConnection->searchContacts(sqlQuery, error);  
-           }
-       else
-           {
-           return QList<QContactLocalId>();
-           }
-        }
-    else
-        {
-        return QList<QContactLocalId>();
-        }
-    }
-
-/*!
- * Append the sort order to the sql query
- *
- * \a sqlQuery to add the sort order to
- * \a sortOrders to be added
- */
-void CntSymbianFilterSqlHelper::appendSortOrderQuery(QString& sqlQuery, const QList<QContactSortOrder>& sortOrders)
-{
-    QString column;
-    CntDisplayLabel displayLabel;
-    
-    bool first(true);
-    
-    for(int i = 0; i < sortOrders.count(); i++)
-    {
-        columnName(column, sortOrders.at(i).detailDefinitionName(), sortOrders.at(i).detailFieldName());
-      
-        if(!column.isEmpty())
-        {
-            if(first)
-            {
-                sqlQuery += " ORDER BY";
-                first = false;        
-            }
-          
-            else
-            {
-                sqlQuery += ",";
-            }
-            
-            //use the display label if the name is null, ignore case
-            sqlQuery += " CASE WHEN " + column + " ISNULL THEN \'"+ displayLabel.unNamned().toLower() + "\' ELSE lower(" + column + ") END";
-            
-            if(sortOrders.at(i).direction() == Qt::AscendingOrder)
-            {
-                sqlQuery += " ASC";
-            }
-                
-            else if(sortOrders.at(i).direction() == Qt::DescendingOrder)
-            {
-                sqlQuery += " DESC";
-            }
-        }
-    }
-}
-
-/*!
- * Retrieve a column name
- *
- * \a columnName to be saved the column name if found
- * \a detailDefinitionName of the detail to fetch column name for
- * \a detailFieldName of the detail to fetch column name for
- */
-void CntSymbianFilterSqlHelper::columnName( QString &columnName, const QString &detailDefinitionName, const QString & detailFieldName)
-{
-    columnName = "";
-
-    //Name detail
-    if(detailDefinitionName == QContactName::DefinitionName)
-    {
-        if(detailFieldName == QContactName::FieldFirst)
-        {
-            columnName = "first_name";
-        }
-        
-        else if(detailFieldName == QContactName::FieldLast)
-        {
-            columnName = "last_name";
-        }
-    }
-    
-    //Organization
-    else if(detailDefinitionName == QContactOrganization::DefinitionName)
-    {
-        if(detailFieldName == QContactOrganization::FieldName)
-        {
-            columnName = "company_name";
-        }
-    }
-}
-
-/*!
- * converts complex filter into simple filters
- *
- * \a filter The simple/complex QContactFilter passed .
- * \a sqlQuery The sql query that would be formed
- * \a error On return, contains the possible error.
- */
-void CntSymbianFilterSqlHelper::createSqlQuery(const QContactFilter& filter,
-                                                 QString& sqlQuery,
-                                                 QContactManager::Error& error)
-{
-    //Check if it is a single filter
-    bool IsOneLevelFilter  = isSingleFilter(filter);
-    if(IsOneLevelFilter) {
-        //Single Filter, get the sql query here
-        updateSqlQueryForSingleFilter(filter,sqlQuery,error);
-    } else {
-        // We have multiple filters. Combine these to form correct query
-        // Not supported yet
-        error = QContactManager::NotSupportedError;
-    }
-}
-
-/*!
- * Checks if the given filter is a single filter or combination of filters
- *
- * \a filter The QContactFilter to be used.
- * \return True if the filters is single filter
- */
-
-bool CntSymbianFilterSqlHelper::isSingleFilter(const QContactFilter& singlefilter) const
-{
-
-    bool returnValue = false;
-    switch (singlefilter.type()) {
-        case QContactFilter::ContactDetailFilter:
-        case QContactFilter::InvalidFilter :
-        case QContactFilter::ContactDetailRangeFilter:
-        case QContactFilter::ChangeLogFilter:
-        case QContactFilter::DefaultFilter:
-                        //All are single filters, return True
-                        returnValue = true;
-                        break;
-        case QContactFilter::ActionFilter:
-        case QContactFilter::IntersectionFilter:
-        case QContactFilter::UnionFilter:
-
-                        //All these are multiple filters
-                        returnValue = false;
-                        break;
-        default:
-                        returnValue = false;
-                        break;
-    };
-    return returnValue;
-}
-
-/*!
- * Updates the input sql query for single filter
- *
- * \a filter The QContactFilter to be used.
- * \a sqlQuery The sql query that would be updated
- * \a error On return, contains the possible error
- */
-void  CntSymbianFilterSqlHelper::updateSqlQueryForSingleFilter( const QContactFilter& filter,
-                                                                QString& sqlQuery,
-                                                                QContactManager::Error& error)
-{
-    switch (filter.type()) {
-           case QContactFilter::InvalidFilter :
-           {
-               // Not supported yet
-               error = QContactManager::NotSupportedError;
-               break;
-           }
-           case QContactFilter::ContactDetailFilter:
-           {
-               const QContactDetailFilter detailFilter(filter);
-               
-               //display label
-               if (detailFilter.detailDefinitionName() == QContactDisplayLabel::DefinitionName)
-               {
-                   CntDisplayLabelSqlFilter displayLabelFilter;
-                   displayLabelFilter.createSqlQuery(detailFilter,sqlQuery,error);
-               }
-               
-               //type
-               else if(detailFilter.detailDefinitionName() == QContactType::DefinitionName)
-               {
-                   if(detailFilter.value().toString() == QContactType::TypeContact)
-                       sqlQuery = "SELECT contact_id FROM contact WHERE (type_flags>>24)=0";
-                   else if(detailFilter.value().toString() == QContactType::TypeGroup)
-                       sqlQuery = "SELECT contact_id FROM contact WHERE (type_flags>>24)=3";
-               }
-               
-               //everything else
-               else
-               {
-                   updateSqlQueryForDetailFilter(filter,sqlQuery,error);
-               }
-               
-               break;
-           }
-           case QContactFilter::ContactDetailRangeFilter:
-                       // Not supported yet
-                       error = QContactManager::NotSupportedError;
-                       break;
-
-           case QContactFilter::ChangeLogFilter:
-                       // Not supported yet
-                       error = QContactManager::NotSupportedError;
-                       break;
-           case QContactFilter::DefaultFilter:
-                       sqlQuery = "SELECT DISTINCT contact_id FROM contact WHERE (type_flags>>24)=0 OR (type_flags>>24)=3"; 
-                       error = QContactManager::NoError;
-                       break;
-           case QContactFilter::ActionFilter:
-           case QContactFilter::IntersectionFilter:
-           case QContactFilter::UnionFilter:
-                       //All these are multiple filters
-                       // Not supported yet
-                       error = QContactManager::NotSupportedError;
-                       break;
-           default:
-                       //Some Unknow filter value
-                       // Not supported
-                       error = QContactManager::NotSupportedError;
-                       break;
-    };
-    if( error != QContactManager::NoError)
-        {
-        sqlQuery = "";
-        }
-}
-
-/*!
- * Updates the input sql query for detail filter
- *
- * \a filter The QContactFilter to be used.
- * \a sqlQuery The sql query that would be updated
- * \a error On return, contains the possible error
- */
-void CntSymbianFilterSqlHelper::updateSqlQueryForDetailFilter(const QContactFilter& filter,
-                                                              QString& sqlQuery,
-                                                              QContactManager::Error& error)
-{
-
-
-    // cast the filter into detail filter
-    const QContactDetailFilter detailFilter(filter);
-
-    QString sqlWhereClause =  Space  + " WHERE ";
-
-    //Get the table name and the column name
-    bool isSubType;
-    QString columnName;
-    QString tableName;
-
-    //Check for phonenumber. Special handling needed
-    if(detailFilter.detailDefinitionName() == QContactPhoneNumber::DefinitionName){
-        isPhoneNumberSearchforDetailFilter = true;
-        error = QContactManager::NoError;
-        return;
-    }
-
-    getSqlDbTableAndColumnNameforDetailFilter(detailFilter,isSubType,tableName,columnName);
-
-    //return if tableName is empty
-    if(tableName == "" ){
-        error = QContactManager::NotSupportedError;
-        return;
-    }
-
-    //check columnName
-    if(columnName == "") {
-        error = QContactManager::NotSupportedError;
-        return;
-    }
-    else if(isSubType) {
-        sqlWhereClause += columnName;
-        sqlWhereClause += " NOT NULL ";
-    }
-    else {
-
-        sqlWhereClause += Space + columnName + Space ;
-        QString fieldToUpdate;
-        //Update the value depending on the match flag
-        updateFieldForDeatilFilterMatchFlag(detailFilter,fieldToUpdate,error);
-        sqlWhereClause +=  fieldToUpdate;
-    }
-
-
-    //Create the sql query
-    sqlQuery += "SELECT DISTINCT contact_id FROM " + Space + tableName + Space + sqlWhereClause;
-
-
-}
-
-/*!
- * Converts filed id to column name of the database table.
- * QContactManager::contacts function.
- *
- * \a fieldId field id representing the detail field name
- * \a sqlDbTableColumnName On return,contains the column name in the database
- */
-void CntSymbianFilterSqlHelper::updateFieldForDeatilFilterMatchFlag(
-                                                    const QContactDetailFilter& filter,
-                                                    QString& fieldToUpdate ,
-                                                    QContactManager::Error& error) const
-{
-    // Modify the filed depending on the query
-    switch(filter.matchFlags())
-        {
-            case QContactFilter::MatchExactly:
-                {
-                // Pattern for MatchExactly:
-                // " ='xyz'"
-                fieldToUpdate = Space + EqualTo + SingleQuote
-                               + filter.value().toString() + SingleQuote;
-                error = QContactManager::NoError;
-                break;
-                }
-            case QContactFilter::MatchContains:
-                {
-                // Pattern for MatchContains:
-                // " LIKE '%xyz%'"
-                fieldToUpdate = Space + SqlLike + Space + SingleQuote + PercentSign
-                                + filter.value().toString() + PercentSign + SingleQuote ;
-                error = QContactManager::NoError;
-                break;
-                }
-            case QContactFilter::MatchStartsWith:
-                {
-                // Pattern for MatchStartsWith:
-                // " LIKE 'xyz%'"
-                fieldToUpdate = Space + SqlLike + Space + SingleQuote
-                               +  filter.value().toString() + PercentSign + SingleQuote  ;
-                error = QContactManager::NoError;
-                break;
-                }
-            case QContactFilter::MatchEndsWith:
-                {
-                // Pattern for MatchEndsWith:
-                // " LIKE '%xyz'"
-                fieldToUpdate = Space + SqlLike + Space + SingleQuote + PercentSign
-                              + filter.value().toString() + SingleQuote ;
-                error = QContactManager::NoError;
-                break;
-                }
-            case QContactFilter::MatchFixedString:
-                {
-                error = QContactManager::NotSupportedError;
-                break;
-                }
-            case QContactFilter::MatchCaseSensitive:
-                {
-                error = QContactManager::NotSupportedError;
-                break;
-                }
-            default:
-                {
-                error = QContactManager::NotSupportedError;
-                break;
-                }
-        }
-}
-
-/*!
- * Converts filed id to column name of the database table.
- * QContactManager::contacts function.
- *
- * \a fieldId field id representing the detail field name
- * \a sqlDbTableColumnName On return,contains the column name in the database
- */
-void CntSymbianFilterSqlHelper::getSqlDbTableAndColumnNameforDetailFilter(
-                                                    const QContactDetailFilter& detailFilter ,
-                                                    bool& isSubType,
-                                                    QString& tableName,
-                                                    QString& columnName )
-{
-
-    //Get the field id for the detail field name
-    CntTransformContact transformContact;
-    quint32 fieldId  = transformContact.GetIdForDetailL(detailFilter, isSubType);
-
-    //check contacts table
-    columnName = "";
-    tableName = "";
-
-    if (contactsTableIdColumNameMapping.contains(fieldId)){
-         columnName = contactsTableIdColumNameMapping.value(fieldId);
-         tableName = "contact";
-     }
-
-    if( ("" == columnName)  || ("" == tableName)){
-        //Search comm Addr table
-        if (commAddrTableIdColumNameMapping.contains(fieldId)){
-                // communication address table has slightly differnt format, so we make the column name as
-                //  "type = <type> and value "
-                int typeval = commAddrTableIdColumNameMapping.value(fieldId) ;
-                columnName = Space + "TYPE = ";
-                columnName.append('0'+ typeval)
-                + typeval + Space;
-                columnName += " and value " ;
-                tableName = "comm_addr";
-             }
-
-    }
-}
-
-QList<QContactLocalId> CntSymbianFilterSqlHelper::HandlePhonenumberDetailFilter(const QContactDetailFilter detailFilter)
-    {
-    QList<QContactLocalId> matches;
-
-    if(detailFilter.detailDefinitionName() == QContactPhoneNumber::DefinitionName){
-
-    // Phone numbers need separate handling
-            if ((filterSupportLevel(detailFilter) == CntAbstractContactFilter::Supported
-                 || filterSupportLevel(detailFilter) == CntAbstractContactFilter::SupportedPreFilterOnly))
-            {
-                QString number((detailFilter.value()).toString());
-                TPtrC commPtr(reinterpret_cast<const TUint16*>(number.utf16()));
-
-                TInt matchLength(KDefaultMatchLength);
-                // no need to propagate error, we can use the default match length
-                TRAP_IGNORE(getMatchLengthL(matchLength));
-
-                //cal the search
-                CContactIdArray* idArray(0);
-                TInt err = searchPhoneNumbers(idArray, commPtr, matchLength);
-                if( idArray && (err == KErrNone)){
-                    // copy the matching contact ids
-                    for(int i(0); i < idArray->Count(); i++) {
-                        matches.append(QContactLocalId((*idArray)[i]));
-                    }
-                    delete idArray;
-                }
-                else{
-                    //CntSymbianTransformError::transformError(err, error);
-                    }
-            }
-
-
-    }
-    return matches;
-
-    }
-/*!
- * The contact database version implementation for
- * QContactManager::filterSupported function. The possible return values are
- * Supported, NotSupported and SupportedPreFilterOnly. Supported means that
- * the filtering is implemented directly by the underlying database.
- * NotSupported means that CntSymbianFilterDbms::contacts will return an
- * error. And SupportedPreFilterOnly means that the filter is not supported,
- * but the CntSymbianFilterDbms::contacts will act like the filter was
- * supported. This means that the client must filter the pre-filtered set of
- * contacts to see if there are false positives included. Note that in some
- * cases the pre-filtering is not very effective.
- *
- * \a filter The QContactFilter to be checked.
- * \a return Supported in case the filter is supported. NotSupported in case
- * the filter is not supported. returns
- *
- */
-CntAbstractContactFilter::FilterSupport CntSymbianFilterSqlHelper::filterSupportLevel(const QContactFilter& filter)
-{
-    CntAbstractContactFilter::FilterSupport filterSupported(CntAbstractContactFilter::NotSupported);
-    switch (filter.type()) {
-            case QContactFilter::DefaultFilter: //default filter == no filter
-                {
-                filterSupported = CntAbstractContactFilter::Supported;
-                break;
-                }
-            case QContactFilter::ContactDetailFilter:
-            	{
-                const QContactDetailFilter &detailFilter = static_cast<const QContactDetailFilter &>(filter);
-                filterSupported = checkIfDetailFilterSupported(detailFilter);
-                break;
-                }
-            case QContactFilter::InvalidFilter :
-            case QContactFilter::ContactDetailRangeFilter:
-            case QContactFilter::ChangeLogFilter:
-            case QContactFilter::ActionFilter:
-            case QContactFilter::IntersectionFilter:
-            case QContactFilter::UnionFilter:
-            case QContactFilter::RelationshipFilter: 
-            default:
-                    filterSupported = CntAbstractContactFilter::NotSupported;
-                    break;
-        }
-    return filterSupported;
-}
-CntAbstractContactFilter::FilterSupport CntSymbianFilterSqlHelper::checkIfDetailFilterSupported
-                                                                    (const QContactDetailFilter& detailFilter) const
-{
-
-        CntAbstractContactFilter::FilterSupport filterSupported(CntAbstractContactFilter::NotSupported);
-        //Get the match flags
-        QContactFilter::MatchFlags matchFlags = detailFilter.matchFlags();
-        // Phone numbers
-        if (detailFilter.detailDefinitionName() == QContactPhoneNumber::DefinitionName) {
-            if (matchFlags == QContactFilter::MatchEndsWith){
-                filterSupported = CntAbstractContactFilter::Supported;
-            }
-            else if (matchFlags == QContactFilter::MatchExactly){
-                filterSupported = CntAbstractContactFilter::SupportedPreFilterOnly;
-            }
-        }
-        // Names , Email,Sip address
-        else if ( detailFilter.detailDefinitionName() == QContactName::DefinitionName ||
-                  detailFilter.detailDefinitionName() == QContactEmailAddress::DefinitionName ||
-                  detailFilter.detailDefinitionName() == QContactOnlineAccount::DefinitionName ||
-                  detailFilter.detailDefinitionName() == QContactDisplayLabel::DefinitionName ||
-                  detailFilter.detailDefinitionName() == QContactType::DefinitionName){
-               if (  (matchFlags == QContactFilter::MatchContains)|| (matchFlags == QContactFilter::MatchStartsWith)||
-                     (matchFlags == QContactFilter::MatchEndsWith)|| (matchFlags == QContactFilter::MatchExactly)){
-                filterSupported = CntAbstractContactFilter::Supported;
-               }
-               if(matchFlags == QContactFilter::MatchKeypadCollation)
-                      filterSupported = CntAbstractContactFilter::Supported;
-        }
-        return filterSupported;
-
-}
-/*
- * Get the match length setting. Digits to be used in matching (counted from
- * right).
- */
-void CntSymbianFilterSqlHelper::getMatchLengthL(TInt& matchLength)
-{
-    //Get number of digits used to match
-    CRepository* repository = CRepository::NewL(KCRUidTelConfiguration);
-    CleanupStack::PushL(repository);
-    User::LeaveIfError(repository->Get(KTelMatchDigits, matchLength));
-    CleanupStack::PopAndDestroy(repository);
-}
-
-/*
- * Find contacts based on a phone number.
- * \a idArray On return contains the ids of the contacts that match the phonenumber.
- * \a phoneNumber The phone number to match
- * \a matchLength Match length; digits from right.
- */
-TInt CntSymbianFilterSqlHelper::searchPhoneNumbers(
-        CContactIdArray*& idArray,
-        const TDesC& phoneNumber,
-        const TInt matchLength)
-{
-    CContactIdArray* idArrayTmp(0);
-    TRAPD( err, idArrayTmp = m_contactDatabase.MatchPhoneNumberL(phoneNumber, matchLength));
-    if(err == KErrNone){
-       idArray = idArrayTmp;
-    }
-    return 0;
-}