[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