summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Springer <eric.springer@nokia.com>2011-03-22 16:59:59 +1000
committerEric Springer <eric.springer@nokia.com>2011-03-22 16:59:59 +1000
commit223338ed27451620885bfc55bfa940508cc484b1 (patch)
tree3e9d53b39a785cdc66bc19cf3691a63dd4ac5949
parent3f577336ad534127d03b2143c3161b12499faab9 (diff)
Fix database failure when a message predecessor no longer exists
-rw-r--r--src/libraries/qmfclient/qmailstore_p.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/libraries/qmfclient/qmailstore_p.cpp b/src/libraries/qmfclient/qmailstore_p.cpp
index fe4e8590..7b049398 100644
--- a/src/libraries/qmfclient/qmailstore_p.cpp
+++ b/src/libraries/qmfclient/qmailstore_p.cpp
@@ -5063,13 +5063,6 @@ QMailStorePrivate::AttemptResult QMailStorePrivate::attemptAddMessage(QMailMessa
QStringList missingReferences;
bool missingAncestor(false);
- if (!metaData->inResponseTo().isValid()) {
- // Does this message have any references to resolve?
- AttemptResult result = messagePredecessor(metaData, references, baseSubject, replyOrForward, &missingReferences, &missingAncestor);
- if (result != Success)
- return result;
- }
-
// Attach this message to a thread
if (!metaData->parentThreadId().isValid() && metaData->inResponseTo().isValid()) {
QString sql("SELECT parentthreadid FROM mailmessages WHERE id=%1");
@@ -5078,14 +5071,23 @@ QMailStorePrivate::AttemptResult QMailStorePrivate::attemptAddMessage(QMailMessa
if (query.lastError().type() != QSqlError::NoError)
return DatabaseFailure;
- if (!query.next()) {
- qWarning() << "Could not find thread id for inserted message";
+ if (query.next()) {
+ quint64 threadId(extractValue<quint64>(query.value(0)));
+
+ Q_ASSERT(threadId != 0);
+ metaData->setParentThreadId(QMailThreadId(threadId));
+ } else {
+ // Predecessor was deleted
+ metaData->setInResponseTo(QMailMessageId());
return DatabaseFailure;
}
- quint64 threadId(extractValue<quint64>(query.value(0)));
+ }
- Q_ASSERT(threadId != 0);
- metaData->setParentThreadId(QMailThreadId(threadId));
+ if (!metaData->inResponseTo().isValid()) {
+ // Does this message have any references to resolve?
+ AttemptResult result = messagePredecessor(metaData, references, baseSubject, replyOrForward, &missingReferences, &missingAncestor);
+ if (result != Success)
+ return result;
}
if (metaData->parentThreadId().isValid()) {