[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [akonadi/coding-style] server/src/handler: Coding Style
From:       Guy Maurel <guy.maurel () kde ! org>
Date:       2014-06-04 15:48:51
Message-ID: E1WsDQp-0005Pv-28 () scm ! kde ! org
[Download RAW message or body]

Git commit 24ea16a140203c36150befa3c2ae9a45d1b67604 by Guy Maurel.
Committed on 04/06/2014 at 15:48.
Pushed by guymaurel into branch 'coding-style'.

Coding Style

REVIEW: 118505

M  +24   -25   server/src/handler/remove.cpp
M  +12   -12   server/src/handler/resourceselect.cpp
M  +63   -63   server/src/handler/scope.cpp
M  +108  -108  server/src/handler/search.cpp
M  +93   -94   server/src/handler/searchhelper.cpp

http://commits.kde.org/akonadi/24ea16a140203c36150befa3c2ae9a45d1b67604

diff --git a/server/src/handler/remove.cpp b/server/src/handler/remove.cpp
index 090531f..ac9235f 100644
--- a/server/src/handler/remove.cpp
+++ b/server/src/handler/remove.cpp
@@ -31,40 +31,39 @@
 using namespace Akonadi;
 using namespace Akonadi::Server;
 
-Remove::Remove( Scope::SelectionScope scope )
-  : mScope( scope )
+Remove::Remove(Scope::SelectionScope scope)
+    : mScope(scope)
 {
 }
 
 bool Remove::parseStream()
 {
-  mScope.parseScope( m_streamParser );
-  connection()->context()->parseContext( m_streamParser );
-  qDebug() << "Tag context:" << connection()->context()->tagId();
-  qDebug() << "Collection context: " << connection()->context()->collectionId();
+    mScope.parseScope(m_streamParser);
+    connection()->context()->parseContext(m_streamParser);
+    qDebug() << "Tag context:" << connection()->context()->tagId();
+    qDebug() << "Collection context: " << connection()->context()->collectionId();
 
+    SelectQueryBuilder<PimItem> qb;
+    ItemQueryHelper::scopeToQuery(mScope, connection()->context(), qb);
 
-  SelectQueryBuilder<PimItem> qb;
-  ItemQueryHelper::scopeToQuery( mScope, connection()->context(), qb );
+    DataStore *store = connection()->storageBackend();
+    Transaction transaction(store);
 
-  DataStore *store = connection()->storageBackend();
-  Transaction transaction( store );
-
-  if ( qb.exec() ) {
-    const QVector<PimItem> items = qb.result();
-    if ( items.isEmpty() ) {
-      throw HandlerException( "No items found" );
-    }
-    if ( !store->cleanupPimItems( items ) ) {
-      throw HandlerException( "Deletion failed" );
+    if (qb.exec()) {
+        const QVector<PimItem> items = qb.result();
+        if (items.isEmpty()) {
+            throw HandlerException("No items found");
+        }
+        if (!store->cleanupPimItems(items)) {
+            throw HandlerException("Deletion failed");
+        }
+    } else {
+        throw HandlerException("Unable to execute query");
     }
-  } else {
-    throw HandlerException( "Unable to execute query" );
-  }
 
-  if ( !transaction.commit() ) {
-    return failureResponse( "Unable to commit transaction." );
-  }
+    if (!transaction.commit()) {
+        return failureResponse("Unable to commit transaction.");
+    }
 
-  return successResponse( "REMOVE complete" );
+    return successResponse("REMOVE complete");
 }
diff --git a/server/src/handler/resourceselect.cpp \
b/server/src/handler/resourceselect.cpp index d4515c9..9b115d2 100644
--- a/server/src/handler/resourceselect.cpp
+++ b/server/src/handler/resourceselect.cpp
@@ -26,24 +26,24 @@
 using namespace Akonadi::Server;
 
 ResourceSelect::ResourceSelect()
-  : Handler()
+    : Handler()
 {
 }
 
 bool ResourceSelect::parseStream()
 {
-  const QString resourceName = m_streamParser->readUtf8String();
-  if ( resourceName.isEmpty() ) {
-    connection()->context()->setResource( Resource() );
-    return successResponse( "Resource deselected" );
-  }
+    const QString resourceName = m_streamParser->readUtf8String();
+    if (resourceName.isEmpty()) {
+        connection()->context()->setResource(Resource());
+        return successResponse("Resource deselected");
+    }
 
-  const Resource res = Resource::retrieveByName( resourceName );
-  if ( !res.isValid() ) {
-    throw HandlerException( resourceName.toUtf8() + " is not a valid resource \
                identifier" );
-  }
+    const Resource res = Resource::retrieveByName(resourceName);
+    if (!res.isValid()) {
+        throw HandlerException(resourceName.toUtf8() + " is not a valid resource \
identifier"); +    }
 
-  connection()->context()->setResource( res );
+    connection()->context()->setResource(res);
 
-  return successResponse( resourceName.toUtf8() + " selected" );
+    return successResponse(resourceName.toUtf8() + " selected");
 }
diff --git a/server/src/handler/scope.cpp b/server/src/handler/scope.cpp
index 9edebf7..1753eb1 100644
--- a/server/src/handler/scope.cpp
+++ b/server/src/handler/scope.cpp
@@ -27,102 +27,102 @@
 using namespace Akonadi;
 using namespace Akonadi::Server;
 
-Scope::Scope( SelectionScope scope )
-  : mScope( scope )
+Scope::Scope(SelectionScope scope)
+    : mScope(scope)
 {
 }
 
-void Scope::parseScope( ImapStreamParser *parser )
+void Scope::parseScope(ImapStreamParser *parser)
 {
-  if ( mScope == None || mScope == Uid ) {
-    mUidSet = parser->readSequenceSet();
-    if ( mUidSet.isEmpty() ) {
-      throw HandlerException( "Empty uid set specified" );
-    }
-  } else if ( mScope == Rid ) {
-    if ( parser->hasList() ) {
-      parser->beginList();
-      while ( !parser->atListEnd() ) {
-        mRidSet << parser->readUtf8String();
-      }
+    if (mScope == None || mScope == Uid) {
+        mUidSet = parser->readSequenceSet();
+        if (mUidSet.isEmpty()) {
+            throw HandlerException("Empty uid set specified");
+        }
+    } else if (mScope == Rid) {
+        if (parser->hasList()) {
+            parser->beginList();
+            while (!parser->atListEnd()) {
+                mRidSet << parser->readUtf8String();
+            }
+        } else {
+            mRidSet << parser->readUtf8String();
+        }
+        if (mRidSet.isEmpty()) {
+            throw HandlerException("Empty remote identifier set specified");
+        }
+    } else if (mScope == HierarchicalRid) {
+        parser->beginList();
+        while (!parser->atListEnd()) {
+            parser->beginList();
+            parser->readString(); // uid, invalid here
+            mRidChain.append(parser->readUtf8String());
+            if (!parser->atListEnd()) {
+                throw HandlerException("Invalid hierarchical RID chain format");
+            }
+        }
+    } else if (mScope == Gid) {
+        if (parser->hasList()) {
+            parser->beginList();
+            while (!parser->atListEnd()) {
+                mGidSet << parser->readUtf8String();
+            }
+        } else {
+            mGidSet << parser->readUtf8String();
+        }
+        if (mGidSet.isEmpty()) {
+            throw HandlerException("Empty gid set specified");
+        }
     } else {
-      mRidSet << parser->readUtf8String();
-    }
-    if ( mRidSet.isEmpty() ) {
-      throw HandlerException( "Empty remote identifier set specified" );
+        throw HandlerException("WTF?!?");
     }
-  } else if ( mScope == HierarchicalRid ) {
-    parser->beginList();
-    while ( !parser->atListEnd() ) {
-      parser->beginList();
-      parser->readString(); // uid, invalid here
-      mRidChain.append( parser->readUtf8String() );
-      if ( !parser->atListEnd() ) {
-        throw HandlerException( "Invalid hierarchical RID chain format" );
-      }
-    }
-  } else if ( mScope == Gid ) {
-    if ( parser->hasList() ) {
-      parser->beginList();
-      while ( !parser->atListEnd() ) {
-        mGidSet << parser->readUtf8String();
-      }
-    } else {
-      mGidSet << parser->readUtf8String();
-    }
-    if ( mGidSet.isEmpty() ) {
-      throw HandlerException( "Empty gid set specified" );
-    }
-  } else {
-    throw HandlerException( "WTF?!?" );
-  }
 }
 
-Scope::SelectionScope Scope::selectionScopeFromByteArray( const QByteArray &input )
+Scope::SelectionScope Scope::selectionScopeFromByteArray(const QByteArray &input)
 {
-  if ( input == AKONADI_CMD_UID ) {
-    return Scope::Uid;
-  } else if ( input == AKONADI_CMD_RID ) {
-    return Scope::Rid;
-  } else if ( input == AKONADI_CMD_HRID ) {
-    return Scope::HierarchicalRid;
-  } else if ( input == AKONADI_CMD_GID ) {
-    return Scope::Gid;
-  }
-  return Scope::None;
+    if (input == AKONADI_CMD_UID) {
+        return Scope::Uid;
+    } else if (input == AKONADI_CMD_RID) {
+        return Scope::Rid;
+    } else if (input == AKONADI_CMD_HRID) {
+        return Scope::HierarchicalRid;
+    } else if (input == AKONADI_CMD_GID) {
+        return Scope::Gid;
+    }
+    return Scope::None;
 }
 
 Scope::SelectionScope Scope::scope() const
 {
-  return mScope;
+    return mScope;
 }
 
-void Scope::setScope( SelectionScope scope )
+void Scope::setScope(SelectionScope scope)
 {
-  mScope = scope;
+    mScope = scope;
 }
 
 ImapSet Scope::uidSet() const
 {
-  return mUidSet;
+    return mUidSet;
 }
 
-void Scope::setUidSet( const ImapSet &uidSet )
+void Scope::setUidSet(const ImapSet &uidSet)
 {
-  mUidSet = uidSet;
+    mUidSet = uidSet;
 }
 
 QStringList Scope::ridSet() const
 {
-  return mRidSet;
+    return mRidSet;
 }
 
 QStringList Scope::ridChain() const
 {
-  return mRidChain;
+    return mRidChain;
 }
 
 QStringList Scope::gidSet() const
 {
-  return mGidSet;
+    return mGidSet;
 }
diff --git a/server/src/handler/search.cpp b/server/src/handler/search.cpp
index 06d172f..750ba66 100644
--- a/server/src/handler/search.cpp
+++ b/server/src/handler/search.cpp
@@ -38,7 +38,7 @@
 using namespace Akonadi::Server;
 
 Search::Search()
-  : Handler()
+    : Handler()
 {
 }
 
@@ -48,140 +48,140 @@ Search::~Search()
 
 bool Search::parseStream()
 {
-  QStringList mimeTypes;
-  QVector<qint64> collectionIds;
-  bool recursive = false, remote = false;
-  QString queryString;
-
-  // Backward compatibility
-  if ( !connection()->capabilities().serverSideSearch() ) {
-    searchNepomuk();
-  } else {
-    while (m_streamParser->hasString()) {
-      const QByteArray param = m_streamParser->readString();
-      if ( param == AKONADI_PARAM_MIMETYPE ) {
-        const QList<QByteArray> mt = m_streamParser->readParenthesizedList();
-        mimeTypes.reserve( mt.size() );
-        Q_FOREACH ( const QByteArray &ba, mt ) {
-          mimeTypes.append( QString::fromLatin1( ba ) );
-        }
-      } else if ( param == AKONADI_PARAM_COLLECTIONS ) {
-        QList<QByteArray> list = m_streamParser->readParenthesizedList();
-        Q_FOREACH ( const QByteArray &col, list ) {
-          collectionIds << col.toLongLong();
+    QStringList mimeTypes;
+    QVector<qint64> collectionIds;
+    bool recursive = false, remote = false;
+    QString queryString;
+
+    // Backward compatibility
+    if (!connection()->capabilities().serverSideSearch()) {
+        searchNepomuk();
+    } else {
+        while (m_streamParser->hasString()) {
+            const QByteArray param = m_streamParser->readString();
+            if (param == AKONADI_PARAM_MIMETYPE) {
+                const QList<QByteArray> mt = \
m_streamParser->readParenthesizedList(); +                \
mimeTypes.reserve(mt.size()); +                Q_FOREACH (const QByteArray &ba, mt) {
+                    mimeTypes.append(QString::fromLatin1(ba));
+                }
+            } else if (param == AKONADI_PARAM_COLLECTIONS) {
+                QList<QByteArray> list = m_streamParser->readParenthesizedList();
+                Q_FOREACH (const QByteArray &col, list) {
+                    collectionIds << col.toLongLong();
+                }
+            } else if (param == AKONADI_PARAM_RECURSIVE) {
+                recursive = true;
+            } else if (param == AKONADI_PARAM_REMOTE) {
+                remote = true;
+            } else if (param == AKONADI_PARAM_QUERY) {
+                queryString = m_streamParser->readUtf8String();
+                // TODO: This is an ugly hack, but we assume QUERY is the last \
parameter, +                // followed only by fetch scope, which we parse \
separately below +                break;
+            } else {
+                return failureResponse("Invalid parameter");
+            }
         }
-      } else if ( param == AKONADI_PARAM_RECURSIVE ) {
-        recursive = true;
-      } else if ( param == AKONADI_PARAM_REMOTE ) {
-        remote = true;
-      } else if ( param == AKONADI_PARAM_QUERY ) {
-        queryString = m_streamParser->readUtf8String();
-        // TODO: This is an ugly hack, but we assume QUERY is the last parameter,
-        // followed only by fetch scope, which we parse separately below
-        break;
-      } else {
-        return failureResponse( "Invalid parameter" );
-      }
-    }
 
-    if ( queryString.isEmpty() ) {
-      return failureResponse( "No query specified" );
-    }
+        if (queryString.isEmpty()) {
+            return failureResponse("No query specified");
+        }
 
-    QVector<qint64> collections;
-    if ( collectionIds.isEmpty() ) {
-      collectionIds << 0;
-      recursive = true;
-    }
+        QVector<qint64> collections;
+        if (collectionIds.isEmpty()) {
+            collectionIds << 0;
+            recursive = true;
+        }
 
-    if ( recursive ) {
-      Q_FOREACH ( qint64 collection, collectionIds ) {
-        collections << SearchHelper::listCollectionsRecursive( QVector<qint64>() << \
                collection, mimeTypes );
-      }
-    } else {
-      collections = collectionIds;
-    }
+        if (recursive) {
+            Q_FOREACH (qint64 collection, collectionIds) {
+                collections << \
SearchHelper::listCollectionsRecursive(QVector<qint64>() << collection, mimeTypes); + \
} +        } else {
+            collections = collectionIds;
+        }
 
-    akDebug() << "SEARCH:";
-    akDebug() << "\tQuery:" << queryString;
-    akDebug() << "\tMimeTypes:" << mimeTypes;
-    akDebug() << "\tCollections:" << collections;
-    akDebug() << "\tRemote:" << remote;
-    akDebug() << "\tRecursive" << recursive;
+        akDebug() << "SEARCH:";
+        akDebug() << "\tQuery:" << queryString;
+        akDebug() << "\tMimeTypes:" << mimeTypes;
+        akDebug() << "\tCollections:" << collections;
+        akDebug() << "\tRemote:" << remote;
+        akDebug() << "\tRecursive" << recursive;
 
-    if ( collections.isEmpty() ) {
-      m_streamParser->readUntilCommandEnd();
-      return successResponse( "Search done" );
-    }
+        if (collections.isEmpty()) {
+            m_streamParser->readUntilCommandEnd();
+            return successResponse("Search done");
+        }
 
-    // Read the fetch scope
-    mFetchScope = FetchScope( m_streamParser );
-    // Read any newlines
-    m_streamParser->readUntilCommandEnd();
+        // Read the fetch scope
+        mFetchScope = FetchScope(m_streamParser);
+        // Read any newlines
+        m_streamParser->readUntilCommandEnd();
 
-    SearchRequest request( connection()->sessionId() );
-    request.setCollections( collections );
-    request.setMimeTypes( mimeTypes );
-    request.setQuery( queryString );
-    request.setRemoteSearch( remote );
-    connect( &request, SIGNAL(resultsAvailable(QSet<qint64>)),
-            this, SLOT(slotResultsAvailable(QSet<qint64>)) );
-    request.exec();
+        SearchRequest request(connection()->sessionId());
+        request.setCollections(collections);
+        request.setMimeTypes(mimeTypes);
+        request.setQuery(queryString);
+        request.setRemoteSearch(remote);
+        connect(&request, SIGNAL(resultsAvailable(QSet<qint64>)),
+                this, SLOT(slotResultsAvailable(QSet<qint64>)));
+        request.exec();
 
-  }
+    }
 
-  //akDebug() << "\tResult:" << uids;
-  akDebug() << "\tResult:" << mAllResults.count() << "matches";
+    //akDebug() << "\tResult:" << uids;
+    akDebug() << "\tResult:" << mAllResults.count() << "matches";
 
-  return successResponse( "Search done" );
+    return successResponse("Search done");
 }
 
 void Search::searchNepomuk()
 {
-  const QString queryString = m_streamParser->readUtf8String();
-  mFetchScope = FetchScope( m_streamParser );
+    const QString queryString = m_streamParser->readUtf8String();
+    mFetchScope = FetchScope(m_streamParser);
 
-  QStringList uids;
+    QStringList uids;
 #ifdef HAVE_SOPRANO
-  NepomukSearch *service = new NepomukSearch;
-  uids = service->search( queryString );
-  delete service;
+    NepomukSearch *service = new NepomukSearch;
+    uids = service->search(queryString);
+    delete service;
 #else
-  akError() << "Akonadi has been built without Nepomuk support!";
-  return;
+    akError() << "Akonadi has been built without Nepomuk support!";
+    return;
 #endif
 
-  if ( uids.isEmpty() ) {
-    return;
-  }
+    if (uids.isEmpty()) {
+        return;
+    }
 
-  QSet<qint64> results;
-  Q_FOREACH ( const QString &uid, uids ) {
-    results.insert( uid.toLongLong() );
-  }
+    QSet<qint64> results;
+    Q_FOREACH (const QString &uid, uids) {
+        results.insert(uid.toLongLong());
+    }
 
-  slotResultsAvailable( results );
+    slotResultsAvailable(results);
 }
 
-void Search::slotResultsAvailable( const QSet<qint64> &results )
+void Search::slotResultsAvailable(const QSet<qint64> &results)
 {
-  QSet<qint64> newResults = results;
-  newResults.subtract( mAllResults );
-  mAllResults.unite( newResults );
+    QSet<qint64> newResults = results;
+    newResults.subtract(mAllResults);
+    mAllResults.unite(newResults);
 
-  if ( newResults.isEmpty() ) {
-    return;
-  }
+    if (newResults.isEmpty()) {
+        return;
+    }
 
-  // create imap query
-  ImapSet itemSet;
-  itemSet.add( newResults );
-  Scope scope( Scope::Uid );
-  scope.setUidSet( itemSet );
+    // create imap query
+    ImapSet itemSet;
+    itemSet.add(newResults);
+    Scope scope(Scope::Uid);
+    scope.setUidSet(itemSet);
 
-  FetchHelper fetchHelper( connection(), scope, mFetchScope );
-  connect( &fetchHelper, SIGNAL(responseAvailable(Akonadi::Server::Response)),
-          this, SIGNAL(responseAvailable(Akonadi::Server::Response)) );
+    FetchHelper fetchHelper(connection(), scope, mFetchScope);
+    connect(&fetchHelper, SIGNAL(responseAvailable(Akonadi::Server::Response)),
+            this, SIGNAL(responseAvailable(Akonadi::Server::Response)));
 
-  fetchHelper.fetchItems( AKONADI_CMD_SEARCH );
+    fetchHelper.fetchItems(AKONADI_CMD_SEARCH);
 }
diff --git a/server/src/handler/searchhelper.cpp \
b/server/src/handler/searchhelper.cpp index aa6694d..cf686a6 100644
--- a/server/src/handler/searchhelper.cpp
+++ b/server/src/handler/searchhelper.cpp
@@ -26,118 +26,117 @@
 
 using namespace Akonadi::Server;
 
-QList<QByteArray> SearchHelper::splitLine( const QByteArray &line )
+QList<QByteArray> SearchHelper::splitLine(const QByteArray &line)
 {
-  QList<QByteArray> retval;
-
-  int i, start = 0;
-  bool escaped = false;
-  for ( i = 0; i < line.count(); ++i ) {
-    if ( line[i] == ' ' ) {
-      if ( !escaped ) {
-        retval.append( line.mid( start, i - start ) );
-        start = i + 1;
-      }
-    } else if ( line[i] == '"' ) {
-      if ( escaped ) {
-        escaped = false;
-      } else {
-        escaped = true;
-      }
+    QList<QByteArray> retval;
+
+    int i, start = 0;
+    bool escaped = false;
+    for (i = 0; i < line.count(); ++i) {
+        if (line[i] == ' ') {
+            if (!escaped) {
+                retval.append(line.mid(start, i - start));
+                start = i + 1;
+            }
+        } else if (line[i] == '"') {
+            if (escaped) {
+                escaped = false;
+            } else {
+                escaped = true;
+            }
+        }
     }
-  }
 
-  retval.append( line.mid( start, i - start ) );
+    retval.append(line.mid(start, i - start));
 
-  return retval;
+    return retval;
 }
 
-QString SearchHelper::extractMimetype( const QList<QByteArray> &junks, int start )
+QString SearchHelper::extractMimetype(const QList<QByteArray> &junks, int start)
 {
-  QString mimeType;
-
-  if ( junks.count() <= start ) {
-    return QString();
-  }
+    QString mimeType;
 
-  if ( junks[start].toUpper() == AKONADI_PARAM_CHARSET ) {
-    if ( junks.count() <= ( start + 2 ) ) {
-      return QString();
-    }
-    if ( junks[start + 2].toUpper() == AKONADI_PARAM_MIMETYPE ) {
-      if ( junks.count() <= ( start + 3 ) ) {
+    if (junks.count() <= start) {
         return QString();
-      } else {
-        mimeType = QString::fromLatin1( junks[start + 3].toLower() );
-      }
     }
-  } else {
-    if ( junks[start].toUpper() == AKONADI_PARAM_MIMETYPE ) {
-      if ( junks.count() <= ( start + 1 ) ) {
-        return QString();
-      } else {
-        mimeType = QString::fromLatin1( junks[start + 1].toLower() );
-      }
+
+    if (junks[start].toUpper() == AKONADI_PARAM_CHARSET) {
+        if (junks.count() <= (start + 2)) {
+            return QString();
+        }
+        if (junks[start + 2].toUpper() == AKONADI_PARAM_MIMETYPE) {
+            if (junks.count() <= (start + 3)) {
+                return QString();
+            } else {
+                mimeType = QString::fromLatin1(junks[start + 3].toLower());
+            }
+        }
+    } else {
+        if (junks[start].toUpper() == AKONADI_PARAM_MIMETYPE) {
+            if (junks.count() <= (start + 1)) {
+                return QString();
+            } else {
+                mimeType = QString::fromLatin1(junks[start + 1].toLower());
+            }
+        }
     }
-  }
 
-  if ( mimeType.isEmpty() ) {
-    mimeType = QString::fromLatin1( "message/rfc822" );
-  }
+    if (mimeType.isEmpty()) {
+        mimeType = QString::fromLatin1("message/rfc822");
+    }
 
-  return mimeType;
+    return mimeType;
 }
 
-
-QVector<qint64> SearchHelper::listCollectionsRecursive( const QVector<qint64> \
&ancestors, const QStringList &mimeTypes ) +QVector<qint64> \
SearchHelper::listCollectionsRecursive(const QVector<qint64> &ancestors, const \
QStringList &mimeTypes)  {
-  QVector<qint64> recursiveChildren;
-  Q_FOREACH ( qint64 ancestor, ancestors ) {
-    QVector<qint64> searchChildren;
-
-    { // Free the query before entering recursion to prevent too many opened \
                connections
-
-      Query::Condition mimeTypeCondition;
-      mimeTypeCondition.addColumnCondition( \
CollectionMimeTypeRelation::rightFullColumnName(), Query::Equals, \
                MimeType::idFullColumnName() );
-      // Exclude top-level collections and collections that cannot have items!
-      mimeTypeCondition.addValueCondition( MimeType::nameFullColumnName(), \
                Query::NotEquals, QLatin1String( "inode/directory" ) );
-      if ( !mimeTypes.isEmpty() ) {
-        mimeTypeCondition.addValueCondition( MimeType::nameFullColumnName(), \
                Query::In, mimeTypes );
-      }
-
-      CountQueryBuilder qb( Collection::tableName(), MimeType::nameFullColumnName(), \
                CountQueryBuilder::All );
-      qb.addColumn( Collection::idFullColumnName() );
-      qb.addJoin( QueryBuilder::LeftJoin, CollectionMimeTypeRelation::tableName(), \
                CollectionMimeTypeRelation::leftFullColumnName(), \
                Collection::idFullColumnName() );
-      qb.addJoin( QueryBuilder::LeftJoin, MimeType::tableName(), mimeTypeCondition \
                );
-      if ( ancestor == 0 ) {
-        qb.addValueCondition( Collection::parentIdFullColumnName(), Query::Is, \
                QVariant() );
-      } else {
-        // Also include current ancestor's result, so that we know whether we should \
                search in the ancestor too
-        Query::Condition idCond( Query::Or );
-        idCond.addValueCondition( Collection::parentIdFullColumnName(), \
                Query::Equals, ancestor );
-        idCond.addValueCondition( Collection::idFullColumnName(), Query::Equals, \
                ancestor );
-        qb.addCondition( idCond );
-      }
-      qb.addValueCondition( Collection::isVirtualFullColumnName(), Query::Equals, \
                false );
-      qb.addGroupColumn( Collection::idFullColumnName() );
-      qb.exec();
-
-      QSqlQuery query = qb.query();
-      while ( query.next() ) {
-        const qint64 id = query.value( 1 ).toLongLong();
-        // Don't add ancestor into search children, we are resolving it right now
-        if ( id != ancestor ) {
-          searchChildren << id;
+    QVector<qint64> recursiveChildren;
+    Q_FOREACH (qint64 ancestor, ancestors) {
+        QVector<qint64> searchChildren;
+
+        {   // Free the query before entering recursion to prevent too many opened \
connections +
+            Query::Condition mimeTypeCondition;
+            mimeTypeCondition.addColumnCondition(CollectionMimeTypeRelation::rightFullColumnName(), \
Query::Equals, MimeType::idFullColumnName()); +            // Exclude top-level \
collections and collections that cannot have items! +            \
mimeTypeCondition.addValueCondition(MimeType::nameFullColumnName(), Query::NotEquals, \
QLatin1String("inode/directory")); +            if (!mimeTypes.isEmpty()) {
+                mimeTypeCondition.addValueCondition(MimeType::nameFullColumnName(), \
Query::In, mimeTypes); +            }
+
+            CountQueryBuilder qb(Collection::tableName(), \
MimeType::nameFullColumnName(), CountQueryBuilder::All); +            \
qb.addColumn(Collection::idFullColumnName()); +            \
qb.addJoin(QueryBuilder::LeftJoin, CollectionMimeTypeRelation::tableName(), \
CollectionMimeTypeRelation::leftFullColumnName(), Collection::idFullColumnName()); +  \
qb.addJoin(QueryBuilder::LeftJoin, MimeType::tableName(), mimeTypeCondition); +       \
if (ancestor == 0) { +                \
qb.addValueCondition(Collection::parentIdFullColumnName(), Query::Is, QVariant()); +  \
} else { +                // Also include current ancestor's result, so that we know \
whether we should search in the ancestor too +                Query::Condition \
idCond(Query::Or); +                \
idCond.addValueCondition(Collection::parentIdFullColumnName(), Query::Equals, \
ancestor); +                idCond.addValueCondition(Collection::idFullColumnName(), \
Query::Equals, ancestor); +                qb.addCondition(idCond);
+            }
+            qb.addValueCondition(Collection::isVirtualFullColumnName(), \
Query::Equals, false); +            \
qb.addGroupColumn(Collection::idFullColumnName()); +            qb.exec();
+
+            QSqlQuery query = qb.query();
+            while (query.next()) {
+                const qint64 id = query.value(1).toLongLong();
+                // Don't add ancestor into search children, we are resolving it \
right now +                if (id != ancestor) {
+                    searchChildren << id;
+                }
+                if (query.value(0).toInt() > 0) {     // count( mimeTypeTable.name ) \
> 0 +                    recursiveChildren << id;
+                }
+            }
         }
-        if ( query.value( 0 ).toInt() > 0 ) { // count( mimeTypeTable.name ) > 0
-          recursiveChildren << id;
+        if (!searchChildren.isEmpty()) {
+            recursiveChildren << listCollectionsRecursive(searchChildren, \
mimeTypes);  }
-      }
-    }
-    if ( !searchChildren.isEmpty() ) {
-      recursiveChildren << listCollectionsRecursive( searchChildren, mimeTypes );
     }
-  }
 
-  return recursiveChildren;
+    return recursiveChildren;
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic