summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Springer <eric.springer@nokia.com>2011-03-17 15:36:26 +1000
committerEric Springer <eric.springer@nokia.com>2011-03-17 15:36:26 +1000
commit402ae19585cce51000e9a4982214441f811b6945 (patch)
tree93ab145f6c4eeb90456ff3cb28a419bbf372ae34
parentcf15ade62779a45e28df962c713e9e33a23d64bc (diff)
Thread and conversation querying improvements
-rw-r--r--src/libraries/qmfclient/qmailstore_p.cpp35
1 files changed, 13 insertions, 22 deletions
diff --git a/src/libraries/qmfclient/qmailstore_p.cpp b/src/libraries/qmfclient/qmailstore_p.cpp
index f4400c59..62b4271a 100644
--- a/src/libraries/qmfclient/qmailstore_p.cpp
+++ b/src/libraries/qmfclient/qmailstore_p.cpp
@@ -422,7 +422,7 @@ static QMailStorePrivate::MessagePropertyMap messagePropertyMap()
map.insert(QMailMessageKey::ContentIdentifier,"mailfile");
map.insert(QMailMessageKey::InResponseTo,"responseid");
map.insert(QMailMessageKey::ResponseType,"responsetype");
- map.insert(QMailMessageKey::Conversation,"id");
+ map.insert(QMailMessageKey::Conversation,"parentthreadid");
map.insert(QMailMessageKey::CopyServerUid, "copyserveruid");
map.insert(QMailMessageKey::RestoreFolderId, "restorefolderid");
map.insert(QMailMessageKey::ListId, "listid");
@@ -1861,26 +1861,14 @@ QString whereClauseItem<QMailMessageKey>(const QMailMessageKey &, const QMailMes
break;
case QMailMessageKey::Conversation:
- {
- // This desperately needs to be simplified...
- QString nestedAlias1(incrementAlias(alias));
- QString nestedAlias2(incrementAlias(nestedAlias1));
-
- q << baseExpression(columnName, Includes, true);
- q << "( SELECT " << qualifiedName("id", nestedAlias1) << " FROM mailmessages " << nestedAlias1 << " WHERE parentthreadid IN ";
- q << "( SELECT DISTINCT " << qualifiedName("parentthreadid", nestedAlias2) << " FROM mailmessages " << nestedAlias2 << " WHERE ";
-
- if (a.valueList.first().canConvert<QMailMessageKey>()) {
- QMailMessageKey messageKey = a.valueList.first().value<QMailMessageKey>();
- QString nestedAlias3(incrementAlias(nestedAlias2));
-
- q << baseExpression(qualifiedName("id", nestedAlias2), Includes, true) << "( SELECT " << qualifiedName("id", nestedAlias3) << " FROM mailmessages " << nestedAlias3;
- q << store.buildWhereClause(QMailStorePrivate::Key(messageKey, nestedAlias3)) << " )";
- } else {
- q << columnExpression(qualifiedName("id", nestedAlias2), a.op, a.valueList);
- }
+ if (a.valueList.first().canConvert<QMailMessageKey>()) {
+ QMailMessageKey messageKey = a.valueList.first().value<QMailMessageKey>();
+ QString nestedAlias(incrementAlias(alias));
- q << " ) )";
+ q << baseExpression(columnName, a.op, true) << "( SELECT " << qualifiedName("parentthreadid", nestedAlias) << " FROM mailmessages " << nestedAlias;
+ q << store.buildWhereClause(QMailStorePrivate::Key(messageKey, nestedAlias)) << ")";
+ } else {
+ q << expression;
}
break;
case QMailMessageKey::ServerUid:
@@ -2738,7 +2726,7 @@ bool QMailStorePrivate::execute(QSqlQuery& query, bool batch)
}
#ifdef QMAILSTORE_LOG_SQL
- qWarning() << "(" << pid << ")" << qPrintable(queryText(query));
+ qDebug() << "(" << pid << ")" << qPrintable(queryText(query));
#endif
if (!inTransaction) {
@@ -3207,7 +3195,10 @@ QVariantList QMailStorePrivate::whereClauseValues(const Key& key) const
} else if (key.isType<QMailAccountKey>()) {
const QMailAccountKey &accountKey(key.key<QMailAccountKey>());
return ::whereClauseValues(accountKey);
- }
+ } else if (key.isType<QMailThreadKey>()) {
+ const QMailThreadKey &threadKey(key.key<QMailThreadKey>());
+ return ::whereClauseValues(threadKey);
+ }
return QVariantList();
}