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