#ifndef RELPATH_H
#define RELPATH_H
#include "catalog/catversion.h"
typedef Oid RelFileNumber;
#define InvalidRelFileNumber ((RelFileNumber) InvalidOid)
#define RelFileNumberIsValid(relnumber) \
((bool) ((relnumber) != InvalidRelFileNumber))
#define TABLESPACE_VERSION_DIRECTORY "PG_" PG_MAJORVERSION "_" \
CppAsString2(CATALOG_VERSION_NO)
#define PG_TBLSPC_DIR "pg_tblspc"
#define PG_TBLSPC_DIR_SLASH "pg_tblspc/"
#define OIDCHARS 10
typedef enum ForkNumber
{
InvalidForkNumber = -1,
MAIN_FORKNUM = 0,
FSM_FORKNUM,
VISIBILITYMAP_FORKNUM,
INIT_FORKNUM,
} ForkNumber;
#define MAX_FORKNUM INIT_FORKNUM
#define FORKNAMECHARS 4
extern PGDLLIMPORT const char *const forkNames[];
extern ForkNumber forkname_to_number(const char *forkName);
extern int forkname_chars(const char *str, ForkNumber *fork);
#define PROCNUMBER_CHARS 6
#define REL_PATH_STR_MAXLEN \
( \
sizeof(PG_TBLSPC_DIR) - 1 \
+ sizeof((char)'/') \
+ OIDCHARS \
+ sizeof((char)'/') \
+ sizeof(TABLESPACE_VERSION_DIRECTORY) - 1 \
+ sizeof((char)'/') \
+ OIDCHARS \
+ sizeof((char)'/') \
+ sizeof((char)'t') \
+ PROCNUMBER_CHARS \
+ sizeof((char)'_') \
+ OIDCHARS \
+ sizeof((char)'_') \
+ FORKNAMECHARS \
)
typedef struct RelPathStr
{
char str[REL_PATH_STR_MAXLEN + 1];
} RelPathStr;
extern char *GetDatabasePath(Oid dbOid, Oid spcOid);
extern RelPathStr GetRelationPath(Oid dbOid, Oid spcOid, RelFileNumber relNumber,
int procNumber, ForkNumber forkNumber);
#define relpathbackend(rlocator, backend, forknum) \
GetRelationPath((rlocator).dbOid, (rlocator).spcOid, (rlocator).relNumber, \
backend, forknum)
#define relpathperm(rlocator, forknum) \
relpathbackend(rlocator, INVALID_PROC_NUMBER, forknum)
#define relpath(rlocator, forknum) \
relpathbackend((rlocator).locator, (rlocator).backend, forknum)
#endif