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-2025, 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 */
src
include
catalog
genbki.h
Generated on Mon Feb 10 2025 06:13:24 for PostgreSQL Source Code by
1.9.4