SVN commit 802868 by staniek: Add relatively stable and working implementation of SQLite-based storage for KMail indices *we call the new implementation '''SQLite mode''' for short *SQLite 3.5.4 is used, as provided by emerge sqlite module; we should not allow using much older versions of sqlite, e.g. 3.1 because of file format differences *we are using '''one''' .index.db file per account, not folder (NOTE: currently that's per folder...) *kmailprivate links to sqlite library for SQLite mode, and KMAIL_SQLITE_INDEX is defined to enable #ifdef'd code *kmfolderindex_sqlite.cpp is created and edited as a copy of kmfolderindex.cpp; kmfolderindex.cpp #includes kmfolderindex_sqlite.cpp for SQLite mode and then skips its own code completely *kmfolderindex_common.cpp is always included by kmfolderindex.cpp; implements KMFolderIndex::openInternal() and KMFolderIndex::createInternal() *kmfolderindex.h is a common header for both kmfolderindex*.cpp implementations ==KMFolderIndex== **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) **INDEX_VERSION is written and checked using 'PRAGMA user_version = ' command [http://sqlite.org/pragma.html] **we do not use temporary filenames, e.g. in writeIndex(): SQLite takes care about safe storage **updateIndex(): no changes, we're changing implementation of KMMsgBase::syncIndexString() and writeIndex() instead *added openDatabase( int mode ) for SQLite mode *readIndex() implemented for SQLite mode - uses SELECT command on messages table *readIndexHeader() uses "PRAGMA user_version" sqlite command *writeIndex() implemented for SQLite mode - uses INSERT command on messages table, within transaction *common code from {KMFolderMbox|KMFolderMaildir}::open( const char * ) moved to KMFolderIndex::openInternal() *common code from {KMFolderMbox|KMFolderMaildir}::create() moved to KMFolderIndex::createInternal() ==FolderStorage== *as implementation of KMFolderIndex::indexLocation() is moved to FolderStorage (before FolderStorage only had it as abstract method); FolderStorage::idsLocation() and FolderStorage::sortedLocation() are added to avoid performing the math like ''mFolder->indexLocation() + ".sorted"'' *added QString location(const QString& suffix) - returns full path to .index, .ids or .sorted file (depending on the suffix) ==KMMsgBase== **added char* mData for SQLite mode only (and a getter/setter) **getStringPart() and getLongPart() share code between modes now: only cosmetic changes applied ==KMFolderDir== *reload(): skip *.index.db files M +9 -7 CMakeLists.txt M +32 -7 folderstorage.cpp M +10 -1 folderstorage.h M +10 -0 kmfolder.cpp M +7 -1 kmfolder.h M +2 -2 kmfolderdir.cpp M +49 -76 kmfolderindex.cpp M +21 -4 kmfolderindex.h M +225 -219 kmfolderindex_sqlite.cpp M +47 -50 kmfoldermaildir.cpp M +76 -45 kmfoldermbox.cpp M +1 -10 kmfoldersearch.cpp M +2 -2 kmheaders.cpp M +1 -1 kmheaders.h M +56 -40 kmmsgbase.cpp M +11 -0 kmmsgbase.h M +1 -1 kmmsgdict.cpp M +12 -0 kmmsginfo.cpp M +4 -0 kmmsginfo.h