I have applied the attached patch to clean up pg_upgrade cache lookup
code and remove useless NULL pointer tests.

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/contrib/pg_upgrade/info.c b/contrib/pg_upgrade/info.c
index 257f5a8..67528b0 100644
*** a/contrib/pg_upgrade/info.c
--- b/contrib/pg_upgrade/info.c
*************** gen_db_file_maps(DbInfo *old_db, DbInfo 
*** 74,81 ****
  		num_maps++;
  
  		/*
! 		 * so much for the mapping of this relation. Now we need a mapping for
! 		 * its corresponding toast relation if any.
  		 */
  		if (oldrel->toastrelid > 0)
  		{
--- 74,81 ----
  		num_maps++;
  
  		/*
! 		 * So much for mapping this relation;  now we need a mapping
! 		 * for its corresponding toast relation, if any.
  		 */
  		if (oldrel->toastrelid > 0)
  		{
*************** gen_db_file_maps(DbInfo *old_db, DbInfo 
*** 117,122 ****
--- 117,123 ----
  					 newrel->reloid);
  
  			/* look them up in their respective arrays */
+ 			/* we lose our cache location here */
  			old_toast = relarr_lookup_rel(&old_db->rel_arr,
  										  "pg_toast", old_name, CLUSTER_OLD);
  			new_toast = relarr_lookup_rel(&new_db->rel_arr,
*************** get_rel_infos(const DbInfo *dbinfo, RelI
*** 385,391 ****
  
  	relarr->rels = relinfos;
  	relarr->nrels = num_rels;
! 	relarr->cache_name_rel = 0;
  }
  
  
--- 386,392 ----
  
  	relarr->rels = relinfos;
  	relarr->nrels = num_rels;
! 	relarr->last_relname_lookup = 0;
  }
  
  
*************** dbarr_lookup_db(DbInfoArr *db_arr, const
*** 399,407 ****
  {
  	int			dbnum;
  
- 	if (!db_arr || !db_name)
- 		return NULL;
- 
  	for (dbnum = 0; dbnum < db_arr->ndbs; dbnum++)
  	{
  		if (strcmp(db_arr->dbs[dbnum].db_name, db_name) == 0)
--- 400,405 ----
*************** relarr_lookup_rel(RelInfoArr *rel_arr, c
*** 424,439 ****
  {
  	int			relnum;
  
- 	if (!rel_arr || !relname)
- 		return NULL;
- 
  	/* Test next lookup first, for speed */
! 	if (rel_arr->cache_name_rel + 1 < rel_arr->nrels &&
! 		strcmp(rel_arr->rels[rel_arr->cache_name_rel + 1].nspname, nspname) == 0 &&
! 		strcmp(rel_arr->rels[rel_arr->cache_name_rel + 1].relname, relname) == 0)
  	{
! 		rel_arr->cache_name_rel++;
! 		return &rel_arr->rels[rel_arr->cache_name_rel];
  	}
  
  	for (relnum = 0; relnum < rel_arr->nrels; relnum++)
--- 422,434 ----
  {
  	int			relnum;
  
  	/* Test next lookup first, for speed */
! 	if (rel_arr->last_relname_lookup + 1 < rel_arr->nrels &&
! 		strcmp(rel_arr->rels[rel_arr->last_relname_lookup + 1].nspname, nspname) == 0 &&
! 		strcmp(rel_arr->rels[rel_arr->last_relname_lookup + 1].relname, relname) == 0)
  	{
! 		rel_arr->last_relname_lookup++;
! 		return &rel_arr->rels[rel_arr->last_relname_lookup];
  	}
  
  	for (relnum = 0; relnum < rel_arr->nrels; relnum++)
*************** relarr_lookup_rel(RelInfoArr *rel_arr, c
*** 441,447 ****
  		if (strcmp(rel_arr->rels[relnum].nspname, nspname) == 0 &&
  			strcmp(rel_arr->rels[relnum].relname, relname) == 0)
  		{
! 			rel_arr->cache_name_rel = relnum;
  			return &rel_arr->rels[relnum];
  		}
  	}
--- 436,442 ----
  		if (strcmp(rel_arr->rels[relnum].nspname, nspname) == 0 &&
  			strcmp(rel_arr->rels[relnum].relname, relname) == 0)
  		{
! 			rel_arr->last_relname_lookup = relnum;
  			return &rel_arr->rels[relnum];
  		}
  	}
*************** relarr_lookup_reloid(RelInfoArr *rel_arr
*** 464,472 ****
  {
  	int			relnum;
  
- 	if (!rel_arr || !oid)
- 		return NULL;
- 
  	for (relnum = 0; relnum < rel_arr->nrels; relnum++)
  	{
  		if (rel_arr->rels[relnum].reloid == oid)
--- 459,464 ----
*************** relarr_free(RelInfoArr *rel_arr)
*** 483,489 ****
  {
  	pg_free(rel_arr->rels);
  	rel_arr->nrels = 0;
! 	rel_arr->cache_name_rel = 0;
  }
  
  
--- 475,481 ----
  {
  	pg_free(rel_arr->rels);
  	rel_arr->nrels = 0;
! 	rel_arr->last_relname_lookup = 0;
  }
  
  
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index e40f58d..439c0a7 100644
*** a/contrib/pg_upgrade/pg_upgrade.h
--- b/contrib/pg_upgrade/pg_upgrade.h
*************** typedef struct
*** 78,84 ****
  {
  	RelInfo    *rels;
  	int			nrels;
! 	int			cache_name_rel;	/* cache of last lookup location */
  } RelInfoArr;
  
  /*
--- 78,84 ----
  {
  	RelInfo    *rels;
  	int			nrels;
! 	int			last_relname_lookup;	/* cache of last lookup location */
  } RelInfoArr;
  
  /*
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to