author | eilers <eilers> | 2004-04-12 17:46:08 (UTC) |
---|---|---|
committer | eilers <eilers> | 2004-04-12 17:46:08 (UTC) |
commit | 78a8f4f240bb57fe4942a30085e6a84fb3c4bac6 (patch) (unidiff) | |
tree | 23345a150cbc71ad8ad805fd1c8fa5522e10593f | |
parent | e8592cb2da1719d9ab1dc9e1144810af6af39e84 (diff) | |
download | opie-78a8f4f240bb57fe4942a30085e6a84fb3c4bac6.zip opie-78a8f4f240bb57fe4942a30085e6a84fb3c4bac6.tar.gz opie-78a8f4f240bb57fe4942a30085e6a84fb3c4bac6.tar.bz2 |
Implementing regexp search. OSearch works now..
todo: Implemented removal of finished todo items..
-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp | 24 | ||||
-rw-r--r-- | libopie2/opiepim/backend/otodoaccesssql.cpp | 75 |
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 | |||
@@ -212,45 +212,49 @@ void ODateBookAccessBackend_SQL::clear() | |||
212 | { | 212 | { |
213 | QString qu = "drop table datebook;"; | 213 | QString qu = "drop table datebook;"; |
214 | qu += "drop table custom_data;"; | 214 | qu += "drop table custom_data;"; |
215 | 215 | ||
216 | OSQLRawQuery raw( qu ); | 216 | OSQLRawQuery raw( qu ); |
217 | OSQLResult res = m_driver->query( &raw ); | 217 | OSQLResult res = m_driver->query( &raw ); |
218 | 218 | ||
219 | reload(); | 219 | reload(); |
220 | } | 220 | } |
221 | 221 | ||
222 | 222 | ||
223 | OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{ | 223 | OPimEvent 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 | ||
230 | OSQLResultItem resItem = res.first(); | 232 | OSQLResultItem resItem = res.first(); |
231 | 233 | ||
232 | // Create Map for date event and insert UID | 234 | // Create Map for date event and insert UID |
233 | QMap<int,QString> dateEventMap; | 235 | QMap<int,QString> dateEventMap; |
234 | dateEventMap.insert( OPimEvent::FUid, QString::number( uid ) ); | 236 | dateEventMap.insert( OPimEvent::FUid, QString::number( uid ) ); |
235 | 237 | ||
236 | // Now insert the data out of the columns into the map. | 238 | // Now insert the data out of the columns into the map. |
237 | QMapConstIterator<int, QString> it; | 239 | QMapConstIterator<int, QString> it; |
238 | for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ | 240 | for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ |
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.. |
249 | bool ODateBookAccessBackend_SQL::add( const OPimEvent& ev ) | 253 | bool ODateBookAccessBackend_SQL::add( const OPimEvent& ev ) |
250 | { | 254 | { |
251 | QMap<int,QString> eventMap = ev.toMap(); | 255 | QMap<int,QString> eventMap = ev.toMap(); |
252 | 256 | ||
253 | QString qu = "insert into datebook VALUES( " + QString::number( ev.uid() ); | 257 | QString qu = "insert into datebook VALUES( " + QString::number( ev.uid() ); |
254 | QMap<int, QString>::Iterator it; | 258 | QMap<int, QString>::Iterator it; |
255 | for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ | 259 | for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ |
256 | if ( !eventMap[it.key()].isEmpty() ) | 260 | if ( !eventMap[it.key()].isEmpty() ) |
@@ -366,26 +370,42 @@ OPimEvent::ValueList ODateBookAccessBackend_SQL::directRawRepeats() | |||
366 | OPimEvent::ValueList list; | 370 | OPimEvent::ValueList list; |
367 | 371 | ||
368 | for (uint i = 0; i < rawRepUids.count(); ++i ){ | 372 | for (uint i = 0; i < rawRepUids.count(); ++i ){ |
369 | list.append( find( rawRepUids[i] ) ); | 373 | list.append( find( rawRepUids[i] ) ); |
370 | } | 374 | } |
371 | 375 | ||
372 | return list; | 376 | return list; |
373 | } | 377 | } |
374 | 378 | ||
375 | 379 | ||
376 | QArray<int> ODateBookAccessBackend_SQL::matchRegexp( const QRegExp &r ) const | 380 | QArray<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 | ||
384 | QArray<int> ODateBookAccessBackend_SQL::extractUids( OSQLResult& res ) const | 404 | QArray<int> ODateBookAccessBackend_SQL::extractUids( OSQLResult& res ) const |
385 | { | 405 | { |
386 | qWarning("extractUids"); | 406 | qWarning("extractUids"); |
387 | QTime t; | 407 | QTime t; |
388 | t.start(); | 408 | t.start(); |
389 | OSQLResultItem::ValueList list = res.results(); | 409 | OSQLResultItem::ValueList list = res.results(); |
390 | OSQLResultItem::ValueList::Iterator it; | 410 | OSQLResultItem::ValueList::Iterator it; |
391 | QArray<int> ints(list.count() ); | 411 | QArray<int> ints(list.count() ); |
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 | |||
@@ -290,25 +290,26 @@ namespace { | |||
290 | + "');"; | 290 | + "');"; |
291 | } | 291 | } |
292 | 292 | ||
293 | 293 | ||
294 | qDebug("add %s", qu.latin1() ); | 294 | qDebug("add %s", qu.latin1() ); |
295 | return qu; | 295 | return qu; |
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() {} |
309 | ClearQuery::~ClearQuery() {} | 310 | ClearQuery::~ClearQuery() {} |
310 | QString ClearQuery::query()const { | 311 | QString ClearQuery::query()const { |
311 | QString qu = "drop table todolist"; | 312 | QString qu = "drop table todolist"; |
312 | return qu; | 313 | return qu; |
313 | } | 314 | } |
314 | FindQuery::FindQuery(int uid) | 315 | FindQuery::FindQuery(int uid) |
@@ -753,70 +754,110 @@ QArray<int> OPimTodoAccessBackendSQL::uids( const OSQLResult& res) const{ | |||
753 | 754 | ||
754 | int i = 0; | 755 | int i = 0; |
755 | for (it = list.begin(); it != list.end(); ++it ) { | 756 | for (it = list.begin(); it != list.end(); ++it ) { |
756 | ints[i] = (*it).data("uid").toInt(); | 757 | ints[i] = (*it).data("uid").toInt(); |
757 | i++; | 758 | i++; |
758 | } | 759 | } |
759 | return ints; | 760 | return ints; |
760 | } | 761 | } |
761 | 762 | ||
762 | QArray<int> OPimTodoAccessBackendSQL::matchRegexp( const QRegExp &r ) const | 763 | QArray<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 | } |
790 | QBitArray OPimTodoAccessBackendSQL::supports()const { | 790 | QBitArray OPimTodoAccessBackendSQL::supports()const { |
791 | 791 | ||
792 | return sup(); | 792 | return sup(); |
793 | } | 793 | } |
794 | 794 | ||
795 | QBitArray OPimTodoAccessBackendSQL::sup() const{ | 795 | QBitArray OPimTodoAccessBackendSQL::sup() const{ |
796 | 796 | ||
797 | QBitArray ar( OPimTodo::CompletedDate + 1 ); | 797 | QBitArray ar( OPimTodo::CompletedDate + 1 ); |
798 | ar.fill( true ); | 798 | ar.fill( true ); |
799 | ar[OPimTodo::CrossReference] = false; | 799 | ar[OPimTodo::CrossReference] = false; |
800 | ar[OPimTodo::State ] = false; | 800 | ar[OPimTodo::State ] = false; |
801 | ar[OPimTodo::Reminders] = false; | 801 | ar[OPimTodo::Reminders] = false; |
802 | ar[OPimTodo::Notifiers] = false; | 802 | ar[OPimTodo::Notifiers] = false; |
803 | ar[OPimTodo::Maintainer] = false; | 803 | ar[OPimTodo::Maintainer] = false; |
804 | 804 | ||
805 | return ar; | 805 | return ar; |
806 | } | 806 | } |
807 | 807 | ||
808 | void OPimTodoAccessBackendSQL::removeAllCompleted(){ | 808 | void 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 | ||
814 | QMap<QString, QString> OPimTodoAccessBackendSQL::requestCustom( int uid ) const | 855 | QMap<QString, QString> OPimTodoAccessBackendSQL::requestCustom( int uid ) const |
815 | { | 856 | { |
816 | QMap<QString, QString> customMap; | 857 | QMap<QString, QString> customMap; |
817 | 858 | ||
818 | FindCustomQuery query( uid ); | 859 | FindCustomQuery query( uid ); |
819 | OSQLResult res_custom = m_driver->query( &query ); | 860 | OSQLResult res_custom = m_driver->query( &query ); |
820 | 861 | ||
821 | if ( res_custom.state() == OSQLResult::Failure ) { | 862 | if ( res_custom.state() == OSQLResult::Failure ) { |
822 | qWarning("OSQLResult::Failure in find query !!"); | 863 | qWarning("OSQLResult::Failure in find query !!"); |