Hello community,

here is the log from the commit of package akonadi-runtime for openSUSE:Factory 
checked in at 2013-07-30 15:55:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/akonadi-runtime (Old)
 and      /work/SRC/openSUSE:Factory/.akonadi-runtime.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "akonadi-runtime"

Changes:
--------
--- /work/SRC/openSUSE:Factory/akonadi-runtime/akonadi-runtime.changes  
2013-07-22 16:33:15.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.akonadi-runtime.new/akonadi-runtime.changes     
2013-07-30 15:55:59.000000000 +0200
@@ -1,0 +2,10 @@
+Thu Jul 25 19:02:36 UTC 2013 - [email protected]
+
+- Update to 1.10.2
+  * Fix PostgreSQL support (once more)
+ * Changes from version 1.10.1:
+  * Fix PostgreSQL support
+  * Optimize appending flags to items
+  * Introduce CHANGEDSINCE parameter to FETCH command
+
+-------------------------------------------------------------------

Old:
----
  akonadi-1.10.0.tar.bz2

New:
----
  akonadi-1.10.2.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ akonadi-runtime.spec ++++++
--- /var/tmp/diff_new_pack.cXReY2/_old  2013-07-30 15:56:01.000000000 +0200
+++ /var/tmp/diff_new_pack.cXReY2/_new  2013-07-30 15:56:01.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           akonadi-runtime
-Version:        1.10.0
+Version:        1.10.2
 Release:        0
 %define rversion %{version}
 Summary:        PIM Storage Service

++++++ akonadi-1.10.0.tar.bz2 -> akonadi-1.10.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/CMakeLists.txt 
new/akonadi-1.10.2/CMakeLists.txt
--- old/akonadi-1.10.0/CMakeLists.txt   2013-07-09 18:56:12.000000000 +0200
+++ new/akonadi-1.10.2/CMakeLists.txt   2013-07-25 14:48:43.000000000 +0200
@@ -73,7 +73,7 @@
 
 set(AKONADI_VERSION_MAJOR "1")
 set(AKONADI_VERSION_MINOR "10")
-set(AKONADI_VERSION_PATCH "0")
+set(AKONADI_VERSION_PATCH "2")
 set(AKONADI_VERSION 
"${AKONADI_VERSION_MAJOR}.${AKONADI_VERSION_MINOR}.${AKONADI_VERSION_PATCH}")
 set(AKONADI_VERSION_STRING "${AKONADI_VERSION}")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/Mainpage.dox 
new/akonadi-1.10.2/Mainpage.dox
--- old/akonadi-1.10.0/Mainpage.dox     2013-07-09 18:56:12.000000000 +0200
+++ new/akonadi-1.10.2/Mainpage.dox     2013-07-25 14:48:43.000000000 +0200
@@ -315,6 +315,6 @@
 
 // DOXYGEN_EXCLUDE = sqlplugin server/control server/akonadictl server/tests
 // DOXYGEN_PROJECTNAME=Akonadi
-// DOXYGEN_PROJECTVERSION=1.10.0
+// DOXYGEN_PROJECTVERSION=1.10.2
 
 // vim:ts=4:sw=4:expandtab:filetype=doxygen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/NEWS new/akonadi-1.10.2/NEWS
--- old/akonadi-1.10.0/NEWS     2013-07-09 18:56:12.000000000 +0200
+++ new/akonadi-1.10.2/NEWS     2013-07-25 14:48:43.000000000 +0200
@@ -1,3 +1,13 @@
+1.10.2                            23-July-2013
+----------------------------------------------
+- Fix PostgreSQL support (once more)
+
+1.10.1                           22-July-2013
+----------------------------------------------
+- Fix PostgreSQL support
+- Optimize appending flags to items
+- Introduce CHANGEDSINCE parameter to FETCH command
+
 1.10.0                            09-July-2013
 ----------------------------------------------
 - Memory optimizations
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/libs/protocol_p.h 
new/akonadi-1.10.2/libs/protocol_p.h
--- old/akonadi-1.10.0/libs/protocol_p.h        2013-07-09 18:56:12.000000000 
+0200
+++ new/akonadi-1.10.2/libs/protocol_p.h        2013-07-25 14:48:43.000000000 
+0200
@@ -84,6 +84,7 @@
 #define AKONADI_PARAM_RESOURCE "RESOURCE"
 #define AKONADI_PARAM_ANCESTORS "ANCESTORS"
 #define AKONADI_PARAM_IGNOREERRORS "IGNOREERRORS"
