summaryrefslogtreecommitdiff
path: root/libopie/pim/otodoaccesssql.cpp
Unidiff
Diffstat (limited to 'libopie/pim/otodoaccesssql.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/otodoaccesssql.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/libopie/pim/otodoaccesssql.cpp b/libopie/pim/otodoaccesssql.cpp
index 3913661..75a0860 100644
--- a/libopie/pim/otodoaccesssql.cpp
+++ b/libopie/pim/otodoaccesssql.cpp
@@ -110,397 +110,400 @@ namespace {
110 QString query()const; 110 QString query()const;
111 private: 111 private:
112 QString with()const; 112 QString with()const;
113 QString out()const; 113 QString out()const;
114 QDate m_start; 114 QDate m_start;
115 QDate m_end; 115 QDate m_end;
116 bool m_inc :1; 116 bool m_inc :1;
117 }; 117 };
118 118
119 119
120 CreateQuery::CreateQuery() : OSQLQuery() {} 120 CreateQuery::CreateQuery() : OSQLQuery() {}
121 CreateQuery::~CreateQuery() {} 121 CreateQuery::~CreateQuery() {}
122 QString CreateQuery::query()const { 122 QString CreateQuery::query()const {
123 QString qu; 123 QString qu;
124 qu += "create table todolist( uid PRIMARY KEY, categories, completed, "; 124 qu += "create table todolist( uid PRIMARY KEY, categories, completed, ";
125 qu += "description, summary, priority, DueDate, progress , state, "; 125 qu += "description, summary, priority, DueDate, progress , state, ";
126 // This is the recurrance-stuff .. Exceptions are currently not supported (see ORecur.cpp) ! (eilers) 126 // This is the recurrance-stuff .. Exceptions are currently not supported (see ORecur.cpp) ! (eilers)
127 qu += "RType, RWeekdays, RPosition, RFreq, RHasEndDate, EndDate, Created, Exceptions, "; 127 qu += "RType, RWeekdays, RPosition, RFreq, RHasEndDate, EndDate, Created, Exceptions, ";
128 qu += "reminders, alarms, maintainer, startdate, completeddate);"; 128 qu += "reminders, alarms, maintainer, startdate, completeddate);";
129 qu += "create table custom_data( uid INTEGER, id INTEGER, type VARCHAR(10), value VARCHAR(10), PRIMARY KEY /* identifier */ (uid, id) );"; 129 qu += "create table custom_data( uid INTEGER, id INTEGER, type VARCHAR(10), value VARCHAR(10), PRIMARY KEY /* identifier */ (uid, id) );";
130 return qu; 130 return qu;
131 } 131 }
132 132
133 LoadQuery::LoadQuery() : OSQLQuery() {} 133 LoadQuery::LoadQuery() : OSQLQuery() {}
134 LoadQuery::~LoadQuery() {} 134 LoadQuery::~LoadQuery() {}
135 QString LoadQuery::query()const { 135 QString LoadQuery::query()const {
136 QString qu; 136 QString qu;
137 // We do not need "distinct" here. The primary key is always unique.. 137 // We do not need "distinct" here. The primary key is always unique..
138 //qu += "select distinct uid from todolist"; 138 //qu += "select distinct uid from todolist";
139 qu += "select uid from todolist"; 139 qu += "select uid from todolist";
140 140
141 return qu; 141 return qu;
142 } 142 }
143 143
144 InsertQuery::InsertQuery( const OTodo& todo ) 144 InsertQuery::InsertQuery( const OTodo& todo )
145 : OSQLQuery(), m_todo( todo ) { 145 : OSQLQuery(), m_todo( todo ) {
146 } 146 }
147 InsertQuery::~InsertQuery() { 147 InsertQuery::~InsertQuery() {
148 } 148 }
149 /* 149 /*
150 * converts from a OTodo to a query 150 * converts from a OTodo to a query
151 * we leave out X-Ref + Alarms 151 * we leave out X-Ref + Alarms
152 */ 152 */
153 QString InsertQuery::query()const{ 153 QString InsertQuery::query()const{
154 154
155 int year, month, day; 155 int year, month, day;
156 year = month = day = 0; 156 year = month = day = 0;
157 if (m_todo.hasDueDate() ) { 157 if (m_todo.hasDueDate() ) {
158 QDate date = m_todo.dueDate(); 158 QDate date = m_todo.dueDate();
159 year = date.year(); 159 year = date.year();
160 month = date.month(); 160 month = date.month();
161 day = date.day(); 161 day = date.day();
162 } 162 }
163 int sYear = 0, sMonth = 0, sDay = 0; 163 int sYear = 0, sMonth = 0, sDay = 0;
164 if( m_todo.hasStartDate() ){ 164 if( m_todo.hasStartDate() ){
165 QDate sDate = m_todo.startDate(); 165 QDate sDate = m_todo.startDate();
166 sYear = sDate.year(); 166 sYear = sDate.year();
167 sMonth= sDate.month(); 167 sMonth= sDate.month();
168 sDay = sDate.day(); 168 sDay = sDate.day();
169 } 169 }
170 170
171 int eYear = 0, eMonth = 0, eDay = 0; 171 int eYear = 0, eMonth = 0, eDay = 0;
172 if( m_todo.hasCompletedDate() ){ 172 if( m_todo.hasCompletedDate() ){
173 QDate eDate = m_todo.completedDate(); 173 QDate eDate = m_todo.completedDate();
174 eYear = eDate.year(); 174 eYear = eDate.year();
175 eMonth= eDate.month(); 175 eMonth= eDate.month();
176 eDay = eDate.day(); 176 eDay = eDate.day();
177 } 177 }
178 QString qu; 178 QString qu;
179 QMap<int, QString> recMap = m_todo.recurrence().toMap(); 179 QMap<int, QString> recMap = m_todo.recurrence().toMap();
180 qu = "insert into todolist VALUES(" 180 qu = "insert into todolist VALUES("
181 + QString::number( m_todo.uid() ) + "," 181 + QString::number( m_todo.uid() ) + ","
182 + "'" + m_todo.idsToString( m_todo.categories() ) + "'" + "," 182 + "'" + m_todo.idsToString( m_todo.categories() ) + "'" + ","
183 + QString::number( m_todo.isCompleted() ) + "," 183 + QString::number( m_todo.isCompleted() ) + ","
184 + "'" + m_todo.description() + "'" + "," 184 + "'" + m_todo.description() + "'" + ","
185 + "'" + m_todo.summary() + "'" + "," 185 + "'" + m_todo.summary() + "'" + ","
186 + QString::number(m_todo.priority() ) + "," 186 + QString::number(m_todo.priority() ) + ","
187 + "'" + QString::number(year) + "-" 187 + "'" + QString::number(year) + "-"
188 + QString::number(month) 188 + QString::number(month)
189 + "-" + QString::number( day ) + "'" + "," 189 + "-" + QString::number( day ) + "'" + ","
190 + QString::number( m_todo.progress() ) + "," 190 + QString::number( m_todo.progress() ) + ","
191 + QString::number( m_todo.state().state() ) + "," 191 + QString::number( m_todo.state().state() ) + ","
192 + "'" + recMap[ ORecur::RType ] + "'" + "," 192 + "'" + recMap[ ORecur::RType ] + "'" + ","
193 + "'" + recMap[ ORecur::RWeekdays ] + "'" + "," 193 + "'" + recMap[ ORecur::RWeekdays ] + "'" + ","
194 + "'" + recMap[ ORecur::RPosition ] + "'" + "," 194 + "'" + recMap[ ORecur::RPosition ] + "'" + ","
195 + "'" + recMap[ ORecur::RFreq ] + "'" + "," 195 + "'" + recMap[ ORecur::RFreq ] + "'" + ","
196 + "'" + recMap[ ORecur::RHasEndDate ] + "'" + "," 196 + "'" + recMap[ ORecur::RHasEndDate ] + "'" + ","
197 + "'" + recMap[ ORecur::EndDate ] + "'" + "," 197 + "'" + recMap[ ORecur::EndDate ] + "'" + ","
198 + "'" + recMap[ ORecur::Created ] + "'" + "," 198 + "'" + recMap[ ORecur::Created ] + "'" + ","
199 + "'" + recMap[ ORecur::Exceptions ] + "'" + ","; 199 + "'" + recMap[ ORecur::Exceptions ] + "'" + ",";
200 200
201 if ( m_todo.hasNotifiers() ) { 201 if ( m_todo.hasNotifiers() ) {
202 OPimNotifyManager manager = m_todo.notifiers(); 202 OPimNotifyManager manager = m_todo.notifiers();
203 qu += "'" + manager.remindersToString() + "'" + "," 203 qu += "'" + manager.remindersToString() + "'" + ","
204 + "'" + manager.alarmsToString() + "'" + ","; 204 + "'" + manager.alarmsToString() + "'" + ",";
205 } 205 }
206 else{ 206 else{
207 qu += QString( "''" ) + "," 207 qu += QString( "''" ) + ","
208 + "''" + ","; 208 + "''" + ",";
209 } 209 }
210 210
211 qu += QString( "''" ) + QString( "," ) // Maintainers (cur. not supported !) 211 qu += QString( "''" ) + QString( "," ) // Maintainers (cur. not supported !)
212 + "'" + QString::number(sYear) + "-" 212 + "'" + QString::number(sYear) + "-"
213 + QString::number(sMonth) 213 + QString::number(sMonth)
214 + "-" + QString::number(sDay) + "'" + "," 214 + "-" + QString::number(sDay) + "'" + ","
215 + "'" + QString::number(eYear) + "-" 215 + "'" + QString::number(eYear) + "-"
216 + QString::number(eMonth) 216 + QString::number(eMonth)
217 + "-"+QString::number(eDay) + "'" 217 + "-"+QString::number(eDay) + "'"
218 + ")"; 218 + ")";
219 219
220 qWarning("add %s", qu.latin1() ); 220 qWarning("add %s", qu.latin1() );
221 return qu; 221 return qu;
222 } 222 }
223 223
224 RemoveQuery::RemoveQuery(int uid ) 224 RemoveQuery::RemoveQuery(int uid )
225 : OSQLQuery(), m_uid( uid ) {} 225 : OSQLQuery(), m_uid( uid ) {}
226 RemoveQuery::~RemoveQuery() {} 226 RemoveQuery::~RemoveQuery() {}
227 QString RemoveQuery::query()const { 227 QString RemoveQuery::query()const {
228 QString qu = "DELETE from todolist where uid = " + QString::number(m_uid); 228 QString qu = "DELETE from todolist where uid = " + QString::number(m_uid);
229 return qu; 229 return qu;
230 } 230 }
231 231
232 232
233 ClearQuery::ClearQuery() 233 ClearQuery::ClearQuery()
234 : OSQLQuery() {} 234 : OSQLQuery() {}
235 ClearQuery::~ClearQuery() {} 235 ClearQuery::~ClearQuery() {}
236 QString ClearQuery::query()const { 236 QString ClearQuery::query()const {
237 QString qu = "drop table todolist"; 237 QString qu = "drop table todolist";
238 return qu; 238 return qu;
239 } 239 }
240 FindQuery::FindQuery(int uid) 240 FindQuery::FindQuery(int uid)
241 : OSQLQuery(), m_uid(uid ) { 241 : OSQLQuery(), m_uid(uid ) {
242 } 242 }
243 FindQuery::FindQuery(const QArray<int>& ints) 243 FindQuery::FindQuery(const QArray<int>& ints)
244 : OSQLQuery(), m_uids(ints){ 244 : OSQLQuery(), m_uids(ints){
245 } 245 }
246 FindQuery::~FindQuery() { 246 FindQuery::~FindQuery() {
247 } 247 }
248 QString FindQuery::query()const{ 248 QString FindQuery::query()const{
249 if (m_uids.count() == 0 ) 249 if (m_uids.count() == 0 )
250 return single(); 250 return single();
251 else 251 else
252 return multi(); 252 return multi();
253 } 253 }
254 QString FindQuery::single()const{ 254 QString FindQuery::single()const{
255 QString qu = "select * from todolist where uid = " + QString::number(m_uid); 255 QString qu = "select * from todolist where uid = " + QString::number(m_uid);
256 return qu; 256 return qu;
257 } 257 }
258 QString FindQuery::multi()const { 258 QString FindQuery::multi()const {
259 QString qu = "select * from todolist where "; 259 QString qu = "select * from todolist where ";
260 for (uint i = 0; i < m_uids.count(); i++ ) { 260 for (uint i = 0; i < m_uids.count(); i++ ) {
261 qu += " UID = " + QString::number( m_uids[i] ) + " OR"; 261 qu += " UID = " + QString::number( m_uids[i] ) + " OR";
262 } 262 }
263 qu.remove( qu.length()-2, 2 ); 263 qu.remove( qu.length()-2, 2 );
264 return qu; 264 return qu;
265 } 265 }
266 266
267 OverDueQuery::OverDueQuery(): OSQLQuery() {} 267 OverDueQuery::OverDueQuery(): OSQLQuery() {}
268 OverDueQuery::~OverDueQuery() {} 268 OverDueQuery::~OverDueQuery() {}
269 QString OverDueQuery::query()const { 269 QString OverDueQuery::query()const {
270 QDate date = QDate::currentDate(); 270 QDate date = QDate::currentDate();
271 QString str; 271 QString str;
272 str = QString("select uid from todolist where DueDate ='%1-%2-%3'").arg(date.year() ).arg(date.month() ).arg(date.day() ); 272 str = QString("select uid from todolist where DueDate ='%1-%2-%3'").arg(date.year() ).arg(date.month() ).arg(date.day() );
273 273
274 return str; 274 return str;
275 } 275 }
276 276
277 277
278 EffQuery::EffQuery( const QDate& start, const QDate& end, bool inc ) 278 EffQuery::EffQuery( const QDate& start, const QDate& end, bool inc )
279 : OSQLQuery(), m_start( start ), m_end( end ),m_inc(inc) {} 279 : OSQLQuery(), m_start( start ), m_end( end ),m_inc(inc) {}
280 EffQuery::~EffQuery() {} 280 EffQuery::~EffQuery() {}
281 QString EffQuery::query()const { 281 QString EffQuery::query()const {
282 return m_inc ? with() : out(); 282 return m_inc ? with() : out();
283 } 283 }
284 QString EffQuery::with()const { 284 QString EffQuery::with()const {
285 QString str; 285 QString str;
286 str = QString("select uid from todolist where ( DueDate >= '%1-%2-%3' AND DueDate <= '%4-%5-%6' ) OR DueDate = '0-0-0' ") 286 str = QString("select uid from todolist where ( DueDate >= '%1-%2-%3' AND DueDate <= '%4-%5-%6' ) OR DueDate = '0-0-0' ")
287 .arg( m_start.year() ).arg( m_start.month() ).arg( m_start.day() ) 287 .arg( m_start.year() ).arg( m_start.month() ).arg( m_start.day() )
288 .arg( m_end .year() ).arg( m_end .month() ).arg( m_end .day() ); 288 .arg( m_end .year() ).arg( m_end .month() ).arg( m_end .day() );
289 return str; 289 return str;
290 } 290 }
291 QString EffQuery::out()const { 291 QString EffQuery::out()const {
292 QString str; 292 QString str;
293 str = QString("select uid from todolist where DueDate >= '%1-%2-%3' AND DueDate <= '%4-%5-%6'") 293 str = QString("select uid from todolist where DueDate >= '%1-%2-%3' AND DueDate <= '%4-%5-%6'")
294 .arg(m_start.year() ).arg(m_start.month() ).arg( m_start.day() ) 294 .arg(m_start.year() ).arg(m_start.month() ).arg( m_start.day() )
295 .arg(m_end. year() ).arg(m_end. month() ).arg(m_end.day() ); 295 .arg(m_end. year() ).arg(m_end. month() ).arg(m_end.day() );
296 296
297 return str; 297 return str;
298 } 298 }
299}; 299};
300 300
301OTodoAccessBackendSQL::OTodoAccessBackendSQL( const QString& file ) 301OTodoAccessBackendSQL::OTodoAccessBackendSQL( const QString& file )
302 : OTodoAccessBackend(), m_dict(15), m_dirty(true) 302 : OTodoAccessBackend(), m_dict(15), m_driver(NULL), m_dirty(true)
303{ 303{
304 QString fi = file; 304 QString fi = file;
305 if ( fi.isEmpty() ) 305 if ( fi.isEmpty() )
306 fi = Global::applicationFileName( "todolist", "todolist.db" ); 306 fi = Global::applicationFileName( "todolist", "todolist.db" );
307 OSQLManager man; 307 OSQLManager man;
308 m_driver = man.standard(); 308 m_driver = man.standard();
309 m_driver->setUrl(fi); 309 m_driver->setUrl(fi);
310 // fillDict(); 310 // fillDict();
311} 311}
312 312
313OTodoAccessBackendSQL::~OTodoAccessBackendSQL(){ 313OTodoAccessBackendSQL::~OTodoAccessBackendSQL(){
314 if( m_driver )
315 delete m_driver;
314} 316}
317
315bool OTodoAccessBackendSQL::load(){ 318bool OTodoAccessBackendSQL::load(){
316 if (!m_driver->open() ) 319 if (!m_driver->open() )
317 return false; 320 return false;
318 321
319 CreateQuery creat; 322 CreateQuery creat;
320 OSQLResult res = m_driver->query(&creat ); 323 OSQLResult res = m_driver->query(&creat );
321 324
322 m_dirty = true; 325 m_dirty = true;
323 return true; 326 return true;
324} 327}
325bool OTodoAccessBackendSQL::reload(){ 328bool OTodoAccessBackendSQL::reload(){
326 return load(); 329 return load();
327} 330}
328 331
329bool OTodoAccessBackendSQL::save(){ 332bool OTodoAccessBackendSQL::save(){
330 return m_driver->close(); 333 return m_driver->close();
331} 334}
332QArray<int> OTodoAccessBackendSQL::allRecords()const { 335QArray<int> OTodoAccessBackendSQL::allRecords()const {
333 if (m_dirty ) 336 if (m_dirty )
334 update(); 337 update();
335 338
336 return m_uids; 339 return m_uids;
337} 340}
338QArray<int> OTodoAccessBackendSQL::queryByExample( const OTodo& , int, const QDateTime& ){ 341QArray<int> OTodoAccessBackendSQL::queryByExample( const OTodo& , int, const QDateTime& ){
339 QArray<int> ints(0); 342 QArray<int> ints(0);
340 return ints; 343 return ints;
341} 344}
342OTodo OTodoAccessBackendSQL::find(int uid ) const{ 345OTodo OTodoAccessBackendSQL::find(int uid ) const{
343 FindQuery query( uid ); 346 FindQuery query( uid );
344 return todo( m_driver->query(&query) ); 347 return todo( m_driver->query(&query) );
345 348
346} 349}
347OTodo OTodoAccessBackendSQL::find( int uid, const QArray<int>& ints, 350OTodo OTodoAccessBackendSQL::find( int uid, const QArray<int>& ints,
348 uint cur, Frontend::CacheDirection dir ) const{ 351 uint cur, Frontend::CacheDirection dir ) const{
349 uint CACHE = readAhead(); 352 uint CACHE = readAhead();
350 qWarning("searching for %d", uid ); 353 qWarning("searching for %d", uid );
351 QArray<int> search( CACHE ); 354 QArray<int> search( CACHE );
352 uint size =0; 355 uint size =0;
353 OTodo to; 356 OTodo to;
354 357
355 // we try to cache CACHE items 358 // we try to cache CACHE items
356 switch( dir ) { 359 switch( dir ) {
357 /* forward */ 360 /* forward */
358 case 0: // FIXME: Not a good style to use magic numbers here (eilers) 361 case 0: // FIXME: Not a good style to use magic numbers here (eilers)
359 for (uint i = cur; i < ints.count() && size < CACHE; i++ ) { 362 for (uint i = cur; i < ints.count() && size < CACHE; i++ ) {
360 qWarning("size %d %d", size, ints[i] ); 363 qWarning("size %d %d", size, ints[i] );
361 search[size] = ints[i]; 364 search[size] = ints[i];
362 size++; 365 size++;
363 } 366 }
364 break; 367 break;
365 /* reverse */ 368 /* reverse */
366 case 1: // FIXME: Not a good style to use magic numbers here (eilers) 369 case 1: // FIXME: Not a good style to use magic numbers here (eilers)
367 for (uint i = cur; i != 0 && size < CACHE; i-- ) { 370 for (uint i = cur; i != 0 && size < CACHE; i-- ) {
368 search[size] = ints[i]; 371 search[size] = ints[i];
369 size++; 372 size++;
370 } 373 }
371 break; 374 break;
372 } 375 }
373 search.resize( size ); 376 search.resize( size );
374 FindQuery query( search ); 377 FindQuery query( search );
375 OSQLResult res = m_driver->query( &query ); 378 OSQLResult res = m_driver->query( &query );
376 if ( res.state() != OSQLResult::Success ) 379 if ( res.state() != OSQLResult::Success )
377 return to; 380 return to;
378 381
379 return todo( res ); 382 return todo( res );
380} 383}
381void OTodoAccessBackendSQL::clear() { 384void OTodoAccessBackendSQL::clear() {
382 ClearQuery cle; 385 ClearQuery cle;
383 OSQLResult res = m_driver->query( &cle ); 386 OSQLResult res = m_driver->query( &cle );
384 CreateQuery qu; 387 CreateQuery qu;
385 res = m_driver->query(&qu); 388 res = m_driver->query(&qu);
386} 389}
387bool OTodoAccessBackendSQL::add( const OTodo& t) { 390bool OTodoAccessBackendSQL::add( const OTodo& t) {
388 InsertQuery ins( t ); 391 InsertQuery ins( t );
389 OSQLResult res = m_driver->query( &ins ); 392 OSQLResult res = m_driver->query( &ins );
390 393
391 if ( res.state() == OSQLResult::Failure ) 394 if ( res.state() == OSQLResult::Failure )
392 return false; 395 return false;
393 int c = m_uids.count(); 396 int c = m_uids.count();
394 m_uids.resize( c+1 ); 397 m_uids.resize( c+1 );
395 m_uids[c] = t.uid(); 398 m_uids[c] = t.uid();
396 399
397 return true; 400 return true;
398} 401}
399bool OTodoAccessBackendSQL::remove( int uid ) { 402bool OTodoAccessBackendSQL::remove( int uid ) {
400 RemoveQuery rem( uid ); 403 RemoveQuery rem( uid );
401 OSQLResult res = m_driver->query(&rem ); 404 OSQLResult res = m_driver->query(&rem );
402 405
403 if ( res.state() == OSQLResult::Failure ) 406 if ( res.state() == OSQLResult::Failure )
404 return false; 407 return false;
405 408
406 m_dirty = true; 409 m_dirty = true;
407 return true; 410 return true;
408} 411}
409/* 412/*
410 * FIXME better set query 413 * FIXME better set query
411 * but we need the cache for that 414 * but we need the cache for that
412 * now we remove 415 * now we remove
413 */ 416 */
414bool OTodoAccessBackendSQL::replace( const OTodo& t) { 417bool OTodoAccessBackendSQL::replace( const OTodo& t) {
415 remove( t.uid() ); 418 remove( t.uid() );
416 bool b= add(t); 419 bool b= add(t);
417 m_dirty = false; // we changed some stuff but the UID stayed the same 420 m_dirty = false; // we changed some stuff but the UID stayed the same
418 return b; 421 return b;
419} 422}
420QArray<int> OTodoAccessBackendSQL::overDue() { 423QArray<int> OTodoAccessBackendSQL::overDue() {
421 OverDueQuery qu; 424 OverDueQuery qu;
422 return uids( m_driver->query(&qu ) ); 425 return uids( m_driver->query(&qu ) );
423} 426}
424QArray<int> OTodoAccessBackendSQL::effectiveToDos( const QDate& s, 427QArray<int> OTodoAccessBackendSQL::effectiveToDos( const QDate& s,
425 const QDate& t, 428 const QDate& t,
426 bool u) { 429 bool u) {
427 EffQuery ef(s, t, u ); 430 EffQuery ef(s, t, u );
428 return uids (m_driver->query(&ef) ); 431 return uids (m_driver->query(&ef) );
429} 432}
430/* 433/*
431 * 434 *
432 */ 435 */
433QArray<int> OTodoAccessBackendSQL::sorted( bool asc, int sortOrder, 436QArray<int> OTodoAccessBackendSQL::sorted( bool asc, int sortOrder,
434 int sortFilter, int cat ) { 437 int sortFilter, int cat ) {
435 qWarning("sorted %d, %d", asc, sortOrder ); 438 qWarning("sorted %d, %d", asc, sortOrder );
436 QString query; 439 QString query;
437 query = "select uid from todolist WHERE "; 440 query = "select uid from todolist WHERE ";
438 441
439 /* 442 /*
440 * Sort Filter stuff 443 * Sort Filter stuff
441 * not that straight forward 444 * not that straight forward
442 * FIXME: Replace magic numbers 445 * FIXME: Replace magic numbers
443 * 446 *
444 */ 447 */
445 /* Category */ 448 /* Category */
446 if ( sortFilter & 1 ) { 449 if ( sortFilter & 1 ) {
447 QString str; 450 QString str;
448 if (cat != 0 ) str = QString::number( cat ); 451 if (cat != 0 ) str = QString::number( cat );
449 query += " categories like '%" +str+"%' AND"; 452 query += " categories like '%" +str+"%' AND";
450 } 453 }
451 /* Show only overdue */ 454 /* Show only overdue */
452 if ( sortFilter & 2 ) { 455 if ( sortFilter & 2 ) {
453 QDate date = QDate::currentDate(); 456 QDate date = QDate::currentDate();
454 QString due; 457 QString due;
455 QString base; 458 QString base;
456 base = QString("DueDate <= '%1-%2-%3' AND completed = 0").arg( date.year() ).arg( date.month() ).arg( date.day() ); 459 base = QString("DueDate <= '%1-%2-%3' AND completed = 0").arg( date.year() ).arg( date.month() ).arg( date.day() );
457 query += " " + base + " AND"; 460 query += " " + base + " AND";
458 } 461 }
459 /* not show completed */ 462 /* not show completed */
460 if ( sortFilter & 4 ) { 463 if ( sortFilter & 4 ) {
461 query += " completed = 0 AND"; 464 query += " completed = 0 AND";
462 }else{ 465 }else{
463 query += " ( completed = 1 OR completed = 0) AND"; 466 query += " ( completed = 1 OR completed = 0) AND";
464 } 467 }
465 /* srtip the end */ 468 /* srtip the end */
466 query = query.remove( query.length()-3, 3 ); 469 query = query.remove( query.length()-3, 3 );
467 470
468 471
469 /* 472 /*
470 * sort order stuff 473 * sort order stuff
471 * quite straight forward 474 * quite straight forward
472 */ 475 */
473 query += "ORDER BY "; 476 query += "ORDER BY ";
474 switch( sortOrder ) { 477 switch( sortOrder ) {
475 /* completed */ 478 /* completed */
476 case 0: 479 case 0:
477 query += "completed"; 480 query += "completed";
478 break; 481 break;
479 case 1: 482 case 1:
480 query += "priority"; 483 query += "priority";
481 break; 484 break;
482 case 2: 485 case 2:
483 query += "summary"; 486 query += "summary";
484 break; 487 break;
485 case 3: 488 case 3:
486 query += "DueDate"; 489 query += "DueDate";
487 break; 490 break;
488 } 491 }
489 492
490 if ( !asc ) { 493 if ( !asc ) {
491 qWarning("not ascending!"); 494 qWarning("not ascending!");
492 query += " DESC"; 495 query += " DESC";
493 } 496 }
494 497
495 qWarning( query ); 498 qWarning( query );
496 OSQLRawQuery raw(query ); 499 OSQLRawQuery raw(query );
497 return uids( m_driver->query(&raw) ); 500 return uids( m_driver->query(&raw) );
498} 501}
499bool OTodoAccessBackendSQL::date( QDate& da, const QString& str ) const{ 502bool OTodoAccessBackendSQL::date( QDate& da, const QString& str ) const{
500 if ( str == "0-0-0" ) 503 if ( str == "0-0-0" )
501 return false; 504 return false;
502 else{ 505 else{
503 int day, year, month; 506 int day, year, month;
504 QStringList list = QStringList::split("-", str ); 507 QStringList list = QStringList::split("-", str );
505 year = list[0].toInt(); 508 year = list[0].toInt();
506 month = list[1].toInt(); 509 month = list[1].toInt();