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 |