Projects
Kontact:4.13:Git
akonadi
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 13
View file
_service:set_version:akonadi.spec
Changed
@@ -12,7 +12,7 @@ Summary: PIM Storage Service Name: akonadi -Version: 1.12.42.99.git20150630.ef27655 +Version: 1.12.42.99.git20150706.9a15737 # Magic provides since this is what ends up in the pkgconfig Provides: %{name}%{?_isa} = %{version} Release: 0%{?dist}
View file
_service:recompress:tar_scm:akonadi-1.12.42.99.git20150630.ef27655.tar.gz/server/src/storagejanitor.cpp -> _service:recompress:tar_scm:akonadi-1.12.42.99.git20150706.9a15737.tar.gz/server/src/storagejanitor.cpp
Changed
@@ -117,6 +117,9 @@ inform( "Looking for dirty objects..." ); findDirtyObjects(); + inform( "Looking for rid-duplicates not matching the content mime-type of the parent collection" ); + findRIDDuplicates(); + /* TODO some ideas for further checks: * the collection tree is non-cyclic * content type constraints of collections are not violated @@ -448,6 +451,50 @@ inform( QLatin1Literal( "Found " ) + QString::number( dirtyItems.size() ) + QLatin1Literal( " dirty items." ) ); } +void StorageJanitor::findRIDDuplicates() +{ + QueryBuilder qb( Collection::tableName(), QueryBuilder::Select ); + qb.addColumn( Collection::idColumn() ); + qb.addColumn( Collection::nameColumn() ); + qb.exec(); + + while ( qb.query().next() ) { + const Collection::Id id = qb.query().value( 0 ).value<Collection::Id>(); + const QString name = qb.query().value( 1 ).toString(); + inform( QLatin1Literal( "Checking " ) + name); + + QueryBuilder duplicates( PimItem::tableName(), QueryBuilder::Select ); + duplicates.addColumn( PimItem::remoteIdColumn() ); + duplicates.addColumn( QLatin1Literal( "count(" ) + PimItem::idColumn() + QLatin1Literal( ") as cnt" ) ); + duplicates.addValueCondition( PimItem::remoteIdColumn(), Query::IsNot, QVariant() ); + duplicates.addValueCondition( PimItem::collectionIdColumn(), Query::Equals, id ); + duplicates.addGroupColumn( PimItem::remoteIdColumn() ); + duplicates.addValueCondition( QLatin1Literal( "count(" ) + PimItem::idColumn() + QLatin1Literal( ")" ), Query::Greater, 1, QueryBuilder::HavingCondition ); + duplicates.exec(); + + Akonadi::Server::Collection col = Akonadi::Server::Collection::retrieveById(id); + const QVector<Akonadi::Server::MimeType> contentMimeTypes = col.mimeTypes(); + QVariantList contentMimeTypesVariantList; + Q_FOREACH (const Akonadi::Server::MimeType &mimeType, contentMimeTypes) { + contentMimeTypesVariantList << mimeType.id(); + } + while ( duplicates.query().next() ) { + const QString rid = duplicates.query().value(0).toString(); + inform( QLatin1Literal( "Found duplicates " ) + rid); + + QueryBuilder items( PimItem::tableName(), QueryBuilder::Delete ); + items.addColumn( PimItem::idColumn() ); + items.addColumn( PimItem::remoteIdColumn() ); + items.addColumn( PimItem::mimeTypeIdColumn() ); + items.addValueCondition( PimItem::remoteIdColumn(), Query::Equals, rid ); + items.addValueCondition( PimItem::mimeTypeIdColumn(), Query::NotIn, contentMimeTypesVariantList ); + if ( !items.exec() ) { + akDebug() << "Error while deleting duplicates" << items.query().lastError().text(); + } + } + } +} + void StorageJanitor::vacuum() { const DbType::Type dbType = DbType::type( DataStore::self()->database() );
View file
_service:recompress:tar_scm:akonadi-1.12.42.99.git20150630.ef27655.tar.gz/server/src/storagejanitor.h -> _service:recompress:tar_scm:akonadi-1.12.42.99.git20150706.9a15737.tar.gz/server/src/storagejanitor.h
Changed
@@ -112,6 +112,13 @@ void findDirtyObjects(); /** + * Look for duplicates by RID. + * + * ..and remove the one that doesn't match the parent collections content mimetype. + */ + void findRIDDuplicates(); + + /** * Check whether part sizes match what's in database. * * If SizeTreshold has change, it will move parts from or to database
View file
_service:set_version:akonadi.dsc
Changed
@@ -2,7 +2,7 @@ Source: akonadi Binary: akonadi-server, libakonadiprotocolinternals1, libakonadi-dev, akonadi-backend-mysql, akonadi-backend-postgresql, akonadi-backend-sqlite, akonadi-dbg Architecture: any all -Version: 1.12.42.99.git20150630.ef27655 +Version: 1.12.42.99.git20150706.9a15737 Maintainer: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Uploaders: Sune Vuorela <debian@pusling.com>, Modestas Vainius <modax@debian.org>, Fathi Boudra <fabo@debian.org>, Maximiliano Curia <maxy@debian.org> Homepage: http://pim.kde.org/akonadi
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.