mdb_err err; nsresult rv;  if (!mTable) return NS_ERROR_NOT_INITIALIZED;  nsCOMPtr<nsIMdbRow> row; rv = FindRow(kToken_URLColumn, aURL, getter_AddRefs(row)); if (NS_FAILED(rv)) return NS_OK;   err = mTable->CutRow(mEnv, row); NS_ENSURE_TRUE(err == 0, NS_ERROR_FAILURE);     if (!mBatchesInProgress) {  nsCOMPtr<nsIRDFResource> oldRowResource; gRDFService->GetResource(nsDependentCString(aURL), getter_AddRefs(oldRowResource)); NotifyFindUnassertions(oldRowResource, row); }   err = row->CutAllColumns(mEnv); NS_ASSERTION(err == 0, "couldn't cut all columns");  return NS_OK;
NS_NOTYETIMPLEMENTED("write me"); return NS_ERROR_NOT_IMPLEMENTED;
nsGlobalHistory::RemovePage(const char *aURL){  mdb_err err;  nsresult rv;  if (!mTable) return NS_ERROR_NOT_INITIALIZED;  // find the old row, ignore it if we don't have it  nsCOMPtr<nsIMdbRow> row;  rv = FindRow(kToken_URLColumn, aURL, getter_AddRefs(row));  if (NS_FAILED(rv)) return NS_OK;  // remove the row  err = mTable->CutRow(mEnv, row);  NS_ENSURE_TRUE(err == 0, NS_ERROR_FAILURE);  // if there are batches in progress, we don't want to notify  // observers that we're deleting items. the caller promises  // to handle whatever UI updating is necessary when we're finished.    if (!mBatchesInProgress) {    // get the resource so we can do the notification    nsCOMPtr<nsIRDFResource> oldRowResource;    gRDFService->GetResource(nsDependentCString(aURL), getter_AddRefs(oldRowResource));    NotifyFindUnassertions(oldRowResource, row);  }  // not a fatal error if we can't cut all column  err = row->CutAllColumns(mEnv);  NS_ASSERTION(err == 0, "couldn't cut all columns");  return NS_OK;}