diff --git a/server/src/search/searchmanager.cpp b/server/src/search/searchmanager.cpp --- a/server/src/search/searchmanager.cpp +++ b/server/src/search/searchmanager.cpp @@ -400,13 +400,33 @@ } QVariantList newMatchesVariant; - Q_FOREACH ( qint64 id, newMatches ) { - newMatchesVariant << id; - Collection::addPimItem( collection.id(), id ); + { + QVariantList _nm; + Q_FOREACH( qint64 id, newMatches ) { + _nm << id; + } + + if ( _nm.size() > 0 ) { + SelectQueryBuilder qb; + qb.addValueCondition( PimItem::idFullColumnName(), Query::In, _nm ); + if ( !qb.exec() ) { + return; + } + const QVector newItems = qb.result(); + QSet newIDs; + Q_FOREACH ( const PimItem &item, newItems ) { + newMatchesVariant << item.id(); + newIDs << item.id(); + Collection::addPimItem( collection.id(), item.id() ); + } + qDebug() << "Added" << newItems.count(); + newMatches = newMatches - newIDs; + } + if (!newMatches.isEmpty()) { + akDebug() << "Could not add items to search collection, because their item do not exist anymore in PimItem table:" << newMatches; + } } - qDebug() << "Added" << newMatches.count(); - if ( !existingTransaction && !DataStore::self()->commitTransaction() ) { akDebug() << "Failed to commit transaction"; return;