products/Sources/formale Sprachen/C/Postgres/src/interfaces/ecpg/test/expected/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 4 kB image not shown  

Quelle  relpath.h   Sprache: unbekannt

 
/*-------------------------------------------------------------------------
 *
 * relpath.h
 *  Declarations for GetRelationPath() and friends
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/common/relpath.h
 *
 *-------------------------------------------------------------------------
 */

#ifndef RELPATH_H
#define RELPATH_H

/*
 * Required here; note that CppAsString2() does not throw an error if the
 * symbol is not defined.
 */

#include "catalog/catversion.h"

/*
 * RelFileNumber data type identifies the specific relation file name.
 */

typedef Oid RelFileNumber;
#define InvalidRelFileNumber  ((RelFileNumber) InvalidOid)
#define RelFileNumberIsValid(relnumber) \
    ((bool) ((relnumber) != InvalidRelFileNumber))

/*
 * Name of major-version-specific tablespace subdirectories
 */

#define TABLESPACE_VERSION_DIRECTORY "PG_" PG_MAJORVERSION "_" \
         CppAsString2(CATALOG_VERSION_NO)

/*
 * Tablespace path (relative to installation's $PGDATA).
 *
 * These values should not be changed as many tools rely on it.
 */

#define PG_TBLSPC_DIR "pg_tblspc"
#define PG_TBLSPC_DIR_SLASH "pg_tblspc/" /* required for strings
 * comparisons */


/* Characters to allow for an OID in a relation path */
#define OIDCHARS  10  /* max chars printed by %u */

/*
 * Stuff for fork names.
 *
 * The physical storage of a relation consists of one or more forks.
 * The main fork is always created, but in addition to that there can be
 * additional forks for storing various metadata. ForkNumber is used when
 * we need to refer to a specific fork in a relation.
 */

typedef enum ForkNumber
{
 InvalidForkNumber = -1,
 MAIN_FORKNUM = 0,
 FSM_FORKNUM,
 VISIBILITYMAP_FORKNUM,
 INIT_FORKNUM,

 /*
  * NOTE: if you add a new fork, change MAX_FORKNUM and possibly
  * FORKNAMECHARS below, and update the forkNames array in
  * src/common/relpath.c
 */

} ForkNumber;

#define MAX_FORKNUM  INIT_FORKNUM

#define FORKNAMECHARS 4  /* max chars for a fork name */

extern PGDLLIMPORT const char *const forkNames[];

extern ForkNumber forkname_to_number(const char *forkName);
extern int forkname_chars(const char *str, ForkNumber *fork);


/*
 * Unfortunately, there's no easy way to derive PROCNUMBER_CHARS from
 * MAX_BACKENDS. MAX_BACKENDS is 2^18-1. Crosschecked in test_relpath().
 */

#define PROCNUMBER_CHARS 6

/*
 * The longest possible relation path lengths is from the following format:
 * sprintf(rp.path, "%s/%u/%s/%u/t%d_%u",
 *         PG_TBLSPC_DIR, spcOid,
 *         TABLESPACE_VERSION_DIRECTORY,
 *         dbOid, procNumber, relNumber);
 *
 * Note this does *not* include the trailing null-byte, to make it easier to
 * combine it with other lengths.
 */

#define REL_PATH_STR_MAXLEN \
 ( \
  sizeof(PG_TBLSPC_DIR) - 1 \
  + sizeof((char)'/') \
  + OIDCHARS /* spcOid */ \
  + sizeof((char)'/') \
  + sizeof(TABLESPACE_VERSION_DIRECTORY) - 1 \
  + sizeof((char)'/') \
  + OIDCHARS /* dbOid */ \
  + sizeof((char)'/') \
  + sizeof((char)'t'/* temporary table indicator */ \
  + PROCNUMBER_CHARS /* procNumber */ \
  + sizeof((char)'_') \
  + OIDCHARS /* relNumber */ \
  + sizeof((char)'_') \
  + FORKNAMECHARS /* forkNames[forkNumber] */ \
 )

/*
 * String of the exact length required to represent a relation path. We return
 * this struct, instead of char[REL_PATH_STR_MAXLEN + 1], as the pointer would
 * decay to a plain char * too easily, possibly preventing the compiler from
 * detecting invalid references to the on-stack return value of
 * GetRelationPath().
 */

typedef struct RelPathStr
{
 char  str[REL_PATH_STR_MAXLEN + 1];
} RelPathStr;


/*
 * Stuff for computing filesystem pathnames for relations.
 */

extern char *GetDatabasePath(Oid dbOid, Oid spcOid);

extern RelPathStr GetRelationPath(Oid dbOid, Oid spcOid, RelFileNumber relNumber,
          int procNumber, ForkNumber forkNumber);

/*
 * Wrapper macros for GetRelationPath.  Beware of multiple
 * evaluation of the RelFileLocator or RelFileLocatorBackend argument!
 */


/* First argument is a RelFileLocator */
#define relpathbackend(rlocator, backend, forknum) \
 GetRelationPath((rlocator).dbOid, (rlocator).spcOid, (rlocator).relNumber, \
     backend, forknum)

/* First argument is a RelFileLocator */
#define relpathperm(rlocator, forknum) \
 relpathbackend(rlocator, INVALID_PROC_NUMBER, forknum)

/* First argument is a RelFileLocatorBackend */
#define relpath(rlocator, forknum) \
 relpathbackend((rlocator).locator, (rlocator).backend, forknum)

#endif       /* RELPATH_H */

Messung V0.5 in Prozent
C=90 H=96 G=93

[Verzeichnis aufwärts0.17unsichere VerbindungÜbersetzung europäischer Sprachen durch Browser2026-08-08]