summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp24
-rw-r--r--libopie2/opiepim/backend/otodoaccesssql.cpp75
2 files changed, 80 insertions, 19 deletions
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp b/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp
index 8a8cb0b..495a8dd 100644
--- a/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp
+++ b/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp
@@ -218,12 +218,14 @@ void ODateBookAccessBackend_SQL::clear()
218 218
219 reload(); 219 reload();
220} 220}
221 221
222 222
223OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{ 223OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{
224 qDebug( "ODateBookAccessBackend_SQL::find( %d )", uid );
225
224 QString qu = "select *"; 226 QString qu = "select *";
225 qu += "from datebook where uid = " + QString::number(uid); 227 qu += "from datebook where uid = " + QString::number(uid);
226 228
227 OSQLRawQuery raw( qu ); 229 OSQLRawQuery raw( qu );
228 OSQLResult res = m_driver->query( &raw ); 230 OSQLResult res = m_driver->query( &raw );
229 231
@@ -239,12 +241,14 @@ OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{
239 dateEventMap.insert( m_reverseFieldMap[*it], resItem.data( *it ) ); 241 dateEventMap.insert( m_reverseFieldMap[*it], resItem.data( *it ) );
240 } 242 }
241 243
242 // Last step: Put map into date event, add custom map and return it 244 // Last step: Put map into date event, add custom map and return it
243 OPimEvent retDate( dateEventMap ); 245 OPimEvent retDate( dateEventMap );
244 retDate.setExtraMap( requestCustom( uid ) ); 246 retDate.setExtraMap( requestCustom( uid ) );
247
248 qDebug( "ODateBookAccessBackend_SQL::find() end", uid );
245 return retDate; 249 return retDate;
246} 250}
247 251
248// FIXME: Speed up update of uid's.. 252// FIXME: Speed up update of uid's..
249bool ODateBookAccessBackend_SQL::add( const OPimEvent& ev ) 253bool ODateBookAccessBackend_SQL::add( const OPimEvent& ev )
250{ 254{
@@ -372,14 +376,30 @@ OPimEvent::ValueList ODateBookAccessBackend_SQL::directRawRepeats()
372 return list; 376 return list;
373} 377}
374 378
375 379
376QArray<int> ODateBookAccessBackend_SQL::matchRegexp( const QRegExp &r ) const 380QArray<int> ODateBookAccessBackend_SQL::matchRegexp( const QRegExp &r ) const
377{ 381{
378 QArray<int> null; 382
379 return null; 383 QString qu = "SELECT uid FROM datebook WHERE (";
384
385 // Do it make sense to search other fields, too ?
386 qu += " rlike(\""+ r.pattern() + "\", Location ) OR";
387 qu += " rlike(\""+ r.pattern() + "\", Note )";
388
389 qu += " )";
390
391 qDebug( "query: %s", qu.latin1() );
392
393 OSQLRawQuery raw( qu );
394 OSQLResult res = m_driver->query( &raw );
395
396 return extractUids( res );
397
398
399
380} 400}
381 401
382/* ===== Private Functions ========================================== */ 402/* ===== Private Functions ========================================== */
383 403
384QArray<int> ODateBookAccessBackend_SQL::extractUids( OSQLResult& res ) const 404QArray<int> ODateBookAccessBackend_SQL::extractUids( OSQLResult& res ) const
385{ 405{
diff --git a/libopie2/opiepim/backend/otodoaccesssql.cpp b/libopie2/opiepim/backend/otodoaccesssql.cpp
index b4170fc..ef036d5 100644
--- a/libopie2/opiepim/backend/otodoaccesssql.cpp
+++ b/libopie2/opiepim/backend/otodoaccesssql.cpp
@@ -296,13 +296,14 @@ namespace {
296 } 296 }
297 297
298 RemoveQuery::RemoveQuery(int uid ) 298 RemoveQuery::RemoveQuery(int uid )
299 : OSQLQuery(), m_uid( uid ) {} 299 : OSQLQuery(), m_uid( uid ) {}
300 RemoveQuery::~RemoveQuery() {} 300 RemoveQuery::~RemoveQuery() {}
301 QString RemoveQuery::query()const { 301 QString RemoveQuery::query()const {
302 QString qu = "DELETE from todolist where uid = " + QString::number(m_uid); 302 QString qu = "DELETE FROM todolist WHERE uid = " + QString::number(m_uid) + " ;";
303 qu += "DELETE FROM custom_data WHERE uid = " + QString::number(m_uid);
303 return qu; 304 return qu;
304 } 305 }
305 306
306 307
307 ClearQuery::ClearQuery() 308 ClearQuery::ClearQuery()
308 : OSQLQuery() {} 309 : OSQLQuery() {}
@@ -759,36 +760,35 @@ QArray<int> OPimTodoAccessBackendSQL::uids( const OSQLResult& res) const{
759 return ints; 760 return ints;
760} 761}
761 762
762QArray<int> OPimTodoAccessBackendSQL::matchRegexp( const QRegExp &r ) const 763QArray<int> OPimTodoAccessBackendSQL::matchRegexp( const QRegExp &r ) const
763{ 764{
764 765
765#warning OPimTodoAccessBackendSQL::matchRegexp() not implemented !!
766
767#if 0 766#if 0
767 QArray<int> empty;
768 return empty;
768 769
769 Copied from xml-backend by not adapted to sql (eilers) 770#else
771 QString qu = "SELECT uid FROM todolist WHERE (";
770 772
771 QArray<int> m_currentQuery( m_events.count() ); 773 // Do it make sense to search other fields, too ?
772 uint arraycounter = 0; 774 qu += " rlike(\""+ r.pattern() + "\",\"description\") OR";
775 qu += " rlike(\""+ r.pattern() + "\",\"summary\")";
776
777 qu += ")";
773 778
779 qDebug( "query: %s", qu.latin1() );
774 780
781 OSQLRawQuery raw( qu );
782 OSQLResult res = m_driver->query( &raw );
775 783
776 QMap<int, OPimTodo>::ConstIterator it; 784 return uids( res );
777 for (it = m_events.begin(); it != m_events.end(); ++it ) {
778 if ( it.data().match( r ) )
779 m_currentQuery[arraycounter++] = it.data().uid();
780 785
781 }
782 // Shrink to fit..
783 m_currentQuery.resize(arraycounter);
784 786
785 return m_currentQuery;
786#endif 787#endif
787 QArray<int> empty; 788
788 return empty;
789} 789}
790QBitArray OPimTodoAccessBackendSQL::supports()const { 790QBitArray OPimTodoAccessBackendSQL::supports()const {
791 791
792 return sup(); 792 return sup();
793} 793}
794 794
@@ -803,14 +803,55 @@ QBitArray OPimTodoAccessBackendSQL::sup() const{
803 ar[OPimTodo::Maintainer] = false; 803 ar[OPimTodo::Maintainer] = false;
804 804
805 return ar; 805 return ar;
806} 806}
807 807
808void OPimTodoAccessBackendSQL::removeAllCompleted(){ 808void OPimTodoAccessBackendSQL::removeAllCompleted(){
809#warning OPimTodoAccessBackendSQL::removeAllCompleted() not implemented !! 809 // First we need the uids from all entries which are
810 // completed. Then, we just have to remove them...
811
812 QString qu = "SELECT uid FROM todolist WHERE completed = 1";
813
814 OSQLRawQuery raw( qu );
815 OSQLResult res = m_driver->query( &raw );
816
817 QArray<int> completed_uids = uids( res );
810 818
819 qDebug( "Number of completed: %d", completed_uids.size() );
820
821 if ( completed_uids.size() == 0 )
822 return;
823
824 qu = "DELETE FROM todolist WHERE (";
825 QString query;
826
827 for ( int i = 0; i < completed_uids.size(); i++ ){
828 if ( !query.isEmpty() )
829 query += " OR ";
830 query += QString( "uid = %1" ).arg( completed_uids[i] );
831 }
832 qu += query + " );";
833
834 // Put remove of custom entries in this query to speed up..
835 qu += "DELETE FORM custom_data WHERE (";
836 query = "";
837
838 for ( int i = 0; i < completed_uids.size(); i++ ){
839 if ( !query.isEmpty() )
840 query += " OR ";
841 query += QString( "uid = %1" ).arg( completed_uids[i] );
842 }
843 qu += query + " );";
844
845 qDebug( "query: %s", qu.latin1() );
846
847 OSQLRawQuery raw2( qu );
848 res = m_driver->query( &raw2 );
849 if ( res.state() == OSQLResult::Failure ) {
850 qWarning("OPimTodoAccessBackendSQL::removeAllCompleted():Failure in query: %s", qu.latin1() );
851 }
811} 852}
812 853
813 854
814QMap<QString, QString> OPimTodoAccessBackendSQL::requestCustom( int uid ) const 855QMap<QString, QString> OPimTodoAccessBackendSQL::requestCustom( int uid ) const
815{ 856{
816 QMap<QString, QString> customMap; 857 QMap<QString, QString> customMap;