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