summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/backend/otodoaccesssql.cpp
Unidiff
Diffstat (limited to 'libopie2/opiepim/backend/otodoaccesssql.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/otodoaccesssql.cpp173
1 files changed, 142 insertions, 31 deletions
diff --git a/libopie2/opiepim/backend/otodoaccesssql.cpp b/libopie2/opiepim/backend/otodoaccesssql.cpp
index d218090..b4170fc 100644
--- a/libopie2/opiepim/backend/otodoaccesssql.cpp
+++ b/libopie2/opiepim/backend/otodoaccesssql.cpp
@@ -3,2 +3,3 @@
3 Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de) 3 Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de)
4 Copyright (C) Holger Freyther (zecke@handhelds.org)
4 =. Copyright (C) The Opie Team <opie-devel@handhelds.org> 5 =. Copyright (C) The Opie Team <opie-devel@handhelds.org>
@@ -30,2 +31,4 @@
30#include <qdatetime.h> 31#include <qdatetime.h>
32#include <qmap.h>
33#include <qstring.h>
31 34
@@ -150,2 +153,20 @@ namespace {
150 153
154 /**
155 * a find query for custom elements
156 */
157 class FindCustomQuery : public OSQLQuery {
158 public:
159 FindCustomQuery(int uid);
160 FindCustomQuery(const QArray<int>& );
161 ~FindCustomQuery();
162 QString query()const;
163 private:
164 QString single()const;
165 QString multi()const;
166 QArray<int> m_uids;
167 int m_uid;
168 };
169
170
171
151 CreateQuery::CreateQuery() : OSQLQuery() {} 172 CreateQuery::CreateQuery() : OSQLQuery() {}
@@ -159,3 +180,3 @@ namespace {
159 qu += "reminders, alarms, maintainer, startdate, completeddate);"; 180 qu += "reminders, alarms, maintainer, startdate, completeddate);";
160 qu += "create table custom_data( uid INTEGER, id INTEGER, type VARCHAR(10), value VARCHAR(10), PRIMARY KEY /* identifier */ (uid, id) );"; 181 qu += "create table custom_data( uid INTEGER, id INTEGER, type VARCHAR(10), priority INTEGER, value VARCHAR(10), PRIMARY KEY /* identifier */ (uid, id) );";
161 return qu; 182 return qu;
@@ -181,3 +202,5 @@ namespace {
181 * converts from a OPimTodo to a query 202 * converts from a OPimTodo to a query
182 * we leave out X-Ref + Alarms 203 * we leave out X-Ref + Maintainer
204 * FIXME: Implement/Finish toMap()/fromMap() into OpimTodo to move the encoding
205 * decoding stuff there.. (eilers)
183 */ 206 */
@@ -217,5 +240,5 @@ namespace {
217 + QString::number(m_todo.priority() ) + "," 240 + QString::number(m_todo.priority() ) + ","
218 + "'" + QString::number(year) + "-" 241 + "'" + QString::number(year).rightJustify( 4, '0' ) + "-"
219 + QString::number(month) 242 + QString::number(month).rightJustify( 2, '0' )
220 + "-" + QString::number( day ) + "'" + "," 243 + "-" + QString::number( day ).rightJustify( 2, '0' )+ "'" + ","
221 + QString::number( m_todo.progress() ) + "," 244 + QString::number( m_todo.progress() ) + ","
@@ -242,11 +265,31 @@ namespace {
242 qu += QString( "''" ) + QString( "," ) // Maintainers (cur. not supported !) 265 qu += QString( "''" ) + QString( "," ) // Maintainers (cur. not supported !)
243 + "'" + QString::number(sYear) + "-" 266 + "'" + QString::number(sYear).rightJustify( 4, '0' ) + "-"
244 + QString::number(sMonth) 267 + QString::number(sMonth).rightJustify( 2, '0' )
245 + "-" + QString::number(sDay) + "'" + "," 268 + "-" + QString::number(sDay).rightJustify( 2, '0' )+ "'" + ","
246 + "'" + QString::number(eYear) + "-" 269 + "'" + QString::number(eYear).rightJustify( 4, '0' ) + "-"
247 + QString::number(eMonth) 270 + QString::number(eMonth).rightJustify( 2, '0' )
248 + "-"+QString::number(eDay) + "'" 271 + "-"+QString::number(eDay).rightJustify( 2, '0' ) + "'"
249 + ")"; 272 + ")";
250 273
251 qWarning("add %s", qu.latin1() ); 274 // Save custom Entries:
275 int id = 0;
276 id = 0;
277 QMap<QString, QString> customMap = m_todo.toExtraMap();
278 for( QMap<QString, QString>::Iterator it = customMap.begin();
279 it != customMap.end(); ++it ){
280 qu += "insert into custom_data VALUES("
281 + QString::number( m_todo.uid() )
282 + ","
283 + QString::number( id++ )
284 + ",'"
285 + it.key()
286 + "',"
287 + "0" // Priority for future enhancements
288 + ",'"
289 + it.data()
290 + "');";
291 }
292
293
294 qDebug("add %s", qu.latin1() );
252 return qu; 295 return qu;
@@ -302,3 +345,6 @@ namespace {
302 QString str; 345 QString str;
303 str = QString("select uid from todolist where DueDate ='%1-%2-%3'").arg(date.year() ).arg(date.month() ).arg(date.day() ); 346 str = QString("select uid from todolist where DueDate ='%1-%2-%3'")
347 .arg( QString::number( date.year() ).rightJustify( 4, '0' ) )
348 .arg( QString::number( date.month() ).rightJustify( 2, '0' ) )
349 .arg( QString::number( date.day() ) .rightJustify( 2, '0' ) );
304 350
@@ -317,4 +363,8 @@ namespace {
317 str = QString("select uid from todolist where ( DueDate >= '%1-%2-%3' AND DueDate <= '%4-%5-%6' ) OR DueDate = '0-0-0' ") 363 str = QString("select uid from todolist where ( DueDate >= '%1-%2-%3' AND DueDate <= '%4-%5-%6' ) OR DueDate = '0-0-0' ")
318 .arg( m_start.year() ).arg( m_start.month() ).arg( m_start.day() ) 364 .arg( QString::number( m_start.year() ).rightJustify( 4, '0' ) )
319 .arg( m_end .year() ).arg( m_end .month() ).arg( m_end .day() ); 365 .arg( QString::number( m_start.month() ).rightJustify( 2, '0' ) )
366 .arg( QString::number( m_start.day() ).rightJustify( 2, '0' ) )
367 .arg( QString::number( m_end.year() ).rightJustify( 4, '0' ) )
368 .arg( QString::number( m_end.month() ).rightJustify( 2, '0' ) )
369 .arg( QString::number( m_end.day() ).rightJustify( 2, '0' ) );
320 return str; 370 return str;
@@ -324,4 +374,8 @@ namespace {
324 str = QString("select uid from todolist where DueDate >= '%1-%2-%3' AND DueDate <= '%4-%5-%6'") 374 str = QString("select uid from todolist where DueDate >= '%1-%2-%3' AND DueDate <= '%4-%5-%6'")
325 .arg(m_start.year() ).arg(m_start.month() ).arg( m_start.day() ) 375 .arg( QString::number( m_start.year() ).rightJustify( 4, '0' ) )
326 .arg(m_end. year() ).arg(m_end. month() ).arg(m_end.day() ); 376 .arg( QString::number( m_start.month() ).rightJustify( 2, '0' ) )
377 .arg( QString::number( m_start.day() ).rightJustify( 2, '0' ) )
378 .arg( QString::number( m_end.year() ).rightJustify( 4, '0' ) )
379 .arg( QString::number( m_end.month() ).rightJustify( 2, '0' ) )
380 .arg( QString::number( m_end.day() ).rightJustify( 2, '0' ) );
327 381
@@ -329,2 +383,20 @@ namespace {
329 } 383 }
384
385 FindCustomQuery::FindCustomQuery(int uid)
386 : OSQLQuery(), m_uid( uid ) {
387 }
388 FindCustomQuery::FindCustomQuery(const QArray<int>& ints)
389 : OSQLQuery(), m_uids( ints ){
390 }
391 FindCustomQuery::~FindCustomQuery() {
392 }
393 QString FindCustomQuery::query()const{
394 return single(); // Multiple requests not supported !
395 }
396 QString FindCustomQuery::single()const{
397 QString qu = "select uid, type, value from custom_data where uid = ";
398 qu += QString::number(m_uid);
399 return qu;
400 }
401
330}; 402};
@@ -334,3 +406,3 @@ namespace Opie {
334OPimTodoAccessBackendSQL::OPimTodoAccessBackendSQL( const QString& file ) 406OPimTodoAccessBackendSQL::OPimTodoAccessBackendSQL( const QString& file )
335 : OPimTodoAccessBackend(), m_dict(15), m_driver(NULL), m_dirty(true) 407 : OPimTodoAccessBackend(),/* m_dict(15),*/ m_driver(NULL), m_dirty(true)
336{ 408{
@@ -385,3 +457,3 @@ OPimTodo OPimTodoAccessBackendSQL::find( int uid, const QArray<int>& ints,
385 uint CACHE = readAhead(); 457 uint CACHE = readAhead();
386 qWarning("searching for %d", uid ); 458 qDebug("searching for %d", uid );
387 QArray<int> search( CACHE ); 459 QArray<int> search( CACHE );
@@ -395,3 +467,3 @@ OPimTodo OPimTodoAccessBackendSQL::find( int uid, const QArray<int>& ints,
395 for (uint i = cur; i < ints.count() && size < CACHE; i++ ) { 467 for (uint i = cur; i < ints.count() && size < CACHE; i++ ) {
396 qWarning("size %d %d", size, ints[i] ); 468 qDebug("size %d %d", size, ints[i] );
397 search[size] = ints[i]; 469 search[size] = ints[i];
@@ -470,3 +542,3 @@ QArray<int> OPimTodoAccessBackendSQL::sorted( bool asc, int sortOrder,
470 int sortFilter, int cat ) { 542 int sortFilter, int cat ) {
471 qWarning("sorted %d, %d", asc, sortOrder ); 543 qDebug("sorted %d, %d", asc, sortOrder );
472 QString query; 544 QString query;
@@ -491,3 +563,6 @@ QArray<int> OPimTodoAccessBackendSQL::sorted( bool asc, int sortOrder,
491 QString base; 563 QString base;
492 base = QString("DueDate <= '%1-%2-%3' AND completed = 0").arg( date.year() ).arg( date.month() ).arg( date.day() ); 564 base = QString("DueDate <= '%1-%2-%3' AND completed = 0")
565 .arg( QString::number( date.year() ).rightJustify( 4, '0' ) )
566 .arg( QString::number( date.month() ).rightJustify( 2, '0' ) )
567 .arg( QString::number( date.day() ).rightJustify( 2, '0' ) );
493 query += " " + base + " AND"; 568 query += " " + base + " AND";
@@ -500,3 +575,3 @@ QArray<int> OPimTodoAccessBackendSQL::sorted( bool asc, int sortOrder,
500 } 575 }
501 /* srtip the end */ 576 /* strip the end */
502 query = query.remove( query.length()-3, 3 ); 577 query = query.remove( query.length()-3, 3 );
@@ -526,3 +601,3 @@ QArray<int> OPimTodoAccessBackendSQL::sorted( bool asc, int sortOrder,
526 if ( !asc ) { 601 if ( !asc ) {
527 qWarning("not ascending!"); 602 qDebug("not ascending!");
528 query += " DESC"; 603 query += " DESC";
@@ -530,3 +605,3 @@ QArray<int> OPimTodoAccessBackendSQL::sorted( bool asc, int sortOrder,
530 605
531 qWarning( query ); 606 qDebug( query );
532 OSQLRawQuery raw(query ); 607 OSQLRawQuery raw(query );
@@ -547,3 +622,3 @@ bool OPimTodoAccessBackendSQL::date( QDate& da, const QString& str ) const{
547} 622}
548OPimTodo OPimTodoAccessBackendSQL::todo( const OSQLResult& res) const{ 623OPimTodo OPimTodoAccessBackendSQL::todo( const OSQLResult& res ) const{
549 if ( res.state() == OSQLResult::Failure ) { 624 if ( res.state() == OSQLResult::Failure ) {
@@ -555,3 +630,3 @@ OPimTodo OPimTodoAccessBackendSQL::todo( const OSQLResult& res) const{
555 OSQLResultItem::ValueList::Iterator it = list.begin(); 630 OSQLResultItem::ValueList::Iterator it = list.begin();
556 qWarning("todo1"); 631 qDebug("todo1");
557 OPimTodo to = todo( (*it) ); 632 OPimTodo to = todo( (*it) );
@@ -561,3 +636,3 @@ OPimTodo OPimTodoAccessBackendSQL::todo( const OSQLResult& res) const{
561 for ( ; it != list.end(); ++it ) { 636 for ( ; it != list.end(); ++it ) {
562 qWarning("caching"); 637 qDebug("caching");
563 cache( todo( (*it) ) ); 638 cache( todo( (*it) ) );
@@ -567,3 +642,6 @@ OPimTodo OPimTodoAccessBackendSQL::todo( const OSQLResult& res) const{
567OPimTodo OPimTodoAccessBackendSQL::todo( OSQLResultItem& item )const { 642OPimTodo OPimTodoAccessBackendSQL::todo( OSQLResultItem& item )const {
568 qWarning("todo"); 643 qDebug("todo(ResultItem)");
644
645 // Request information from addressbook table and create the OPimTodo-object.
646
569 bool hasDueDate = false; QDate dueDate = QDate::currentDate(); 647 bool hasDueDate = false; QDate dueDate = QDate::currentDate();
@@ -572,3 +650,3 @@ OPimTodo OPimTodoAccessBackendSQL::todo( OSQLResultItem& item )const {
572 650
573 qWarning("Item is completed: %d", item.data("completed").toInt() ); 651 qDebug("Item is completed: %d", item.data("completed").toInt() );
574 652
@@ -616,2 +694,5 @@ OPimTodo OPimTodoAccessBackendSQL::todo( OSQLResultItem& item )const {
616 694
695 // Finally load the custom-entries for this UID and put it into the created object
696 to.setExtraMap( requestCustom( to.uid() ) );
697
617 return to; 698 return to;
@@ -626,2 +707,4 @@ OPimTodo OPimTodoAccessBackendSQL::todo( int uid )const {
626void OPimTodoAccessBackendSQL::fillDict() { 707void OPimTodoAccessBackendSQL::fillDict() {
708
709#if 0
627 /* initialize dict */ 710 /* initialize dict */
@@ -647,2 +730,4 @@ void OPimTodoAccessBackendSQL::fillDict() {
647// m_dict.insert("AlarmDateTime", new int(OPimTodo::AlarmDateTime) ); // old stuff (eilers) 730// m_dict.insert("AlarmDateTime", new int(OPimTodo::AlarmDateTime) ); // old stuff (eilers)
731
732#endif
648} 733}
@@ -666,3 +751,3 @@ QArray<int> OPimTodoAccessBackendSQL::uids( const OSQLResult& res) const{
666 QArray<int> ints(list.count() ); 751 QArray<int> ints(list.count() );
667 qWarning(" count = %d", list.count() ); 752 qDebug(" count = %d", list.count() );
668 753
@@ -727,2 +812,28 @@ void OPimTodoAccessBackendSQL::removeAllCompleted(){
727 812
813
814QMap<QString, QString> OPimTodoAccessBackendSQL::requestCustom( int uid ) const
815{
816 QMap<QString, QString> customMap;
817
818 FindCustomQuery query( uid );
819 OSQLResult res_custom = m_driver->query( &query );
820
821 if ( res_custom.state() == OSQLResult::Failure ) {
822 qWarning("OSQLResult::Failure in find query !!");
823 QMap<QString, QString> empty;
824 return empty;
825 }
826
827 OSQLResultItem::ValueList list = res_custom.results();
828 OSQLResultItem::ValueList::Iterator it = list.begin();
829 for ( ; it != list.end(); ++it ) {
830 customMap.insert( (*it).data( "type" ), (*it).data( "value" ) );
831 }
832
833 return customMap;
834}
835
836
837
838
728} 839}