From 55dc6d141a20e2438308214ab60c18e282dd7b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Vr=C3=A1til?= Date: Mon, 8 Dec 2014 10:33:51 +0100 Subject: [PATCH 25/30] Avoid repeated calls to PimItem::flags() and PimItem::tags() The queries results are not cached, so each call to those methods runs an SQL query. At least in case of flags, this reduced the number of queries to one query per changed item. --- server/src/storage/datastore.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/src/storage/datastore.cpp b/server/src/storage/datastore.cpp index c9fa0c3..035395e 100644 --- a/server/src/storage/datastore.cpp +++ b/server/src/storage/datastore.cpp @@ -220,7 +220,8 @@ bool DataStore::setItemsFlags( const PimItem::List &items, const QVector & setBoolPtr( flagsChanged, false ); Q_FOREACH ( const PimItem &item, items ) { - Q_FOREACH ( const Flag &flag, item.flags() ) { + const Flag::List itemFlags = item.flags(); + Q_FOREACH ( const Flag &flag, itemFlags ) { if ( !flags.contains( flag ) ) { removedFlags << flag.name().toLatin1(); Query::Condition cond; @@ -231,7 +232,7 @@ bool DataStore::setItemsFlags( const PimItem::List &items, const QVector & } Q_FOREACH ( const Flag &flag, flags ) { - if ( !item.flags().contains( flag ) ) { + if ( !itemFlags.contains( flag ) ) { addedFlags << flag.name().toLatin1(); insIds << item.id(); insFlags << flag.id(); @@ -414,7 +415,8 @@ bool DataStore::setItemsTags( const PimItem::List &items, const Tag::List &tags, setBoolPtr( tagsChanged, false ); Q_FOREACH ( const PimItem &item, items ) { - Q_FOREACH ( const Tag &tag, item.tags() ) { + const Tag::List itemTags = item.tags(); + Q_FOREACH ( const Tag &tag, itemTags ) { if ( !tags.contains( tag ) ) { // Remove tags from items that had it set removedTags << tag.id(); @@ -426,7 +428,7 @@ bool DataStore::setItemsTags( const PimItem::List &items, const Tag::List &tags, } Q_FOREACH ( const Tag &tag, tags ) { - if ( !item.tags().contains( tag ) ) { + if ( !itemTags.contains( tag ) ) { // Add tags to items that did not have the tag addedTags << tag.id(); insIds << item.id(); -- 2.1.0