+#define AKONADI_PARAM_CHANGEDSINCE "CHANGEDSINCE"
 
 #define AKONADI_PARAM_PERSISTENTSEARCH "PERSISTENTSEARCH"
 #define AKONADI_PARAM_PERSISTENTSEARCH_QUERYLANG "QUERYLANGUAGE"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/server/src/akonadiconnection.cpp 
new/akonadi-1.10.2/server/src/akonadiconnection.cpp
--- old/akonadi-1.10.0/server/src/akonadiconnection.cpp 2013-07-09 
18:56:12.000000000 +0200
+++ new/akonadi-1.10.2/server/src/akonadiconnection.cpp 2013-07-25 
14:48:43.000000000 +0200
@@ -113,7 +113,7 @@
 
     Response greeting;
     greeting.setUntagged();
-    greeting.setString("OK Akonadi Almost IMAP Server [PROTOCOL 32]");
+    greeting.setString("OK Akonadi Almost IMAP Server [PROTOCOL 33]");
     // don't send before the event loop is active, since waitForBytesWritten() 
can cause interesting reentrancy issues
     // TODO should be QueueConnection, but unfortunately that doesn't work 
(yet), since
     // "this" belongs to the wrong thread, but that requires a slightly larger 
refactoring
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/server/src/handler/fetchhelper.cpp 
new/akonadi-1.10.2/server/src/handler/fetchhelper.cpp
--- old/akonadi-1.10.0/server/src/handler/fetchhelper.cpp       2013-07-09 
18:56:12.000000000 +0200
+++ new/akonadi-1.10.2/server/src/handler/fetchhelper.cpp       2013-07-25 
14:48:43.000000000 +0200
@@ -42,6 +42,7 @@
 #include <QtCore/QStringList>
 #include <QtCore/QUuid>
 #include <QtCore/QVariant>
+#include <QtCore/QDateTime>
 #include <QtSql/QSqlDatabase>
 #include <QtSql/QSqlError>
 #include <QtSql/QSqlQuery>
@@ -156,6 +157,10 @@
   if ( mScope.scope() != Scope::Invalid )
     ItemQueryHelper::scopeToQuery( mScope, mConnection, itemQuery );
 
+  if ( mChangedSince.isValid() ) {
+    itemQuery.addValueCondition( PimItem::datetimeFullColumnName(), 
Query::GreaterOrEqual, mChangedSince.toUTC() );
+  }
+
   if ( !itemQuery.exec() ) {
     throw HandlerException("Unable to list items");
   }
@@ -466,6 +471,12 @@
         mAncestorDepth = HandlerHelper::parseDepth( 
mStreamParser->readString() );
       } else if ( buffer == AKONADI_PARAM_IGNOREERRORS ) {
         mIgnoreErrors = true;
+      } else if ( buffer == AKONADI_PARAM_CHANGEDSINCE ) {
+        bool ok = false;
+        mChangedSince = QDateTime::fromTime_t( mStreamParser->readNumber( &ok 
) );
+        if ( !ok ) {
+          throw HandlerException( "Invalid CHANGEDSINCE timestamp" );
+        }
       } else {
         throw HandlerException( "Invalid command argument" );
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/server/src/handler/fetchhelper.h 
new/akonadi-1.10.2/server/src/handler/fetchhelper.h
--- old/akonadi-1.10.0/server/src/handler/fetchhelper.h 2013-07-09 
18:56:12.000000000 +0200
+++ new/akonadi-1.10.2/server/src/handler/fetchhelper.h 2013-07-25 
14:48:43.000000000 +0200
@@ -76,6 +76,7 @@
     bool mExternalPayloadSupported;
     bool mRemoteRevisionRequested;
     bool mIgnoreErrors;
+    QDateTime mChangedSince;
 };
 
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/server/src/storage/datastore.cpp 
new/akonadi-1.10.2/server/src/storage/datastore.cpp
--- old/akonadi-1.10.0/server/src/storage/datastore.cpp 2013-07-09 
18:56:12.000000000 +0200
+++ new/akonadi-1.10.2/server/src/storage/datastore.cpp 2013-07-25 
14:48:43.000000000 +0200
@@ -208,8 +208,9 @@
   }
 
   QueryBuilder qb2( PimItemFlagRelation::tableName(), QueryBuilder::Insert );
-  qb2.setColumnValue( PimItemFlagRelation::leftFullColumnName(), insIds );
-  qb2.setColumnValue( PimItemFlagRelation::rightFullColumnName(), insFlags );
+  qb2.setColumnValue( PimItemFlagRelation::leftColumn(), insIds );
+  qb2.setColumnValue( PimItemFlagRelation::rightColumn(), insFlags );
+  qb2.setIdentificationColumn( QString() );
   if ( !qb2.exec() ) {
     return false;
   }
