diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/catalog/catalog.c | 53 | ||||
| -rw-r--r-- | src/backend/utils/adt/dbsize.c | 31 | ||||
| -rw-r--r-- | src/include/catalog/catalog.h | 5 | ||||
| -rw-r--r-- | src/include/catalog/catversion.h | 4 | ||||
| -rw-r--r-- | src/include/storage/relfilenode.h | 4 |
5 files changed, 51 insertions, 46 deletions
diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index eb7b39c86b..733b9d9622 100644 --- a/src/backend/catalog/catalog.c +++ b/src/backend/catalog/catalog.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/catalog/catalog.c,v 1.78 2008/08/11 11:05:10 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/catalog.c,v 1.79 2008/10/06 14:13:17 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -43,8 +43,38 @@ #define OIDCHARS 10 /* max chars printed by %u */ -#define FORKNUMCHARS 1 /* max chars for a fork number */ +#define FORKNAMECHARS 4 /* max chars for a fork name */ +/* + * Lookup table of fork name by fork number. + * + * If you add a new entry, remember to update the errhint below, and the + * documentation for pg_relation_size(). Also keep FORKNAMECHARS above + * up-to-date. + */ +const char *forkNames[] = { + "main", /* MAIN_FORKNUM */ + "fsm" /* FSM_FORKNUM */ +}; + +/* + * forkname_to_number - look up fork number by name + */ +ForkNumber +forkname_to_number(char *forkName) +{ + ForkNumber forkNum; + + for (forkNum = 0; forkNum <= MAX_FORKNUM; forkNum++) + if (strcmp(forkNames[forkNum], forkName) == 0) + return forkNum; + + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("invalid fork name"), + errhint("Valid fork names are 'main' and 'fsm'"))); + return InvalidForkNumber; /* keep compiler quiet */ +} /* * relpath - construct path to a relation's file @@ -61,22 +91,22 @@ relpath(RelFileNode rnode, ForkNumber forknum) { /* Shared system relations live in {datadir}/global */ Assert(rnode.dbNode == 0); - pathlen = 7 + OIDCHARS + 1 + FORKNUMCHARS + 1; + pathlen = 7 + OIDCHARS + 1 + FORKNAMECHARS + 1; path = (char *) palloc(pathlen); if (forknum != MAIN_FORKNUM) - snprintf(path, pathlen, "global/%u_%u", - rnode.relNode, forknum); + snprintf(path, pathlen, "global/%u_%s", + rnode.relNode, forkNames[forknum]); else snprintf(path, pathlen, "global/%u", rnode.relNode); } else if (rnode.spcNode == DEFAULTTABLESPACE_OID) { /* The default tablespace is {datadir}/base */ - pathlen = 5 + OIDCHARS + 1 + OIDCHARS + 1 + FORKNUMCHARS + 1; + pathlen = 5 + OIDCHARS + 1 + OIDCHARS + 1 + FORKNAMECHARS + 1; path = (char *) palloc(pathlen); if (forknum != MAIN_FORKNUM) - snprintf(path, pathlen, "base/%u/%u_%u", - rnode.dbNode, rnode.relNode, forknum); + snprintf(path, pathlen, "base/%u/%u_%s", + rnode.dbNode, rnode.relNode, forkNames[forknum]); else snprintf(path, pathlen, "base/%u/%u", rnode.dbNode, rnode.relNode); @@ -85,11 +115,12 @@ relpath(RelFileNode rnode, ForkNumber forknum) { /* All other tablespaces are accessed via symlinks */ pathlen = 10 + OIDCHARS + 1 + OIDCHARS + 1 + OIDCHARS + 1 - + FORKNUMCHARS + 1; + + FORKNAMECHARS + 1; path = (char *) palloc(pathlen); if (forknum != MAIN_FORKNUM) - snprintf(path, pathlen, "pg_tblspc/%u/%u/%u_%u", - rnode.spcNode, rnode.dbNode, rnode.relNode, forknum); + snprintf(path, pathlen, "pg_tblspc/%u/%u/%u_%s", + rnode.spcNode, rnode.dbNode, rnode.relNode, + forkNames[forknum]); else snprintf(path, pathlen, "pg_tblspc/%u/%u/%u", rnode.spcNode, rnode.dbNode, rnode.relNode); diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c index d225b3e7c7..4d3f8c0b5c 100644 --- a/src/backend/utils/adt/dbsize.c +++ b/src/backend/utils/adt/dbsize.c @@ -5,7 +5,7 @@ * Copyright (c) 2002-2008, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.21 2008/10/03 07:33:09 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/dbsize.c,v 1.22 2008/10/06 14:13:17 heikki Exp $ * */ @@ -283,35 +283,6 @@ calculate_relation_size(RelFileNode *rfn, ForkNumber forknum) return totalsize; } - -/* - * XXX: Consider making this global and moving elsewhere. But currently - * there's no other users for this. - * - * Remember to also update the errhint below if you add entries, and the - * documentation for pg_relation_size(). - */ -static char *forkNames[] = { - "main", /* MAIN_FORKNUM */ - "fsm" /* FSM_FORKNUM */ -}; - -static ForkNumber -forkname_to_number(char *forkName) -{ - ForkNumber forkNum; - - for (forkNum = 0; forkNum <= MAX_FORKNUM; forkNum++) - if (strcmp(forkNames[forkNum], forkName) == 0) - return forkNum; - - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("invalid fork name"), - errhint("Valid fork names are 'main' and 'fsm'"))); - return InvalidForkNumber; /* keep compiler quiet */ -} - Datum pg_relation_size(PG_FUNCTION_ARGS) { diff --git a/src/include/catalog/catalog.h b/src/include/catalog/catalog.h index 52a69e1341..fb555cbc6b 100644 --- a/src/include/catalog/catalog.h +++ b/src/include/catalog/catalog.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/catalog.h,v 1.41 2008/08/11 11:05:11 heikki Exp $ + * $PostgreSQL: pgsql/src/include/catalog/catalog.h,v 1.42 2008/10/06 14:13:17 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -19,6 +19,9 @@ #include "utils/relcache.h" +extern const char *forkNames[]; +extern ForkNumber forkname_to_number(char *forkName); + extern char *relpath(RelFileNode rnode, ForkNumber forknum); extern char *GetDatabasePath(Oid dbNode, Oid spcNode); diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index fd6895263b..cdd9fa272e 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -37,7 +37,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.494 2008/10/06 13:05:37 mha Exp $ + * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.495 2008/10/06 14:13:17 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 200810061 +#define CATALOG_VERSION_NO 200810062 #endif diff --git a/src/include/storage/relfilenode.h b/src/include/storage/relfilenode.h index 128cff99a9..383cc18a57 100644 --- a/src/include/storage/relfilenode.h +++ b/src/include/storage/relfilenode.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/relfilenode.h,v 1.18 2008/10/03 07:33:10 heikki Exp $ + * $PostgreSQL: pgsql/src/include/storage/relfilenode.h,v 1.19 2008/10/06 14:13:17 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -27,7 +27,7 @@ typedef enum ForkNumber FSM_FORKNUM /* * NOTE: if you add a new fork, change MAX_FORKNUM below and update the - * name to number mapping in utils/adt/dbsize.c + * forkNames array in catalog.c */ } ForkNumber; |
