summaryrefslogtreecommitdiff
path: root/libopie2/opiepim
authorzecke <zecke>2002-10-13 02:22:58 (UTC)
committer zecke <zecke>2002-10-13 02:22:58 (UTC)
commitd96ce086c617b5b2efc5081cd10a43257a78f488 (patch) (side-by-side diff)
tree4f6b80b7295127bd82cc5fb8ffd1d532c42a396b /libopie2/opiepim
parent2ce86d9be1bbf99092348adf815578b110fe7289 (diff)
downloadopie-d96ce086c617b5b2efc5081cd10a43257a78f488.zip
opie-d96ce086c617b5b2efc5081cd10a43257a78f488.tar.gz
opie-d96ce086c617b5b2efc5081cd10a43257a78f488.tar.bz2
OPimAccessBackend nothing tried a isDirty()const ... but removed it
ORecordList uidAt(uint index ) added Speed Improvements at the SQL backend do not load the list of uids until it's really needed do not reload the uid list until it's really needed we got a bitfield m_dirty there...
Diffstat (limited to 'libopie2/opiepim') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/otodoaccesssql.cpp31
-rw-r--r--libopie2/opiepim/backend/otodoaccesssql.h3
-rw-r--r--libopie2/opiepim/core/opimaccesstemplate.h2
-rw-r--r--libopie2/opiepim/orecordlist.h5
4 files changed, 29 insertions, 12 deletions
diff --git a/libopie2/opiepim/backend/otodoaccesssql.cpp b/libopie2/opiepim/backend/otodoaccesssql.cpp
index a059dab..ea8b3c9 100644
--- a/libopie2/opiepim/backend/otodoaccesssql.cpp
+++ b/libopie2/opiepim/backend/otodoaccesssql.cpp
@@ -241,7 +241,7 @@ namespace {
};
OTodoAccessBackendSQL::OTodoAccessBackendSQL( const QString& file )
- : OTodoAccessBackend(), m_dict(15)
+ : OTodoAccessBackend(), m_dict(15), m_dirty(true)
{
QString fi = file;
if ( fi.isEmpty() )
@@ -261,8 +261,7 @@ bool OTodoAccessBackendSQL::load(){
CreateQuery creat;
OSQLResult res = m_driver->query(&creat );
- update();
- qWarning("loaded %d", m_uids.count() );
+ m_dirty = true;
return true;
}
bool OTodoAccessBackendSQL::reload(){
@@ -273,6 +272,9 @@ bool OTodoAccessBackendSQL::save(){
return m_driver->close();
}
QArray<int> OTodoAccessBackendSQL::allRecords()const {
+ if (m_dirty )
+ update();
+
return m_uids;
}
QArray<int> OTodoAccessBackendSQL::queryByExample( const OTodo& , int ){
@@ -303,7 +305,7 @@ OTodo OTodoAccessBackendSQL::find( int uid, const QArray<int>& ints,
break;
/* reverse */
case 1:
- for (uint i = cur; i >= 0 && size < 8; i-- ) {
+ for (uint i = cur; i != 0 && size < 8; i-- ) {
search[size] = ints[i];
size++;
}
@@ -342,7 +344,7 @@ bool OTodoAccessBackendSQL::remove( int uid ) {
if ( res.state() == OSQLResult::Failure )
return false;
- update();
+ m_dirty = true;
return true;
}
/*
@@ -352,7 +354,9 @@ bool OTodoAccessBackendSQL::remove( int uid ) {
*/
bool OTodoAccessBackendSQL::replace( const OTodo& t) {
remove( t.uid() );
- return add(t);
+ bool b= add(t);
+ m_dirty = false; // we changed some stuff but the UID stayed the same
+ return b;
}
QArray<int> OTodoAccessBackendSQL::overDue() {
OverDueQuery qu;
@@ -369,6 +373,7 @@ QArray<int> OTodoAccessBackendSQL::effectiveToDos( const QDate& s,
*/
QArray<int> OTodoAccessBackendSQL::sorted( bool asc, int sortOrder,
int sortFilter, int cat ) {
+ qWarning("sorted %d, %d", asc, sortOrder );
QString query;
query = "select uid from todolist WHERE ";
@@ -421,8 +426,11 @@ QArray<int> OTodoAccessBackendSQL::sorted( bool asc, int sortOrder,
query += "DueDate";
break;
}
- if ( !asc )
+
+ if ( !asc ) {
+ qWarning("not ascending!");
query += " DESC";
+ }
qWarning( query );
OSQLRawQuery raw(query );
@@ -501,13 +509,18 @@ void OTodoAccessBackendSQL::fillDict() {
m_dict.insert("HasAlarmDateTime",new int(OTodo::HasAlarmDateTime) );
m_dict.insert("AlarmDateTime", new int(OTodo::AlarmDateTime) );
}
-void OTodoAccessBackendSQL::update() {
+/*
+ * need to be const so let's fool the
+ * compiler :(
+ */
+void OTodoAccessBackendSQL::update()const {
+ ((OTodoAccessBackendSQL*)this)->m_dirty = false;
LoadQuery lo;
OSQLResult res = m_driver->query(&lo);
if ( res.state() != OSQLResult::Success )
return;
- m_uids = uids( res );
+ ((OTodoAccessBackendSQL*)this)->m_uids = uids( res );
}
QArray<int> OTodoAccessBackendSQL::uids( const OSQLResult& res) const{
diff --git a/libopie2/opiepim/backend/otodoaccesssql.h b/libopie2/opiepim/backend/otodoaccesssql.h
index c1aa2ed..0f6dd2c 100644
--- a/libopie2/opiepim/backend/otodoaccesssql.h
+++ b/libopie2/opiepim/backend/otodoaccesssql.h
@@ -32,7 +32,7 @@ public:
QArray<int> sorted(bool asc, int sortOrder, int sortFilter, int cat );
private:
- void update();
+ void update()const;
void fillDict();
inline bool date( QDate& date, const QString& )const;
inline OTodo todo( const OSQLResult& )const;
@@ -43,6 +43,7 @@ private:
QAsciiDict<int> m_dict;
OSQLDriver* m_driver;
QArray<int> m_uids;
+ bool m_dirty : 1;
};
diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h
index 92d7192..a0d8f63 100644
--- a/libopie2/opiepim/core/opimaccesstemplate.h
+++ b/libopie2/opiepim/core/opimaccesstemplate.h
@@ -184,12 +184,10 @@ T OPimAccessTemplate<T>::find( int uid, const QArray<int>& ar,
*/
// qWarning("find it now %d", uid );
if (m_cache.contains( uid ) ) {
- qWarning("m cache contains %d", uid);
return m_cache.find( uid );
}
T t = m_backEnd->find( uid, ar, current, dir );
- qWarning("found it and cache it now %d", uid);
cache( t );
return t;
}
diff --git a/libopie2/opiepim/orecordlist.h b/libopie2/opiepim/orecordlist.h
index 08f5c85..5404910 100644
--- a/libopie2/opiepim/orecordlist.h
+++ b/libopie2/opiepim/orecordlist.h
@@ -109,6 +109,7 @@ public:
uint count()const;
T operator[]( uint i );
+ int uidAt(uint i );
// FIXME implemenent remove
/*
ConstIterator begin()const;
@@ -262,4 +263,8 @@ T ORecordList<T>::operator[]( uint i ) {
/* forward */
return m_acc->find( m_ids[i], m_ids, i );
}
+template <class T>
+int ORecordList<T>::uidAt( uint i ) {
+ return m_ids[i];
+}
#endif