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 |