author | eilers <eilers> | 2004-09-05 15:46:47 (UTC) |
---|---|---|
committer | eilers <eilers> | 2004-09-05 15:46:47 (UTC) |
commit | 97a40bb7f35a8323dd99712bf014387add283177 (patch) (side-by-side diff) | |
tree | ec50fbb430f00c86af6ca5bd7c6b94fa29cfe3b1 /libopie2 | |
parent | f8b02e2ae752ce98b8840735260c4e9b0ff25cb8 (diff) | |
download | opie-97a40bb7f35a8323dd99712bf014387add283177.zip opie-97a40bb7f35a8323dd99712bf014387add283177.tar.gz opie-97a40bb7f35a8323dd99712bf014387add283177.tar.bz2 |
Fixing really stupid caching bug.. Thanks to zecke who found it..
Removed cachefind in backend which isn't needed anymore and not a goot idea...
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp | 5 | ||||
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend_sql.h | 2 | ||||
-rw-r--r-- | libopie2/opiepim/backend/opimaccessbackend.h | 18 | ||||
-rw-r--r-- | libopie2/opiepim/backend/otodoaccesssql.cpp | 20 | ||||
-rw-r--r-- | libopie2/opiepim/backend/otodoaccesssql.h | 2 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimaccesstemplate.h | 4 |
6 files changed, 22 insertions, 29 deletions
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp index abfd944..221e977 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp +++ b/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp @@ -843,4 +843,5 @@ OPimContact OPimContactAccessBackend_SQL::requestContactsAndCache( int uid, cons // by using the cache.. QArray<int> cachelist = uidlist; + OPimContact retContact; odebug << "Reqest and cache" << cachelist.size() << "elements !" << oendl; @@ -866,4 +867,6 @@ OPimContact OPimContactAccessBackend_SQL::requestContactsAndCache( int uid, cons odebug << "Caching uid: " << contact.uid() << oendl; cache( contact ); + if ( contact.uid() == uid ) + retContact = contact; resItem = res_noncustom.next(); } while ( ! res_noncustom.atEnd() ); //atEnd() is true if we are past(!) the list !! @@ -875,5 +878,5 @@ OPimContact OPimContactAccessBackend_SQL::requestContactsAndCache( int uid, cons << " ms, mapping: " << t3needed << " ms" << oendl; - return cacheFind( uid ); + return retContact; } diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_sql.h b/libopie2/opiepim/backend/ocontactaccessbackend_sql.h index 4f81735..28d9746 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend_sql.h +++ b/libopie2/opiepim/backend/ocontactaccessbackend_sql.h @@ -74,5 +74,5 @@ class OPimContactAccessBackend_SQL : public OPimContactAccessBackend { OPimContact find ( int uid ) const; - OPimContact find( int uid, const QArray<int>&, uint cur, Frontend::CacheDirection ) const; + OPimContact find( int uid, const QArray<int>& items, uint cur, Frontend::CacheDirection ) const; QArray<int> queryByExample ( const OPimContact &query, int settings, diff --git a/libopie2/opiepim/backend/opimaccessbackend.h b/libopie2/opiepim/backend/opimaccessbackend.h index 15a7b7f..26af762 100644 --- a/libopie2/opiepim/backend/opimaccessbackend.h +++ b/libopie2/opiepim/backend/opimaccessbackend.h @@ -133,11 +133,4 @@ protected: /** - * Returns the element with given uid out of the cache. - * Returns empty element if nothing was found. - * <b>Attention:</b> This just works if we have a frontend which contains the cache ! - */ - T cacheFind( int uid ) const; - - /** * use a prime number here! */ @@ -174,13 +167,4 @@ void OPimAccessBackend<T>::cache( const T& t )const { } -template <class T> -T OPimAccessBackend<T>::cacheFind( int uid )const { - if ( ! m_front ){ - qWarning ( "No frontend assigned ! Therefore we cannot access the cache to return the right element!" ); - return T(); - } - - return m_front->cacheFind( uid ); -} template <class T> @@ -192,5 +176,5 @@ template <class T> T OPimAccessBackend<T>::find( int uid, const QArray<int>&, uint, typename Frontend::CacheDirection ) const{ - qDebug( "*** Lookahead feature not supported. Fallback to default find!" ); + qDebug( "*** Lookahead feature not supported. Fallback to default find!!" ); return find( uid ); } diff --git a/libopie2/opiepim/backend/otodoaccesssql.cpp b/libopie2/opiepim/backend/otodoaccesssql.cpp index 12a8bea..4e3e47b 100644 --- a/libopie2/opiepim/backend/otodoaccesssql.cpp +++ b/libopie2/opiepim/backend/otodoaccesssql.cpp @@ -455,5 +455,5 @@ QArray<int> OPimTodoAccessBackendSQL::queryByExample( const OPimTodo& , int, con OPimTodo OPimTodoAccessBackendSQL::find(int uid ) const{ FindQuery query( uid ); - return todo( m_driver->query(&query) ); + return parseResultAndCache( uid, m_driver->query(&query) ); } @@ -493,6 +493,5 @@ OPimTodo OPimTodoAccessBackendSQL::find( int uid, const QArray<int>& ints, return to; - todo( res ); //FIXME: Don't like polymorphism here. It makes the code hard to read here..(eilers) - return cacheFind( uid ); + return parseResultAndCache( uid, res ); } @@ -631,5 +630,5 @@ bool OPimTodoAccessBackendSQL::date( QDate& da, const QString& str ) const{ } } -OPimTodo OPimTodoAccessBackendSQL::todo( const OSQLResult& res ) const{ +OPimTodo OPimTodoAccessBackendSQL::parseResultAndCache( int uid, const OSQLResult& res ) const{ if ( res.state() == OSQLResult::Failure ) { OPimTodo to; @@ -637,4 +636,6 @@ OPimTodo OPimTodoAccessBackendSQL::todo( const OSQLResult& res ) const{ } + OPimTodo retTodo; + OSQLResultItem::ValueList list = res.results(); OSQLResultItem::ValueList::Iterator it = list.begin(); @@ -646,7 +647,10 @@ OPimTodo OPimTodoAccessBackendSQL::todo( const OSQLResult& res ) const{ for ( ; it != list.end(); ++it ) { odebug << "caching" << oendl; - cache( todo( (*it) ) ); + OPimTodo newTodo = todo( (*it) ); + cache( newTodo ); + if ( newTodo.uid() == uid ) + retTodo = newTodo; } - return to; + return retTodo; } OPimTodo OPimTodoAccessBackendSQL::todo( OSQLResultItem& item )const { @@ -708,7 +712,9 @@ OPimTodo OPimTodoAccessBackendSQL::todo( OSQLResultItem& item )const { return to; } + +// FIXME: Where is the difference to "find" ? (eilers) OPimTodo OPimTodoAccessBackendSQL::todo( int uid )const { FindQuery find( uid ); - return todo( m_driver->query(&find) ); + return parseResultAndCache( uid, m_driver->query(&find) ); } /* diff --git a/libopie2/opiepim/backend/otodoaccesssql.h b/libopie2/opiepim/backend/otodoaccesssql.h index 0cc7722..415f791 100644 --- a/libopie2/opiepim/backend/otodoaccesssql.h +++ b/libopie2/opiepim/backend/otodoaccesssql.h @@ -76,5 +76,5 @@ private: void fillDict(); inline bool date( QDate& date, const QString& )const; - inline OPimTodo todo( const Opie::DB::OSQLResult& )const; + inline OPimTodo parseResultAndCache( int uid, const Opie::DB::OSQLResult& )const; inline OPimTodo todo( Opie::DB::OSQLResultItem& )const; inline QArray<int> uids( const Opie::DB::OSQLResult& )const; diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h index 6f01b46..7ab1ea5 100644 --- a/libopie2/opiepim/core/opimaccesstemplate.h +++ b/libopie2/opiepim/core/opimaccesstemplate.h @@ -120,10 +120,10 @@ public: * find the OPimRecord uid */ - virtual T find( int uid )const; + T find( int uid )const; /** * read ahead cache find method ;) */ - virtual T find( int uid, const QArray<int>&, + T find( int uid, const QArray<int>&, uint current, typename OTemplateBase<T>::CacheDirection dir = OTemplateBase<T>::Forward )const; |