зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
1a83ee0a8b
Коммит
bc732f5844
|
@ -535,12 +535,9 @@ nsGlobalHistory::AddPage(const char *aURL, const char *aReferrerURL, PRInt64 aDa
|
||||||
|
|
||||||
if (row) {
|
if (row) {
|
||||||
// Update last visit date. First get the old date so we can update observers...
|
// Update last visit date. First get the old date so we can update observers...
|
||||||
nsMdbPtr<nsIMdbCell> lastvisitdate(mEnv);
|
err = row->AliasCellYarn(mEnv, kToken_LastVisitDateColumn, &yarn);
|
||||||
err = row->GetCell(mEnv, kToken_LastVisitDateColumn, getter_Acquires(lastvisitdate));
|
|
||||||
if (err != 0) return NS_ERROR_FAILURE;
|
if (err != 0) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
lastvisitdate->AliasYarn(mEnv, &yarn);
|
|
||||||
|
|
||||||
PRInt64 oldvalue;
|
PRInt64 oldvalue;
|
||||||
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, &oldvalue);
|
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, &oldvalue);
|
||||||
if (NS_FAILED(rv)) return rv;
|
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
|
// Get the old title so we can notify observers
|
||||||
nsMdbPtr<nsIMdbCell> cell(mEnv);
|
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 (err != 0) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
nsCOMPtr<nsIRDFLiteral> oldname;
|
nsCOMPtr<nsIRDFLiteral> oldname;
|
||||||
if (cell) {
|
if (yarn.mYarn_Fill) {
|
||||||
cell->AliasYarn(mEnv, &yarn);
|
|
||||||
nsAutoString str((const PRUnichar*) yarn.mYarn_Buf, PRInt32(yarn.mYarn_Fill / sizeof(PRUnichar)));
|
nsAutoString str((const PRUnichar*) yarn.mYarn_Buf, PRInt32(yarn.mYarn_Fill / sizeof(PRUnichar)));
|
||||||
|
|
||||||
rv = gRDFService->GetLiteral(str.GetUnicode(), getter_AddRefs(oldname));
|
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 (err != 0) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
if (row) {
|
if (row) {
|
||||||
nsMdbPtr<nsIMdbCell> lastvisitdate(mEnv);
|
err = row->AliasCellYarn(mEnv, kToken_LastVisitDateColumn, &yarn);
|
||||||
err = row->GetCell(mEnv, kToken_LastVisitDateColumn, getter_Acquires(lastvisitdate));
|
|
||||||
if (err != 0) return NS_ERROR_FAILURE;
|
if (err != 0) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
lastvisitdate->AliasYarn(mEnv, &yarn);
|
|
||||||
|
|
||||||
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, _retval);
|
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, _retval);
|
||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
}
|
}
|
||||||
|
@ -1070,14 +1063,9 @@ nsGlobalHistory::GetTarget(nsIRDFResource* aSource,
|
||||||
// cell they want out of it.
|
// cell they want out of it.
|
||||||
if (aProperty == kNC_Date) {
|
if (aProperty == kNC_Date) {
|
||||||
// Last visit date
|
// Last visit date
|
||||||
nsMdbPtr<nsIMdbCell> cell(mEnv);
|
err = row->AliasCellYarn(mEnv, kToken_LastVisitDateColumn, &yarn);
|
||||||
err = row->GetCell(mEnv, kToken_LastVisitDateColumn, getter_Acquires(cell));
|
|
||||||
if (err != 0) return NS_ERROR_FAILURE;
|
if (err != 0) return NS_ERROR_FAILURE;
|
||||||
|
|
||||||
if (!cell) return NS_RDF_NO_VALUE;
|
|
||||||
|
|
||||||
cell->AliasYarn(mEnv, &yarn);
|
|
||||||
|
|
||||||
PRInt64 i;
|
PRInt64 i;
|
||||||
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, &i);
|
rv = CharsToPRInt64((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill, &i);
|
||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
@ -1095,14 +1083,9 @@ nsGlobalHistory::GetTarget(nsIRDFResource* aSource,
|
||||||
}
|
}
|
||||||
else if (aProperty == kNC_Name) {
|
else if (aProperty == kNC_Name) {
|
||||||
// Site name (i.e., page title)
|
// Site name (i.e., page title)
|
||||||
nsMdbPtr<nsIMdbCell> cell(mEnv);
|
err = row->AliasCellYarn(mEnv, kToken_NameColumn, &yarn);
|
||||||
err = row->GetCell(mEnv, kToken_NameColumn, getter_Acquires(cell));
|
|
||||||
if (err != 0) return NS_ERROR_FAILURE;
|
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
|
// Can't alias, because we don't store the terminating null
|
||||||
// character in the db.
|
// character in the db.
|
||||||
len = yarn.mYarn_Fill / sizeof(PRUnichar);
|
len = yarn.mYarn_Fill / sizeof(PRUnichar);
|
||||||
|
@ -1116,14 +1099,9 @@ nsGlobalHistory::GetTarget(nsIRDFResource* aSource,
|
||||||
}
|
}
|
||||||
else if (aProperty == kNC_Referrer) {
|
else if (aProperty == kNC_Referrer) {
|
||||||
// Referrer field
|
// Referrer field
|
||||||
nsMdbPtr<nsIMdbCell> cell(mEnv);
|
err = row->AliasCellYarn(mEnv, kToken_ReferrerColumn, &yarn);
|
||||||
err = row->GetCell(mEnv, kToken_ReferrerColumn, getter_Acquires(cell));
|
|
||||||
if (err != 0) return NS_ERROR_FAILURE;
|
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
|
// XXX Could probably alias the buffer here to avoid copy
|
||||||
nsCAutoString str((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill);
|
nsCAutoString str((const char*) yarn.mYarn_Buf, yarn.mYarn_Fill);
|
||||||
|
|
||||||
|
@ -1850,12 +1828,8 @@ nsGlobalHistory::URLEnumerator::IsResult(nsIMdbRow* aRow)
|
||||||
if (mSelectColumn) {
|
if (mSelectColumn) {
|
||||||
mdb_err err;
|
mdb_err err;
|
||||||
|
|
||||||
nsMdbPtr<nsIMdbCell> cell(mEnv);
|
|
||||||
err = mCurrent->GetCell(mEnv, mURLColumn, getter_Acquires(cell));
|
|
||||||
if (err != 0) return PR_FALSE;
|
|
||||||
|
|
||||||
mdbYarn yarn;
|
mdbYarn yarn;
|
||||||
err = cell->AliasYarn(mEnv, &yarn);
|
err = mCurrent->AliasCellYarn(mEnv, mURLColumn, &yarn);
|
||||||
if (err != 0) return PR_FALSE;
|
if (err != 0) return PR_FALSE;
|
||||||
|
|
||||||
// Do bitwise comparison
|
// Do bitwise comparison
|
||||||
|
@ -1880,29 +1854,22 @@ nsGlobalHistory::URLEnumerator::ConvertToISupports(nsIMdbRow* aRow, nsISupports*
|
||||||
{
|
{
|
||||||
mdb_err err;
|
mdb_err err;
|
||||||
|
|
||||||
nsMdbPtr<nsIMdbCell> cell(mEnv);
|
mdbYarn yarn;
|
||||||
err = mCurrent->GetCell(mEnv, mURLColumn, getter_Acquires(cell));
|
err = mCurrent->AliasCellYarn(mEnv, mURLColumn, &yarn);
|
||||||
if (err != 0) return NS_ERROR_FAILURE;
|
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
|
nsresult rv;
|
||||||
mdbYarn yarn;
|
nsCOMPtr<nsIRDFResource> resource;
|
||||||
err = cell->AliasYarn(mEnv, &yarn);
|
rv = gRDFService->GetResource(uri, getter_AddRefs(resource));
|
||||||
if (err == 0) {
|
if (NS_FAILED(rv)) return rv;
|
||||||
// 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);
|
|
||||||
|
|
||||||
nsCOMPtr<nsIRDFResource> resource;
|
*aResult = resource;
|
||||||
rv = gRDFService->GetResource(uri, getter_AddRefs(resource));
|
NS_ADDREF(*aResult);
|
||||||
if (NS_SUCCEEDED(rv)) {
|
return NS_OK;
|
||||||
*aResult = resource;
|
|
||||||
NS_ADDREF(*aResult);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче