Bug 219552 Improve performance of RowCellColumnToCollationKey r=bienvenu sr=mscott

This commit is contained in:
neil%parkwaycc.co.uk 2003-09-24 08:18:45 +00:00
Родитель 13730671b8
Коммит ac81abb307
2 изменённых файлов: 23 добавлений и 10 удалений

Просмотреть файл

@ -262,8 +262,8 @@ interface nsIMsgDatabase : nsIDBChangeAnnouncer {
attribute nsMsgKey nextPseudoMsgKey; //for undo-redo of move pop->imap
readonly attribute nsMsgKey nextFakeOfflineMsgKey; // for saving "fake" offline msg hdrs
// for sorting
[noscript] void createCollationKey(in wstring sourceString, out octetPtr key, out unsigned long len);
[noscript] long compareCollationKeys(out octet key1, in unsigned long len1, out octet key2, in unsigned long len2);
[noscript] void createCollationKey(in AString sourceString, out octetPtr key, out unsigned long len);
[noscript] long compareCollationKeys(in octetPtr key1, in unsigned long len1, in octetPtr key2, in unsigned long len2);
// when creating a view, the default sort order and view flags
// use these for the default. (this allows news to override, so that

Просмотреть файл

@ -2891,7 +2891,7 @@ nsresult nsMsgDatabase::RowCellColumnToAddressCollationKey(nsIMdbRow *row, mdb_t
}
if (NS_SUCCEEDED(ret))
{
ret = CreateCollationKey(NS_ConvertUTF8toUCS2(name).get(), result, len);
ret = CreateCollationKey(NS_ConvertUTF8toUCS2(name), result, len);
}
return ret;
@ -2935,13 +2935,26 @@ nsresult nsMsgDatabase::GetCollationKeyGenerator()
nsresult nsMsgDatabase::RowCellColumnToCollationKey(nsIMdbRow *row, mdb_token columnToken, PRUint8 **result, PRUint32 *len)
{
nsXPIDLString nakedString;
const char *nakedString = nsnull;
nsresult err;
err = RowCellColumnToMime2DecodedString(row, columnToken, getter_Copies(nakedString));
if (NS_SUCCEEDED(err))
err = CreateCollationKey((const PRUnichar *)nakedString, result, len);
err = RowCellColumnToConstCharPtr(row, columnToken, &nakedString);
if (NS_SUCCEEDED(err) && nakedString && strlen(nakedString))
{
GetMimeConverter();
if (m_mimeConverter)
{
nsXPIDLCString decodedStr;
const char *charSet;
PRBool characterSetOverride;
m_dbFolderInfo->GetConstCharPtrCharacterSet(&charSet);
m_dbFolderInfo->GetCharacterSetOverride(&characterSetOverride);
err = m_mimeConverter->DecodeMimeHeader(nakedString, getter_Copies(decodedStr), charSet, characterSetOverride);
if (NS_SUCCEEDED(err))
err = CreateCollationKey(NS_ConvertUTF8toUCS2(decodedStr), result, len);
}
}
return err;
}
@ -2958,13 +2971,13 @@ nsMsgDatabase::CompareCollationKeys(PRUint8 *key1, PRUint32 len1, PRUint8 *key2,
}
NS_IMETHODIMP
nsMsgDatabase::CreateCollationKey(const PRUnichar *sourceString, PRUint8 **result, PRUint32 *len)
nsMsgDatabase::CreateCollationKey(const nsAString& sourceString, PRUint8 **result, PRUint32 *len)
{
nsresult err = GetCollationKeyGenerator();
NS_ENSURE_SUCCESS(err,err);
if (!m_collationKeyGenerator) return NS_ERROR_FAILURE;
err = m_collationKeyGenerator->AllocateRawSortKey(kCollationCaseInSensitive, nsDependentString(sourceString), result, len);
err = m_collationKeyGenerator->AllocateRawSortKey(kCollationCaseInSensitive, sourceString, result, len);
NS_ENSURE_SUCCESS(err,err);
return err;
}