Bug 45668. Use Mork's 'row level APIs' instead of the cell level APIs to avoid excess object creation. r=bienvenu.

This commit is contained in:
waterson%netscape.com 2000-07-26 23:54:37 +00:00
Родитель 1a83ee0a8b
Коммит bc732f5844
1 изменённых файлов: 20 добавлений и 53 удалений

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

@ -535,12 +535,9 @@ nsGlobalHistory::AddPage(const char *aURL, const char *aReferrerURL, PRInt64 aDa
if (row) {
// Update last visit date. First get the old date so we can update observers...
nsMdbPtr<nsIMdbCell> lastvisitdate(mEnv);
err = row->GetCell(mEnv, kToken_LastVisitDateColumn, getter_Acquires(lastvisitdate));
err = row->AliasCellYarn(mEnv, kToken_LastVisitDateColumn, &yarn);
if (err != 0) return NS_ERROR_FAILURE;
lastvisitdate->AliasYarn(mEnv, &yarn);
PRInt64 oldvalue;
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, &oldvalue);
if (NS_FAILED(rv)) return rv;
@ -671,13 +668,12 @@ nsGlobalHistory::SetPageTitle(const char *aURL, const PRUnichar *aTitle)
// Get the old title so we can notify observers
nsMdbPtr<nsIMdbCell> cell(mEnv);
err = row->GetCell(mEnv, kToken_NameColumn, getter_Acquires(cell));
err = row->AliasCellYarn(mEnv, kToken_NameColumn, &yarn);
if (err != 0) return NS_ERROR_FAILURE;
nsresult rv;
nsCOMPtr<nsIRDFLiteral> oldname;
if (cell) {
cell->AliasYarn(mEnv, &yarn);
if (yarn.mYarn_Fill) {
nsAutoString str((const PRUnichar*) yarn.mYarn_Buf, PRInt32(yarn.mYarn_Fill / sizeof(PRUnichar)));
rv = gRDFService->GetLiteral(str.GetUnicode(), getter_AddRefs(oldname));
@ -740,12 +736,9 @@ nsGlobalHistory::GetLastVisitDate(const char *aURL, PRInt64 *_retval)
if (err != 0) return NS_ERROR_FAILURE;
if (row) {
nsMdbPtr<nsIMdbCell> lastvisitdate(mEnv);
err = row->GetCell(mEnv, kToken_LastVisitDateColumn, getter_Acquires(lastvisitdate));
err = row->AliasCellYarn(mEnv, kToken_LastVisitDateColumn, &yarn);
if (err != 0) return NS_ERROR_FAILURE;
lastvisitdate->AliasYarn(mEnv, &yarn);
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, _retval);
if (NS_FAILED(rv)) return rv;
}
@ -1070,14 +1063,9 @@ nsGlobalHistory::GetTarget(nsIRDFResource* aSource,
// cell they want out of it.
if (aProperty == kNC_Date) {
// Last visit date
nsMdbPtr<nsIMdbCell> cell(mEnv);
err = row->GetCell(mEnv, kToken_LastVisitDateColumn, getter_Acquires(cell));
err = row->AliasCellYarn(mEnv, kToken_LastVisitDateColumn, &yarn);
if (err != 0) return NS_ERROR_FAILURE;
if (!cell) return NS_RDF_NO_VALUE;
cell->AliasYarn(mEnv, &yarn);
PRInt64 i;
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, &i);
if (NS_FAILED(rv)) return rv;
@ -1095,14 +1083,9 @@ nsGlobalHistory::GetTarget(nsIRDFResource* aSource,
}
else if (aProperty == kNC_Name) {
// Site name (i.e., page title)
nsMdbPtr<nsIMdbCell> cell(mEnv);
err = row->GetCell(mEnv, kToken_NameColumn, getter_Acquires(cell));
err = row->AliasCellYarn(mEnv, kToken_NameColumn, &yarn);
if (err != 0) return NS_ERROR_FAILURE;
if (!cell) return NS_RDF_NO_VALUE;
cell->AliasYarn(mEnv, &yarn);
// Can't alias, because we don't store the terminating null
// character in the db.
len = yarn.mYarn_Fill / sizeof(PRUnichar);
@ -1116,14 +1099,9 @@ nsGlobalHistory::GetTarget(nsIRDFResource* aSource,
}
else if (aProperty == kNC_Referrer) {
// Referrer field
nsMdbPtr<nsIMdbCell> cell(mEnv);
err = row->GetCell(mEnv, kToken_ReferrerColumn, getter_Acquires(cell));
err = row->AliasCellYarn(mEnv, kToken_ReferrerColumn, &yarn);
if (err != 0) return NS_ERROR_FAILURE;
if (!cell) return NS_RDF_NO_VALUE;
cell->AliasYarn(mEnv, &yarn);
// XXX Could probably alias the buffer here to avoid copy
nsCAutoString str((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill);
@ -1850,12 +1828,8 @@ nsGlobalHistory::URLEnumerator::IsResult(nsIMdbRow* aRow)
if (mSelectColumn) {
mdb_err err;
nsMdbPtr<nsIMdbCell> cell(mEnv);
err = mCurrent->GetCell(mEnv, mURLColumn, getter_Acquires(cell));
if (err != 0) return PR_FALSE;
mdbYarn yarn;
err = cell->AliasYarn(mEnv, &yarn);
err = mCurrent->AliasCellYarn(mEnv, mURLColumn, &yarn);
if (err != 0) return PR_FALSE;
// Do bitwise comparison
@ -1880,29 +1854,22 @@ nsGlobalHistory::URLEnumerator::ConvertToISupports(nsIMdbRow* aRow, nsISupports*
{
mdb_err err;
nsMdbPtr<nsIMdbCell> cell(mEnv);
err = mCurrent->GetCell(mEnv, mURLColumn, getter_Acquires(cell));
mdbYarn yarn;
err = mCurrent->AliasCellYarn(mEnv, mURLColumn, &yarn);
if (err != 0) return NS_ERROR_FAILURE;
nsresult rv = NS_ERROR_FAILURE;
// Since the URLEnumerator always returns the value of the URL
// column, we create an RDF resource.
nsCAutoString uri((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill);
// XXX cell might be null if no value set
mdbYarn yarn;
err = cell->AliasYarn(mEnv, &yarn);
if (err == 0) {
// Since the URLEnumerator always returns the value of the URL
// column, we create an RDF resource.
nsCAutoString uri((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill);
nsresult rv;
nsCOMPtr<nsIRDFResource> resource;
rv = gRDFService->GetResource(uri, getter_AddRefs(resource));
if (NS_FAILED(rv)) return rv;
nsCOMPtr<nsIRDFResource> resource;
rv = gRDFService->GetResource(uri, getter_AddRefs(resource));
if (NS_SUCCEEDED(rv)) {
*aResult = resource;
NS_ADDREF(*aResult);
}
}
return rv;
*aResult = resource;
NS_ADDREF(*aResult);
return NS_OK;
}