diff options
author | Eric Springer <eric.springer@nokia.com> | 2011-03-22 16:59:59 +1000 |
---|---|---|
committer | Eric Springer <eric.springer@nokia.com> | 2011-03-22 16:59:59 +1000 |
commit | 223338ed27451620885bfc55bfa940508cc484b1 (patch) | |
tree | 3e9d53b39a785cdc66bc19cf3691a63dd4ac5949 | |
parent | 3f577336ad534127d03b2143c3161b12499faab9 (diff) |
Fix database failure when a message predecessor no longer exists
-rw-r--r-- | src/libraries/qmfclient/qmailstore_p.cpp | 26 |
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()) { |