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