(→KMFolderIndex) |
(→KMFolderIndex) |
||
| Line 15: | Line 15: | ||
==KMFolderIndex== | ==KMFolderIndex== | ||
[http://api.kde.org/4.x-api/kdepim-apidocs/kmail/html/classKMFolderIndex.html api docs] | [http://api.kde.org/4.x-api/kdepim-apidocs/kmail/html/classKMFolderIndex.html api docs] | ||
| − | *2008-04-23 | + | *2008-04-23..25 |
**mIndexId unused - removed as well as serialIndexId() | **mIndexId unused - removed as well as serialIndexId() | ||
**indexLocation(): added .db suffix to indicate the index is sqlite-based, implementation moved to FolderStorage (before FolderStorage only had it as abstract method); also added FolderStorage::idsLocation() and FolderStorage::sortedLocation() to avoid performing the math like ''mFolder->indexLocation() + ".sorted"'' | **indexLocation(): added .db suffix to indicate the index is sqlite-based, implementation moved to FolderStorage (before FolderStorage only had it as abstract method); also added FolderStorage::idsLocation() and FolderStorage::sortedLocation() to avoid performing the math like ''mFolder->indexLocation() + ".sorted"'' | ||
There are issues with locking index files for KMail folders and mmap()/munmap() operations on Windows. Therefore, SQLite-based indices are in development. This page presents detailed development notes for this task.
Started: jstaniek 11:35, 23 April 2008 (CEST)
Contents |
| TOPIC | PORTED | TESTED | NOTES |
|---|---|---|---|
| QString KMFolderIndex::indexLocation() | yes | added .db suffix to indicate the index is sqlite-based | |
| int KMFolderIndex::updateIndex() | yes | no changes | |
| int KMFolderIndex::writeIndex( bool createEmptyIndex ) | yes | creates db; creates tables messages table, insert messages to messages table, encoded as blobs using KMMsgBase::asIndexString(); header is not needed, but INDEX_VERSION is saved using PRAGMA user_version; byte order info is not saved: every integer is written using network order or as string | |
| bool KMFolderIndex::readIndex() | |||
| int KMFolderIndex::count(bool cache) | yes | no changes | |
| bool KMFolderIndex::readIndexHeader(int *gv) | |||
| bool KMFolderIndex::updateIndexStreamPtr(bool) | |||
| KMFolderIndex::IndexStatus KMFolderIndex::indexStatus() | |||
| void KMFolderIndex::truncateIndex() | use "DELETE FROM..." | ||
| void KMFolderIndex::fillMessageDict() | yes | no change as it just inserts messages from KMFolderIndex::mMsgList into KMMsgDict | |
| KMMsgInfo* KMFolderIndex::setIndexEntry( int idx, KMMessage *msg ) | yes | no change as it just sets creates a new KMMsgInfo object and inserts it into KMFolderIndex::mMsgList | |
| bool KMFolderIndex::recreateIndex() | yes | no changes as it just calls createIndexFromContents() and readIndex() | |
| off_t KMFolderIndex::mHeaderOffset | replace its public use (e.g. in KMFolderIndex::truncateIndex()) with additional bool indexOpened() | ||
| FILE* KMFolderIndex::mIndexStream, uchar* mIndexStreamPtr, size_t mIndexStreamPtrLength, bool mIndexSwapByteOrder, int mIndexSizeOfLong | these members are unused for SQLite mode because are related to file strorage; moreover byte order and size of long is handled by SQLite in a portable way | ||
| bool KMMsgBase::syncIndexString() const | use 'UPDATE' SQL command to store the message serialized to a BLOB; KMMsgBase::getStringPart() will read it | ||
| QString KMMsgBase::getStringPart(MsgPartType t) const | use 'SELECT' SQL command, harmonize with syncIndexString() implementation |