init
This commit is contained in:
130
db_include/catalog/genbki.h
Executable file
130
db_include/catalog/genbki.h
Executable file
@@ -0,0 +1,130 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* genbki.h
|
||||
* Required include file for all POSTGRES catalog header files
|
||||
*
|
||||
* genbki.h defines CATALOG(), BKI_BOOTSTRAP and related macros
|
||||
* so that the catalog header files can be read by the C compiler.
|
||||
* (These same words are recognized by genbki.pl to build the BKI
|
||||
* bootstrap file from these header files.)
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/include/catalog/genbki.h
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef GENBKI_H
|
||||
#define GENBKI_H
|
||||
|
||||
/* Introduces a catalog's structure definition */
|
||||
#define CATALOG(name,oid,oidmacro) typedef struct CppConcat(FormData_,name)
|
||||
|
||||
/* Options that may appear after CATALOG (on the same line) */
|
||||
#define BKI_BOOTSTRAP
|
||||
#define BKI_SHARED_RELATION
|
||||
#define BKI_ROWTYPE_OID(oid,oidmacro)
|
||||
#define BKI_SCHEMA_MACRO
|
||||
|
||||
/* Options that may appear after an attribute (on the same line) */
|
||||
#define BKI_FORCE_NULL
|
||||
#define BKI_FORCE_NOT_NULL
|
||||
/* Specifies a default value for a catalog field */
|
||||
#define BKI_DEFAULT(value)
|
||||
/* Specifies a default value for auto-generated array types */
|
||||
#define BKI_ARRAY_DEFAULT(value)
|
||||
/*
|
||||
* Indicates that the attribute contains OIDs referencing the named catalog;
|
||||
* can be applied to columns of oid, regproc, oid[], or oidvector type.
|
||||
* genbki.pl uses this to know how to perform name lookups in the initial
|
||||
* data (if any), and it also feeds into regression-test validity checks.
|
||||
* The _OPT suffix indicates that values can be zero instead of
|
||||
* a valid OID reference.
|
||||
*/
|
||||
#define BKI_LOOKUP(catalog)
|
||||
#define BKI_LOOKUP_OPT(catalog)
|
||||
|
||||
/*
|
||||
* These lines are processed by genbki.pl to create the statements
|
||||
* the bootstrap parser will turn into BootstrapToastTable commands.
|
||||
* Each line specifies the system catalog that needs a toast table,
|
||||
* the OID to assign to the toast table, and the OID to assign to the
|
||||
* toast table's index. The reason we hard-wire these OIDs is that we
|
||||
* need stable OIDs for shared relations, and that includes toast tables
|
||||
* of shared relations.
|
||||
*
|
||||
* The macro definition is just to keep the C compiler from spitting up.
|
||||
*/
|
||||
#define DECLARE_TOAST(name,toastoid,indexoid) extern int no_such_variable
|
||||
|
||||
/*
|
||||
* These lines are processed by genbki.pl to create the statements
|
||||
* the bootstrap parser will turn into DefineIndex calls.
|
||||
*
|
||||
* The keyword is DECLARE_INDEX or DECLARE_UNIQUE_INDEX or
|
||||
* DECLARE_UNIQUE_INDEX_PKEY. ("PKEY" marks the index as being the catalog's
|
||||
* primary key; currently this is only cosmetically different from a regular
|
||||
* unique index. By convention, we usually make a catalog's OID column its
|
||||
* pkey, if it has one.) The first two arguments are the index's name and
|
||||
* OID, the rest is much like a standard 'create index' SQL command.
|
||||
*
|
||||
* For each index, we also provide a #define for its OID. References to
|
||||
* the index in the C code should always use these #defines, not the actual
|
||||
* index name (much less the numeric OID).
|
||||
*
|
||||
* The macro definitions are just to keep the C compiler from spitting up.
|
||||
*/
|
||||
#define DECLARE_INDEX(name,oid,decl) extern int no_such_variable
|
||||
#define DECLARE_UNIQUE_INDEX(name,oid,decl) extern int no_such_variable
|
||||
#define DECLARE_UNIQUE_INDEX_PKEY(name,oid,decl) extern int no_such_variable
|
||||
|
||||
/*
|
||||
* These lines are processed by genbki.pl to create a table for use
|
||||
* by the pg_get_catalog_foreign_keys() function. We do not have any
|
||||
* mechanism that actually enforces foreign-key relationships in the
|
||||
* system catalogs, but it is still useful to record the intended
|
||||
* relationships in a machine-readable form.
|
||||
*
|
||||
* The keyword is DECLARE_FOREIGN_KEY[_OPT] or DECLARE_ARRAY_FOREIGN_KEY[_OPT].
|
||||
* The first argument is a parenthesized list of the referencing columns;
|
||||
* the second, the name of the referenced table; the third, a parenthesized
|
||||
* list of the referenced columns. Use of the ARRAY macros means that the
|
||||
* last referencing column is an array, each of whose elements is supposed
|
||||
* to match some entry in the last referenced column. Use of the OPT suffix
|
||||
* indicates that the referencing column(s) can be zero instead of a valid
|
||||
* reference.
|
||||
*
|
||||
* Columns that are marked with a BKI_LOOKUP rule do not need an explicit
|
||||
* DECLARE_FOREIGN_KEY macro, as genbki.pl can infer the FK relationship
|
||||
* from that. Thus, these macros are only needed in special cases.
|
||||
*
|
||||
* The macro definitions are just to keep the C compiler from spitting up.
|
||||
*/
|
||||
#define DECLARE_FOREIGN_KEY(cols,reftbl,refcols) extern int no_such_variable
|
||||
#define DECLARE_FOREIGN_KEY_OPT(cols,reftbl,refcols) extern int no_such_variable
|
||||
#define DECLARE_ARRAY_FOREIGN_KEY(cols,reftbl,refcols) extern int no_such_variable
|
||||
#define DECLARE_ARRAY_FOREIGN_KEY_OPT(cols,reftbl,refcols) extern int no_such_variable
|
||||
|
||||
/* The following are never defined; they are here only for documentation. */
|
||||
|
||||
/*
|
||||
* Variable-length catalog fields (except possibly the first not nullable one)
|
||||
* should not be visible in C structures, so they are made invisible by #ifdefs
|
||||
* of an undefined symbol. See also the BOOTCOL_NULL_AUTO code in bootstrap.c
|
||||
* for how this is handled.
|
||||
*/
|
||||
#undef CATALOG_VARLEN
|
||||
|
||||
/*
|
||||
* There is code in some catalog headers that needs to be visible to clients,
|
||||
* but we don't want clients to include the full header because of safety
|
||||
* issues with other code in the header. To handle that, surround code that
|
||||
* should be visible to clients with "#ifdef EXPOSE_TO_CLIENT_CODE". That
|
||||
* instructs genbki.pl to copy the section when generating the corresponding
|
||||
* "_d" header, which can be included by both client and backend code.
|
||||
*/
|
||||
#undef EXPOSE_TO_CLIENT_CODE
|
||||
|
||||
#endif /* GENBKI_H */
|
||||
Reference in New Issue
Block a user