Diffstat (limited to 'libopie/pim/otodoaccesssql.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie/pim/otodoaccesssql.cpp | 5 |
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 | ||
301 | OTodoAccessBackendSQL::OTodoAccessBackendSQL( const QString& file ) | 301 | OTodoAccessBackendSQL::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 | ||
313 | OTodoAccessBackendSQL::~OTodoAccessBackendSQL(){ | 313 | OTodoAccessBackendSQL::~OTodoAccessBackendSQL(){ |
314 | if( m_driver ) | ||
315 | delete m_driver; | ||
314 | } | 316 | } |
317 | |||
315 | bool OTodoAccessBackendSQL::load(){ | 318 | bool 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 | } |
325 | bool OTodoAccessBackendSQL::reload(){ | 328 | bool OTodoAccessBackendSQL::reload(){ |
326 | return load(); | 329 | return load(); |
327 | } | 330 | } |
328 | 331 | ||
329 | bool OTodoAccessBackendSQL::save(){ | 332 | bool OTodoAccessBackendSQL::save(){ |
330 | return m_driver->close(); | 333 | return m_driver->close(); |
331 | } | 334 | } |
332 | QArray<int> OTodoAccessBackendSQL::allRecords()const { | 335 | QArray<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 | } |
338 | QArray<int> OTodoAccessBackendSQL::queryByExample( const OTodo& , int, const QDateTime& ){ | 341 | QArray<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 | } |
342 | OTodo OTodoAccessBackendSQL::find(int uid ) const{ | 345 | OTodo 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 | } |
347 | OTodo OTodoAccessBackendSQL::find( int uid, const QArray<int>& ints, | 350 | OTodo 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 | } |
381 | void OTodoAccessBackendSQL::clear() { | 384 | void 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 | } |
387 | bool OTodoAccessBackendSQL::add( const OTodo& t) { | 390 | bool 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 | } |
399 | bool OTodoAccessBackendSQL::remove( int uid ) { | 402 | bool 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 | */ |
414 | bool OTodoAccessBackendSQL::replace( const OTodo& t) { | 417 | bool 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 | } |
420 | QArray<int> OTodoAccessBackendSQL::overDue() { | 423 | QArray<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 | } |
424 | QArray<int> OTodoAccessBackendSQL::effectiveToDos( const QDate& s, | 427 | QArray<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 | */ |
433 | QArray<int> OTodoAccessBackendSQL::sorted( bool asc, int sortOrder, | 436 | QArray<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 | } |
499 | bool OTodoAccessBackendSQL::date( QDate& da, const QString& str ) const{ | 502 | bool 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(); |