@@ -218,29 +219,82 @@
   return true;
 }
 
+bool DataStore::doAppendItemsFlag( const PimItem::List &items, const Flag 
&flag,
+                                   const QSet<Entity::Id> &existing, const 
Collection &col)
+{
+  QVariantList flagIds;
+  QVariantList appendIds;
+  PimItem::List appendItems;
+  Q_FOREACH ( const PimItem &item, items ) {
+    if ( existing.contains( item.id() ) ) {
+      continue;
+    }
+
+    flagIds << flag.id();
+    appendIds << item.id();
+    appendItems << item;
+  }
+
+  QueryBuilder qb2( PimItemFlagRelation::tableName(), QueryBuilder::Insert );
+  qb2.setColumnValue( PimItemFlagRelation::leftColumn(), appendIds );
+  qb2.setColumnValue( PimItemFlagRelation::rightColumn(), flagIds );
+  qb2.setIdentificationColumn( QString() );
+  if ( !qb2.exec() ) {
+    akDebug() << "Failed to execute query:" << qb2.query().lastError();
+    return false;
+  }
+
+  mNotificationCollector->itemsFlagsChanged( appendItems, QSet<QByteArray>() 
<< flag.name().toLatin1(),
+                                              QSet<QByteArray>(), col );
+
+  return true;
+}
+
+
 bool DataStore::appendItemsFlags( const PimItem::List &items, const 
QVector<Flag> &flags,
-                                 bool& flagsChanged, bool checkIfExists,
-                                 const Collection &col )
+                                  bool& flagsChanged, bool checkIfExists,
+                                  const Collection &col )
 {
   QSet<QByteArray> added;
-  Q_FOREACH( const PimItem &item, items ) {
-    flagsChanged = false;
-    if ( !item.isValid() )
-      return false;
-    if ( flags.isEmpty() )
-      return true;
 
-    for ( int i = 0; i < flags.count(); ++i ) {
-      if ( !checkIfExists || !item.relatesToFlag( flags[ i ] ) ) {
-        flagsChanged = true;
-        added << flags[ i ].name().toLatin1();
-        if ( !item.addFlag( flags[i] ) )
-          return false;
+  QVariantList itemsIds;
+  Q_FOREACH ( const PimItem &item, items ) {
+    itemsIds.append( item.id() );
+  }
+
+  flagsChanged = false;
+  Q_FOREACH ( const Flag &flag, flags ) {
+    QSet<PimItem::Id> existing;
+    if ( checkIfExists ) {
+      QueryBuilder qb( PimItemFlagRelation::tableName(), QueryBuilder::Select 
);
+      Query::Condition cond;
+      cond.addValueCondition( PimItemFlagRelation::rightColumn(), 
Query::Equals, flag.id() );
+      cond.addValueCondition( PimItemFlagRelation::leftColumn(), Query::In, 
itemsIds );
+      qb.addColumn( PimItemFlagRelation::leftColumn() );
+      qb.addCondition( cond );
+
+      if ( !qb.exec() ) {
+        akDebug() << "Failed to execute query:" << qb.query().lastError();
+        return false;
+      }
+
+      QSqlQuery query = qb.query();
+      if ( query.size() == items.count() ) {
+        continue;
       }
+
+      flagsChanged = true;
+
+      while ( query.next() ) {
+        existing << query.value( 0 ).value<PimItem::Id>();
+      }
+    }
+
+    if ( !doAppendItemsFlag( items, flag, existing, col ) ) {
+      return false;
     }
   }
 
-  mNotificationCollector->itemsFlagsChanged( items, added, QSet<QByteArray>(), 
col );
   return true;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/akonadi-1.10.0/server/src/storage/datastore.h 
new/akonadi-1.10.2/server/src/storage/datastore.h
--- old/akonadi-1.10.0/server/src/storage/datastore.h   2013-07-09 
18:56:12.000000000 +0200
+++ new/akonadi-1.10.2/server/src/storage/datastore.h   2013-07-25 
14:48:43.000000000 +0200
@@ -262,6 +262,9 @@
     void debugLastQueryError( const QSqlQuery &query, const char* 
actionDescription ) const;
 
   private:
+    bool doAppendItemsFlag( const PimItem::List &items, const Flag &flag,
+                           const QSet<PimItem::Id> &existing, const Collection 
&col );
+
     /** Converts the given date/time to the database format, i.e.
         "YYYY-MM-DD HH:MM:SS".
         @param dateTime the date/time in UTC

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to