[SCM] Akonadi packaging branch, master, updated. debian/1.10.3-1-11-g44b8950
Maximiliano Curia
maxy at moszumanska.debian.org
Fri Dec 6 20:12:56 UTC 2013
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-req/akonadi.git;a=commitdiff;h=7495335
The following commit has been merged in the master branch:
commit 7495335c9de0056fe55953395e9805b68ba788b6
Author: Maximiliano Curia <maxy at debian.org>
Date: Fri Dec 6 18:25:55 2013 +0100
New upstream patch: dont_do_redundant_flag_changes.diff
---
debian/changelog | 1 +
debian/patches/dont_do_redundant_flag_changes.diff | 110 +++++++++++++++++++++
debian/patches/series | 1 +
3 files changed, 112 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index fa5ca4a..4b098b5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,7 @@ akonadi (1.11.0-1) UNRELEASED; urgency=low
* Update subst var for akonadi-backend-mysql.
* Add libxml2-utils to the build deps, to be used in the tests.
* Bump Standards-Version to 3.9.5, no changes needed.
+ * New upstream patch: dont_do_redundant_flag_changes.diff
-- Maximiliano Curia <maxy at debian.org> Fri, 06 Dec 2013 16:24:12 +0100
diff --git a/debian/patches/dont_do_redundant_flag_changes.diff b/debian/patches/dont_do_redundant_flag_changes.diff
new file mode 100644
index 0000000..bd55420
--- /dev/null
+++ b/debian/patches/dont_do_redundant_flag_changes.diff
@@ -0,0 +1,110 @@
+commit faabb920d8efe5c35bba070396b8df608c5a910a
+Author: Tomáš Trnka <tomastrnka at gmx.com>
+Date: Sun Dec 1 18:39:12 2013 +0100
+
+ Don't do redundant flag changes in setItemsFlags
+
+ Instead of removing all flags and then adding the requested ones
+ back, figure out which flags are actually getting added or removed
+ and only apply those changes.
+
+ Everything is still carried out in up to two DB queries.
+
+ Additionally, don't send out the change notification if nothing
+ has actually changed.
+
+ BUG:328286
+ FIXED-IN:1.11.1
+ REVIEW:114241
+
+diff --git a/server/src/storage/datastore.cpp b/server/src/storage/datastore.cpp
+index 2fb5f80..efc0d57 100644
+--- a/server/src/storage/datastore.cpp
++++ b/server/src/storage/datastore.cpp
+@@ -182,57 +182,57 @@ DataStore * Akonadi::DataStore::self()
+
+ bool DataStore::setItemsFlags( const PimItem::List &items, const QVector<Flag> &flags )
+ {
+- // first delete all old flags of this pim item
+ QSet<QByteArray> removedFlags;
+ QSet<QByteArray> addedFlags;
+- QVariantList ids;
+ QVariantList insIds;
+ QVariantList insFlags;
++ Query::Condition delConds( Query::Or );
+
+ Q_FOREACH ( const PimItem &item, items ) {
+ Q_FOREACH ( const Flag &flag, item.flags() ) {
+- if ( !removedFlags.contains( flag.name().toLatin1() ) ) {
++ if ( !flags.contains( flag ) ) {
+ removedFlags << flag.name().toLatin1();
++ Query::Condition cond;
++ cond.addValueCondition( PimItemFlagRelation::leftFullColumnName(), Query::Equals, item.id() );
++ cond.addValueCondition( PimItemFlagRelation::rightFullColumnName(), Query::Equals, flag.id() );
++ delConds.addCondition(cond);
+ }
+ }
+
+- // create a bind values for the insert query - every item repeats exactly
+- // flags.count()-times
+- for ( int i = 0; i < flags.count(); ++i ) {
+- insIds << item.id();
++ Q_FOREACH ( const Flag &flag, flags ) {
++ if ( !item.flags().contains( flag ) ) {
++ addedFlags << flag.name().toLatin1();
++ insIds << item.id();
++ insFlags << flag.id();
++ }
+ }
+-
+- ids << item.id();
+ }
+
+- // Clear all flags of all given items at once
+- QueryBuilder qb( PimItemFlagRelation::tableName(), QueryBuilder::Delete );
+- Query::Condition cond;
+- cond.addValueCondition( PimItemFlagRelation::leftFullColumnName(), Query::In, ids );
+- qb.addCondition( cond );
+- if ( !qb.exec() ) {
+- return false;
++ if ( !removedFlags.empty() ) {
++ QueryBuilder qb( PimItemFlagRelation::tableName(), QueryBuilder::Delete );
++ qb.addCondition( delConds );
++ if ( !qb.exec() ) {
++ return false;
++ }
+ }
+
+- // create bind values for the insert quest - every flags repeats exactly
+- // items.count()-times
+- Q_FOREACH ( const Flag &flag, flags ) {
+- for ( int i = 0; i < items.count(); ++i ) {
+- insFlags << flag.id();
++ if ( !addedFlags.empty() ) {
++ QueryBuilder qb2( PimItemFlagRelation::tableName(), QueryBuilder::Insert );
++ qb2.setColumnValue( PimItemFlagRelation::leftColumn(), insIds );
++ qb2.setColumnValue( PimItemFlagRelation::rightColumn(), insFlags );
++ qb2.setIdentificationColumn( QString() );
++ if ( !qb2.exec() ) {
++ return false;
+ }
+-
+- addedFlags << flag.name().toLatin1();
+ }
+
+- QueryBuilder qb2( PimItemFlagRelation::tableName(), QueryBuilder::Insert );
+- qb2.setColumnValue( PimItemFlagRelation::leftColumn(), insIds );
+- qb2.setColumnValue( PimItemFlagRelation::rightColumn(), insFlags );
+- qb2.setIdentificationColumn( QString() );
+- if ( !qb2.exec() ) {
+- return false;
++ if ( addedFlags.empty() && removedFlags.empty() ) {
++ // no changes done, notification not needed
++ return true;
+ }
+
+ mNotificationCollector->itemsFlagsChanged( items, addedFlags, removedFlags );
++
+ return true;
+ }
+
diff --git a/debian/patches/series b/debian/patches/series
index 3190362..ba9f3e3 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
# disable_dbus_requiring_tests.diff
+dont_do_redundant_flag_changes.diff
--
Akonadi packaging
More information about the pkg-kde-commits
mailing list