author | eilers <eilers> | 2004-04-12 17:46:08 (UTC) |
---|---|---|
committer | eilers <eilers> | 2004-04-12 17:46:08 (UTC) |
commit | 78a8f4f240bb57fe4942a30085e6a84fb3c4bac6 (patch) (side-by-side diff) | |
tree | 23345a150cbc71ad8ad805fd1c8fa5522e10593f /libopie2 | |
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 @@ -216,16 +216,18 @@ void ODateBookAccessBackend_SQL::clear() OSQLRawQuery raw( qu ); OSQLResult res = m_driver->query( &raw ); reload(); } OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{ + qDebug( "ODateBookAccessBackend_SQL::find( %d )", uid ); + QString qu = "select *"; qu += "from datebook where uid = " + QString::number(uid); OSQLRawQuery raw( qu ); OSQLResult res = m_driver->query( &raw ); OSQLResultItem resItem = res.first(); @@ -237,16 +239,18 @@ OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{ QMapConstIterator<int, QString> it; for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ dateEventMap.insert( m_reverseFieldMap[*it], resItem.data( *it ) ); } // Last step: Put map into date event, add custom map and return it OPimEvent retDate( dateEventMap ); retDate.setExtraMap( requestCustom( uid ) ); + + qDebug( "ODateBookAccessBackend_SQL::find() end", uid ); return retDate; } // FIXME: Speed up update of uid's.. bool ODateBookAccessBackend_SQL::add( const OPimEvent& ev ) { QMap<int,QString> eventMap = ev.toMap(); @@ -370,18 +374,34 @@ OPimEvent::ValueList ODateBookAccessBackend_SQL::directRawRepeats() } return list; } QArray<int> ODateBookAccessBackend_SQL::matchRegexp( const QRegExp &r ) const { - QArray<int> null; - return null; + + QString qu = "SELECT uid FROM datebook WHERE ("; + + // Do it make sense to search other fields, too ? + qu += " rlike(\""+ r.pattern() + "\", Location ) OR"; + qu += " rlike(\""+ r.pattern() + "\", Note )"; + + qu += " )"; + + qDebug( "query: %s", qu.latin1() ); + + OSQLRawQuery raw( qu ); + OSQLResult res = m_driver->query( &raw ); + + return extractUids( res ); + + + } /* ===== Private Functions ========================================== */ QArray<int> ODateBookAccessBackend_SQL::extractUids( OSQLResult& res ) const { qWarning("extractUids"); QTime t; 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 @@ -294,17 +294,18 @@ namespace { qDebug("add %s", qu.latin1() ); return qu; } RemoveQuery::RemoveQuery(int uid ) : OSQLQuery(), m_uid( uid ) {} RemoveQuery::~RemoveQuery() {} QString RemoveQuery::query()const { - QString qu = "DELETE from todolist where uid = " + QString::number(m_uid); + QString qu = "DELETE FROM todolist WHERE uid = " + QString::number(m_uid) + " ;"; + qu += "DELETE FROM custom_data WHERE uid = " + QString::number(m_uid); return qu; } ClearQuery::ClearQuery() : OSQLQuery() {} ClearQuery::~ClearQuery() {} QString ClearQuery::query()const { @@ -757,40 +758,39 @@ QArray<int> OPimTodoAccessBackendSQL::uids( const OSQLResult& res) const{ i++; } return ints; } QArray<int> OPimTodoAccessBackendSQL::matchRegexp( const QRegExp &r ) const { -#warning OPimTodoAccessBackendSQL::matchRegexp() not implemented !! - #if 0 + QArray<int> empty; + return empty; - Copied from xml-backend by not adapted to sql (eilers) +#else + QString qu = "SELECT uid FROM todolist WHERE ("; - QArray<int> m_currentQuery( m_events.count() ); - uint arraycounter = 0; + // Do it make sense to search other fields, too ? + qu += " rlike(\""+ r.pattern() + "\",\"description\") OR"; + qu += " rlike(\""+ r.pattern() + "\",\"summary\")"; + + qu += ")"; + qDebug( "query: %s", qu.latin1() ); + OSQLRawQuery raw( qu ); + OSQLResult res = m_driver->query( &raw ); - QMap<int, OPimTodo>::ConstIterator it; - for (it = m_events.begin(); it != m_events.end(); ++it ) { - if ( it.data().match( r ) ) - m_currentQuery[arraycounter++] = it.data().uid(); + return uids( res ); - } - // Shrink to fit.. - m_currentQuery.resize(arraycounter); - return m_currentQuery; #endif - QArray<int> empty; - return empty; + } QBitArray OPimTodoAccessBackendSQL::supports()const { return sup(); } QBitArray OPimTodoAccessBackendSQL::sup() const{ @@ -801,18 +801,59 @@ QBitArray OPimTodoAccessBackendSQL::sup() const{ ar[OPimTodo::Reminders] = false; ar[OPimTodo::Notifiers] = false; ar[OPimTodo::Maintainer] = false; return ar; } void OPimTodoAccessBackendSQL::removeAllCompleted(){ -#warning OPimTodoAccessBackendSQL::removeAllCompleted() not implemented !! + // First we need the uids from all entries which are + // completed. Then, we just have to remove them... + + QString qu = "SELECT uid FROM todolist WHERE completed = 1"; + + OSQLRawQuery raw( qu ); + OSQLResult res = m_driver->query( &raw ); + + QArray<int> completed_uids = uids( res ); + qDebug( "Number of completed: %d", completed_uids.size() ); + + if ( completed_uids.size() == 0 ) + return; + + qu = "DELETE FROM todolist WHERE ("; + QString query; + + for ( int i = 0; i < completed_uids.size(); i++ ){ + if ( !query.isEmpty() ) + query += " OR "; + query += QString( "uid = %1" ).arg( completed_uids[i] ); + } + qu += query + " );"; + + // Put remove of custom entries in this query to speed up.. + qu += "DELETE FORM custom_data WHERE ("; + query = ""; + + for ( int i = 0; i < completed_uids.size(); i++ ){ + if ( !query.isEmpty() ) + query += " OR "; + query += QString( "uid = %1" ).arg( completed_uids[i] ); + } + qu += query + " );"; + + qDebug( "query: %s", qu.latin1() ); + + OSQLRawQuery raw2( qu ); + res = m_driver->query( &raw2 ); + if ( res.state() == OSQLResult::Failure ) { + qWarning("OPimTodoAccessBackendSQL::removeAllCompleted():Failure in query: %s", qu.latin1() ); + } } QMap<QString, QString> OPimTodoAccessBackendSQL::requestCustom( int uid ) const { QMap<QString, QString> customMap; FindCustomQuery query( uid ); |