static void get_db_infos(ClusterInfo *cluster);
-static void dbarr_print(ClusterInfo *cluster);
-static void relarr_print(RelInfoArr *arr);
-static void get_rel_infos(ClusterInfo *cluster, const int dbnum);
-static void relarr_free(RelInfoArr *rel_arr);
-static void map_rel(const RelInfo *oldrel,
- const RelInfo *newrel, const DbInfo *old_db,
- const DbInfo *new_db, const char *olddata,
- const char *newdata, FileNameMap *map);
-static void map_rel_by_id(Oid oldid, Oid newid,
- const char *old_nspname, const char *old_relname,
- const char *new_nspname, const char *new_relname,
- const char *old_tablespace, const DbInfo *old_db,
- const DbInfo *new_db, const char *olddata,
- const char *newdata, FileNameMap *map);
-static RelInfo *relarr_lookup_reloid(ClusterInfo *cluster, RelInfoArr *rel_arr,
- Oid oid);
-static RelInfo *relarr_lookup_rel(ClusterInfo *cluster, RelInfoArr *rel_arr,
+static void print_db_arr(ClusterInfo *cluster);
+static void print_rel_arr(RelInfoArr *arr);
+static void get_rel_infos(ClusterInfo *cluster, DbInfo *dbinfo);
+static void free_rel_arr(RelInfoArr *rel_arr);
+static void create_rel_filename_map(const char *old_data, const char *new_data,
+ const DbInfo *old_db, const DbInfo *new_db,
+ const RelInfo *old_rel, const RelInfo *new_rel,
+ FileNameMap *map);
+static RelInfo *relarr_lookup_rel_name(ClusterInfo *cluster, RelInfoArr *rel_arr,
const char *nspname, const char *relname);
+static RelInfo *relarr_lookup_rel_oid(ClusterInfo *cluster, RelInfoArr *rel_arr,
+ Oid oid);
/*
if (strcmp(newrel->nspname, "pg_toast") == 0)
continue;
- oldrel = relarr_lookup_rel(&old_cluster, &old_db->rel_arr,
+ oldrel = relarr_lookup_rel_name(&old_cluster, &old_db->rel_arr,
newrel->nspname, newrel->relname);
- map_rel(oldrel, newrel, old_db, new_db, old_pgdata, new_pgdata,
- maps + num_maps);
+ create_rel_filename_map(old_pgdata, new_pgdata, old_db, new_db,
+ oldrel, newrel, maps + num_maps);
num_maps++;
/*
char old_name[MAXPGPATH];
/* construct the new and old relnames for the toast relation */
- snprintf(old_name, sizeof(old_name), "pg_toast_%u",
- oldrel->reloid);
- snprintf(new_name, sizeof(new_name), "pg_toast_%u",
- newrel->reloid);
+ snprintf(old_name, sizeof(old_name), "pg_toast_%u", oldrel->reloid);
+ snprintf(new_name, sizeof(new_name), "pg_toast_%u", newrel->reloid);
/* look them up in their respective arrays */
- old_toast = relarr_lookup_reloid(&old_cluster, &old_db->rel_arr,
+ old_toast = relarr_lookup_rel_oid(&old_cluster, &old_db->rel_arr,
oldrel->toastrelid);
- new_toast = relarr_lookup_rel(&new_cluster, &new_db->rel_arr,
+ new_toast = relarr_lookup_rel_name(&new_cluster, &new_db->rel_arr,
"pg_toast", new_name);
/* finally create a mapping for them */
- map_rel(old_toast, new_toast, old_db, new_db, old_pgdata, new_pgdata,
- maps + num_maps);
+ create_rel_filename_map(old_pgdata, new_pgdata, old_db, new_db,
+ old_toast, new_toast, maps + num_maps);
num_maps++;
/*
newrel->reloid);
/* look them up in their respective arrays */
- /* we lose our cache location here */
- old_toast = relarr_lookup_rel(&old_cluster, &old_db->rel_arr,
+ old_toast = relarr_lookup_rel_name(&old_cluster, &old_db->rel_arr,
"pg_toast", old_name);
- new_toast = relarr_lookup_rel(&new_cluster, &new_db->rel_arr,
+ new_toast = relarr_lookup_rel_name(&new_cluster, &new_db->rel_arr,
"pg_toast", new_name);
/* finally create a mapping for them */
- map_rel(old_toast, new_toast, old_db, new_db, old_pgdata,
- new_pgdata, maps + num_maps);
+ create_rel_filename_map(old_pgdata, new_pgdata, old_db,
+ new_db, old_toast, new_toast, maps + num_maps);
num_maps++;
}
}
}
-static void
-map_rel(const RelInfo *oldrel, const RelInfo *newrel,
- const DbInfo *old_db, const DbInfo *new_db, const char *olddata,
- const char *newdata, FileNameMap *map)
-{
- map_rel_by_id(oldrel->relfilenode, newrel->relfilenode, oldrel->nspname,
- oldrel->relname, newrel->nspname, newrel->relname, oldrel->tablespace, old_db,
- new_db, olddata, newdata, map);
-}
-
-
/*
- * map_rel_by_id()
+ * create_rel_filename_map()
*
* fills a file node map structure and returns it in "map".
*/
static void
-map_rel_by_id(Oid oldid, Oid newid,
- const char *old_nspname, const char *old_relname,
- const char *new_nspname, const char *new_relname,
- const char *old_tablespace, const DbInfo *old_db,
- const DbInfo *new_db, const char *olddata,
- const char *newdata, FileNameMap *map)
+create_rel_filename_map(const char *old_data, const char *new_data,
+ const DbInfo *old_db, const DbInfo *new_db,
+ const RelInfo *old_rel, const RelInfo *new_rel,
+ FileNameMap *map)
{
- map->old_relfilenode = oldid;
- map->new_relfilenode = newid;
+ map->old_relfilenode = old_rel->relfilenode;
+ map->new_relfilenode = new_rel->relfilenode;
+
+ snprintf(map->old_nspname, sizeof(map->old_nspname), "%s", old_rel->nspname);
+ snprintf(map->new_nspname, sizeof(map->new_nspname), "%s", new_rel->nspname);
- snprintf(map->old_nspname, sizeof(map->old_nspname), "%s", old_nspname);
- snprintf(map->old_relname, sizeof(map->old_relname), "%s", old_relname);
- snprintf(map->new_nspname, sizeof(map->new_nspname), "%s", new_nspname);
- snprintf(map->new_relname, sizeof(map->new_relname), "%s", new_relname);
+ snprintf(map->old_relname, sizeof(map->old_relname), "%s", old_rel->relname);
+ snprintf(map->new_relname, sizeof(map->new_relname), "%s", new_rel->relname);
- if (strlen(old_tablespace) == 0)
+ if (strlen(old_rel->tablespace) == 0)
{
/*
- * relation belongs to the default tablespace, hence relfiles would
+ * relation belongs to the default tablespace, hence relfiles should
* exist in the data directories.
*/
- snprintf(map->old_dir, sizeof(map->old_dir), "%s/base/%u", olddata, old_db->db_oid);
- snprintf(map->new_dir, sizeof(map->new_dir), "%s/base/%u", newdata, new_db->db_oid);
+ snprintf(map->old_dir, sizeof(map->old_dir), "%s/base/%u", old_data,
+ old_db->db_oid);
+ snprintf(map->new_dir, sizeof(map->new_dir), "%s/base/%u", new_data,
+ new_db->db_oid);
}
else
{
/*
- * relation belongs to some tablespace, hence copy its physical
- * location
+ * relation belongs to some tablespace, so use the tablespace location
*/
- snprintf(map->old_dir, sizeof(map->old_dir), "%s%s/%u", old_tablespace,
+ snprintf(map->old_dir, sizeof(map->old_dir), "%s%s/%u", old_rel->tablespace,
old_cluster.tablespace_suffix, old_db->db_oid);
- snprintf(map->new_dir, sizeof(map->new_dir), "%s%s/%u", old_tablespace,
+ snprintf(map->new_dir, sizeof(map->new_dir), "%s%s/%u", new_rel->tablespace,
new_cluster.tablespace_suffix, new_db->db_oid);
}
}
get_db_infos(cluster);
for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
- get_rel_infos(cluster, dbnum);
+ get_rel_infos(cluster, &cluster->dbarr.dbs[dbnum]);
if (log_opts.debug)
- dbarr_print(cluster);
+ print_db_arr(cluster);
}
* FirstNormalObjectId belongs to the user
*/
static void
-get_rel_infos(ClusterInfo *cluster, const int dbnum)
+get_rel_infos(ClusterInfo *cluster, DbInfo *dbinfo)
{
PGconn *conn = connectToServer(cluster,
- cluster->dbarr.dbs[dbnum].db_name);
+ dbinfo->db_name);
PGresult *res;
RelInfo *relinfos;
int ntups;
tblspace = PQgetvalue(res, relnum, i_spclocation);
/* if no table tablespace, use the database tablespace */
if (strlen(tblspace) == 0)
- tblspace = cluster->dbarr.dbs[dbnum].db_tblspace;
+ tblspace = dbinfo->db_tblspace;
strlcpy(curr->tablespace, tblspace, sizeof(curr->tablespace));
}
PQclear(res);
PQfinish(conn);
- cluster->dbarr.dbs[dbnum].rel_arr.rels = relinfos;
- cluster->dbarr.dbs[dbnum].rel_arr.nrels = num_rels;
- cluster->dbarr.dbs[dbnum].rel_arr.last_relname_lookup = 0;
+ dbinfo->rel_arr.rels = relinfos;
+ dbinfo->rel_arr.nrels = num_rels;
+ dbinfo->rel_arr.last_relname_lookup = 0;
}
/*
- * relarr_lookup_rel()
+ * relarr_lookup_rel_name()
*
* Searches "relname" in rel_arr. Returns the *real* pointer to the
* RelInfo structure.
*/
static RelInfo *
-relarr_lookup_rel(ClusterInfo *cluster, RelInfoArr *rel_arr,
+relarr_lookup_rel_name(ClusterInfo *cluster, RelInfoArr *rel_arr,
const char *nspname, const char *relname)
{
int relnum;
/*
- * relarr_lookup_reloid()
+ * relarr_lookup_rel_oid()
*
* Returns a pointer to the RelInfo structure for the
* given oid or NULL if the desired entry cannot be
* found.
*/
static RelInfo *
-relarr_lookup_reloid(ClusterInfo *cluster, RelInfoArr *rel_arr, Oid oid)
+relarr_lookup_rel_oid(ClusterInfo *cluster, RelInfoArr *rel_arr, Oid oid)
{
int relnum;
static void
-relarr_free(RelInfoArr *rel_arr)
+free_rel_arr(RelInfoArr *rel_arr)
{
pg_free(rel_arr->rels);
rel_arr->nrels = 0;
int dbnum;
for (dbnum = 0; dbnum < db_arr->ndbs; dbnum++)
- relarr_free(&db_arr->dbs[dbnum].rel_arr);
+ free_rel_arr(&db_arr->dbs[dbnum].rel_arr);
db_arr->ndbs = 0;
}
static void
-dbarr_print(ClusterInfo *cluster)
+print_db_arr(ClusterInfo *cluster)
{
int dbnum;
for (dbnum = 0; dbnum < cluster->dbarr.ndbs; dbnum++)
{
pg_log(PG_DEBUG, "Database: %s\n", cluster->dbarr.dbs[dbnum].db_name);
- relarr_print(&cluster->dbarr.dbs[dbnum].rel_arr);
+ print_rel_arr(&cluster->dbarr.dbs[dbnum].rel_arr);
pg_log(PG_DEBUG, "\n\n");
}
}
static void
-relarr_print(RelInfoArr *arr)
+print_rel_arr(RelInfoArr *arr)
{
int relnum;