PostgreSQL Source Code  git master
genbki.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * genbki.h
4  * Required include file for all POSTGRES catalog header files
5  *
6  * genbki.h defines CATALOG(), BKI_BOOTSTRAP and related macros
7  * so that the catalog header files can be read by the C compiler.
8  * (These same words are recognized by genbki.pl to build the BKI
9  * bootstrap file from these header files.)
10  *
11  *
12  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
13  * Portions Copyright (c) 1994, Regents of the University of California
14  *
15  * src/include/catalog/genbki.h
16  *
17  *-------------------------------------------------------------------------
18  */
19 #ifndef GENBKI_H
20 #define GENBKI_H
21 
22 /* Introduces a catalog's structure definition */
23 #define CATALOG(name,oid,oidmacro) typedef struct CppConcat(FormData_,name)
24 
25 /* Options that may appear after CATALOG (on the same line) */
26 #define BKI_BOOTSTRAP
27 #define BKI_SHARED_RELATION
28 #define BKI_ROWTYPE_OID(oid,oidmacro)
29 #define BKI_SCHEMA_MACRO
30 
31 /* Options that may appear after an attribute (on the same line) */
32 #define BKI_FORCE_NULL
33 #define BKI_FORCE_NOT_NULL
34 /* Specifies a default value for a catalog field */
35 #define BKI_DEFAULT(value)
36 /* Specifies a default value for auto-generated array types */
37 #define BKI_ARRAY_DEFAULT(value)
38 /*
39  * Indicates that the attribute contains OIDs referencing the named catalog;
40  * can be applied to columns of oid, regproc, oid[], or oidvector type.
41  * genbki.pl uses this to know how to perform name lookups in the initial
42  * data (if any), and it also feeds into regression-test validity checks.
43  * The _OPT suffix indicates that values can be zero instead of
44  * a valid OID reference.
45  */
46 #define BKI_LOOKUP(catalog)
47 #define BKI_LOOKUP_OPT(catalog)
48 
49 /*
50  * These lines are processed by genbki.pl to create the statements
51  * the bootstrap parser will turn into BootstrapToastTable commands.
52  * Each line specifies the system catalog that needs a toast table,
53  * the OID to assign to the toast table, and the OID to assign to the
54  * toast table's index. The reason we hard-wire these OIDs is that we
55  * need stable OIDs for shared relations, and that includes toast tables
56  * of shared relations.
57  *
58  * The DECLARE_TOAST_WITH_MACRO variant is used when C macros are needed
59  * for the toast table/index OIDs (usually only for shared catalogs).
60  *
61  * The macro definitions are just to keep the C compiler from spitting up.
62  */
63 #define DECLARE_TOAST(name,toastoid,indexoid) extern int no_such_variable
64 #define DECLARE_TOAST_WITH_MACRO(name,toastoid,indexoid,toastoidmacro,indexoidmacro) extern int no_such_variable
65 
66 /*
67  * These lines are processed by genbki.pl to create the statements
68  * the bootstrap parser will turn into DefineIndex calls.
69  *
70  * The keyword is DECLARE_INDEX or DECLARE_UNIQUE_INDEX or
71  * DECLARE_UNIQUE_INDEX_PKEY. ("PKEY" marks the index as being the catalog's
72  * primary key; currently this is only cosmetically different from a regular
73  * unique index. By convention, we usually make a catalog's OID column its
74  * pkey, if it has one.)
75  *
76  * The first two arguments are the index's name and OID. The third argument
77  * is the name of a #define to generate for its OID. References to the index
78  * in the C code should always use these #defines, not the actual index name
79  * (much less the numeric OID). The fourth argument is the table name. The
80  * rest is much like a standard 'create index' SQL command.
81  *
82  * The macro definitions are just to keep the C compiler from spitting up.
83  */
84 #define DECLARE_INDEX(name,oid,oidmacro,tblname,decl) extern int no_such_variable
85 #define DECLARE_UNIQUE_INDEX(name,oid,oidmacro,tblname,decl) extern int no_such_variable
86 #define DECLARE_UNIQUE_INDEX_PKEY(name,oid,oidmacro,tblname,decl) extern int no_such_variable
87 
88 /*
89  * These lines inform genbki.pl about manually-assigned OIDs that do not
90  * correspond to any entry in the catalog *.dat files, but should be subject
91  * to uniqueness verification and renumber_oids.pl renumbering. A C macro
92  * to #define the given name is emitted into the corresponding *_d.h file.
93  */
94 #define DECLARE_OID_DEFINING_MACRO(name,oid) extern int no_such_variable
95 
96 /*
97  * These lines are processed by genbki.pl to create a table for use
98  * by the pg_get_catalog_foreign_keys() function. We do not have any
99  * mechanism that actually enforces foreign-key relationships in the
100  * system catalogs, but it is still useful to record the intended
101  * relationships in a machine-readable form.
102  *
103  * The keyword is DECLARE_FOREIGN_KEY[_OPT] or DECLARE_ARRAY_FOREIGN_KEY[_OPT].
104  * The first argument is a parenthesized list of the referencing columns;
105  * the second, the name of the referenced table; the third, a parenthesized
106  * list of the referenced columns. Use of the ARRAY macros means that the
107  * last referencing column is an array, each of whose elements is supposed
108  * to match some entry in the last referenced column. Use of the OPT suffix
109  * indicates that the referencing column(s) can be zero instead of a valid
110  * reference.
111  *
112  * Columns that are marked with a BKI_LOOKUP rule do not need an explicit
113  * DECLARE_FOREIGN_KEY macro, as genbki.pl can infer the FK relationship
114  * from that. Thus, these macros are only needed in special cases.
115  *
116  * The macro definitions are just to keep the C compiler from spitting up.
117  */
118 #define DECLARE_FOREIGN_KEY(cols,reftbl,refcols) extern int no_such_variable
119 #define DECLARE_FOREIGN_KEY_OPT(cols,reftbl,refcols) extern int no_such_variable
120 #define DECLARE_ARRAY_FOREIGN_KEY(cols,reftbl,refcols) extern int no_such_variable
121 #define DECLARE_ARRAY_FOREIGN_KEY_OPT(cols,reftbl,refcols) extern int no_such_variable
122 
123 /*
124  * Create a syscache with the given name, index, and bucket size. See
125  * syscache.c.
126  */
127 #define MAKE_SYSCACHE(name,idxname,nbuckets) extern int no_such_variable
128 
129 /* The following are never defined; they are here only for documentation. */
130 
131 /*
132  * Variable-length catalog fields (except possibly the first not nullable one)
133  * should not be visible in C structures, so they are made invisible by #ifdefs
134  * of an undefined symbol. See also the BOOTCOL_NULL_AUTO code in bootstrap.c
135  * for how this is handled.
136  */
137 #undef CATALOG_VARLEN
138 
139 /*
140  * There is code in some catalog headers that needs to be visible to clients,
141  * but we don't want clients to include the full header because of safety
142  * issues with other code in the header. To handle that, surround code that
143  * should be visible to clients with "#ifdef EXPOSE_TO_CLIENT_CODE". That
144  * instructs genbki.pl to copy the section when generating the corresponding
145  * "_d" header, which can be included by both client and backend code.
146  */
147 #undef EXPOSE_TO_CLIENT_CODE
148 
149 #endif /* GENBKI_H */