qtmobility/plugins/contacts/symbian/src/filtering/cntfilterintersection.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 11 06b8e2af4411
equal deleted inserted replaced
1:2b40d63a9c3d 4:90517678cc4f
    43 #include "cntfilterdetail.h"
    43 #include "cntfilterdetail.h"
    44 #include "cntfilterunion.h"
    44 #include "cntfilterunion.h"
    45 #include "cntfilterdefault.h"
    45 #include "cntfilterdefault.h"
    46 #include "cntfilterrelationship.h"
    46 #include "cntfilterrelationship.h"
    47 #include "cnttransformcontact.h"
    47 #include "cnttransformcontact.h"
    48 #include "qcontactintersectionfilter.h"
       
    49 
    48 
    50 CntFilterIntersection::CntFilterIntersection(CContactDatabase& contactDatabase,CntSymbianSrvConnection &cntServer,CntDbInfo& dbInfo)
    49 CntFilterIntersection::CntFilterIntersection(CContactDatabase& contactDatabase,CntSymbianSrvConnection &cntServer,CntDbInfo& dbInfo)
    51                          : m_contactdatabase(contactDatabase),
    50                          : m_contactdatabase(contactDatabase),
    52                            m_srvConnection(cntServer),
    51                            m_srvConnection(cntServer),
    53                            m_dbInfo(dbInfo)
    52                            m_dbInfo(dbInfo)
    63 
    62 
    64 QList<QContactLocalId> CntFilterIntersection::contacts(
    63 QList<QContactLocalId> CntFilterIntersection::contacts(
    65         const QContactFilter &filter,
    64         const QContactFilter &filter,
    66         const QList<QContactSortOrder> &sortOrders,
    65         const QList<QContactSortOrder> &sortOrders,
    67         bool &filterSupportedflag,
    66         bool &filterSupportedflag,
    68         QContactManager::Error &error) 
    67         QContactManager::Error* error)
    69 {
    68 {
    70     Q_UNUSED(sortOrders);
    69     Q_UNUSED(sortOrders);
    71     Q_UNUSED(filterSupportedflag);
    70     Q_UNUSED(filterSupportedflag);
    72     //Check if any invalid filter is passed 
    71     //Check if any invalid filter is passed 
    73     if(filterSupported(filter) == false)
    72     if(filterSupported(filter) == false)
    74         {
    73         {
    75         error =  QContactManager::NotSupportedError;
    74         *error =  QContactManager::NotSupportedError;
    76         return QList<QContactLocalId>();
    75         return QList<QContactLocalId>();
    77         }
    76         }
    78     QList<QContactLocalId> idList;
    77     QList<QContactLocalId> idList;
    79    QString sqlQuery;
    78     QString sqlQuery;
    80     this->createSelectQuery( filter,sqlQuery,error) ;
    79     createSelectQuery(filter,sqlQuery,error);
       
    80     QString sortQuery = m_dbInfo.getSortQuery(sortOrders, sqlQuery, error);
    81     //fetch the contacts
    81     //fetch the contacts
    82     if(error == QContactManager::NoError )
    82     if(*error == QContactManager::NoError )
    83         {
    83         {
    84         idList =  m_srvConnection.searchContacts(sqlQuery, error);
    84         idList =  m_srvConnection.searchContacts(sortQuery, error);
    85         }
    85         }
    86     return idList;
    86     return idList;
    87 }
    87 }
    88 
    88 
    89 
    89 
    98        return result;
    98        return result;
    99 }
    99 }
   100 
   100 
   101 void CntFilterIntersection::createSelectQuery(const QContactFilter& filter,
   101 void CntFilterIntersection::createSelectQuery(const QContactFilter& filter,
   102                               QString& selectquery,
   102                               QString& selectquery,
   103                               QContactManager::Error& error)
   103                               QContactManager::Error* error)
   104 
   104 
   105 {
   105 {
   106     const QContactIntersectionFilter& intersectionfilter = static_cast<const QContactIntersectionFilter&>(filter);
   106     const QContactIntersectionFilter& intersectionfilter = static_cast<const QContactIntersectionFilter&>(filter);
   107     if(!filterSupported(filter))
   107     if(!filterSupported(filter))
   108         {
   108         {
   109         error = QContactManager::NotSupportedError;
   109         *error = QContactManager::NotSupportedError;
   110         return;
   110         return;
   111         }
   111         }
   112         QList<QContactFilter> individualFilters = intersectionfilter.filters();
   112         QList<QContactFilter> individualFilters = intersectionfilter.filters();
   113         //QString selectquery;
   113         //QString selectquery;
   114         int fltrcnt =  individualFilters.count();          
   114         int fltrcnt =  individualFilters.count();          
   118         for(int i=1; i< fltrcnt ; i++)
   118         for(int i=1; i< fltrcnt ; i++)
   119             {
   119             {
   120         
   120         
   121             QString query;
   121             QString query;
   122             getSelectQueryforFilter(individualFilters[i],query,error);
   122             getSelectQueryforFilter(individualFilters[i],query,error);
   123             if(error == QContactManager::NoError )
   123             if(*error == QContactManager::NoError )
   124                 {
   124                 {
   125                 selectquery.append(" INTERSECT ");
   125                 selectquery.append(" INTERSECT ");
   126                 selectquery += query;
   126                 selectquery += query;
   127                 }
   127                 }
   128             
   128             
   129             }
   129             }
   130         
   130         
   131             
   131             
   132 }
   132 }
   133 void CntFilterIntersection::getSelectQueryforFilter(const QContactFilter& filter,QString& sqlSelectQuery,QContactManager::Error& error)
   133 
       
   134 void CntFilterIntersection::getSelectQueryforFilter(const QContactFilter& filter,QString& sqlSelectQuery,QContactManager::Error* error)
   134     {
   135     {
   135     switch(filter.type())
   136     switch(filter.type())
   136             {
   137             {
   137             case QContactFilter::DefaultFilter:
   138             case QContactFilter::DefaultFilter:
   138                 {
   139                 {
   143             case QContactFilter::ContactDetailFilter:
   144             case QContactFilter::ContactDetailFilter:
   144                 {
   145                 {
   145                 QContactDetailFilter detailfilter(filter);
   146                 QContactDetailFilter detailfilter(filter);
   146                 if(detailfilter.detailDefinitionName() == QContactPhoneNumber::DefinitionName ) 
   147                 if(detailfilter.detailDefinitionName() == QContactPhoneNumber::DefinitionName ) 
   147                     {
   148                     {
   148                     error=QContactManager::NotSupportedError;
   149                     *error=QContactManager::NotSupportedError;
   149                     }
   150                     }
   150                 else
   151                 else
   151                     {
   152                     {
   152                     CntFilterDetail dtlfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
   153                     CntFilterDetail dtlfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
   153                     dtlfltr.createSelectQuery(filter,sqlSelectQuery,error);
   154                     dtlfltr.createSelectQuery(filter,sqlSelectQuery,error);
   154                     }
   155                     }
   155                 break;
   156                 break;
   156                 }
   157                 }
       
   158             case QContactFilter::RelationshipFilter:
       
   159                 {
       
   160                 CntFilterRelationship relationfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
       
   161                 relationfltr.createSelectQuery(filter,sqlSelectQuery,error);
       
   162                 break;
       
   163                 }
   157             case QContactFilter::IntersectionFilter:
   164             case QContactFilter::IntersectionFilter:
   158                 {
   165                 {
   159                 sqlSelectQuery += "SELECT DISTINCT contact_id FROM (";
   166                 sqlSelectQuery += "SELECT DISTINCT contact_id FROM (";
   160                 CntFilterIntersection intersectionfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
   167                 CntFilterIntersection intersectionfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
   161                 intersectionfltr.createSelectQuery(filter,sqlSelectQuery,error);
   168                 intersectionfltr.createSelectQuery(filter,sqlSelectQuery,error);
   162                 sqlSelectQuery += ")";
   169                 sqlSelectQuery += ')';
   163                 break;
   170                 break;
   164                 }
   171                 }
   165             case QContactFilter::UnionFilter:
   172             case QContactFilter::UnionFilter:
   166                 {
   173                 {
   167                 sqlSelectQuery += "SELECT DISTINCT contact_id FROM (";
   174                 sqlSelectQuery += "SELECT DISTINCT contact_id FROM (";
   168                 CntFilterUnion unionfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
   175                 CntFilterUnion unionfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
   169                 unionfltr.createSelectQuery(filter,sqlSelectQuery,error);
   176                 unionfltr.createSelectQuery(filter,sqlSelectQuery,error);
   170                 sqlSelectQuery += ")";
   177                 sqlSelectQuery += ')';
   171                 break;
   178                 break;
   172                 }
   179                 }
   173             default:
   180             default:
   174                 {
   181                 {
   175                 error = QContactManager::NotSupportedError;
   182                 *error = QContactManager::NotSupportedError;
   176                 break;
   183                 break;
   177                 }
   184                 }
   178             }
   185             }
   179     }
   186     }
   180     
   187