PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
pg_proc.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * pg_proc.h
4 * definition of the "procedure" system catalog (pg_proc)
5 *
6 * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * src/include/catalog/pg_proc.h
10 *
11 * NOTES
12 * The Catalog.pm module reads this file and derives schema
13 * information.
14 *
15 *-------------------------------------------------------------------------
16 */
17#ifndef PG_PROC_H
18#define PG_PROC_H
19
20#include "catalog/genbki.h"
22#include "catalog/pg_proc_d.h"
23#include "nodes/pg_list.h"
24
25/* ----------------
26 * pg_proc definition. cpp turns this into
27 * typedef struct FormData_pg_proc
28 * ----------------
29 */
30CATALOG(pg_proc,1255,ProcedureRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81,ProcedureRelation_Rowtype_Id) BKI_SCHEMA_MACRO
31{
32 Oid oid; /* oid */
33
34 /* procedure name */
36
37 /* OID of namespace containing this proc */
38 Oid pronamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
39
40 /* procedure owner */
41 Oid proowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
42
43 /* OID of pg_language entry */
44 Oid prolang BKI_DEFAULT(internal) BKI_LOOKUP(pg_language);
45
46 /* estimated execution cost */
47 float4 procost BKI_DEFAULT(1);
48
49 /* estimated # of rows out (if proretset) */
50 float4 prorows BKI_DEFAULT(0);
51
52 /* element type of variadic array, or 0 if not variadic */
53 Oid provariadic BKI_DEFAULT(0) BKI_LOOKUP_OPT(pg_type);
54
55 /* planner support function for this function, or 0 if none */
56 regproc prosupport BKI_DEFAULT(0) BKI_LOOKUP_OPT(pg_proc);
57
58 /* see PROKIND_ categories below */
59 char prokind BKI_DEFAULT(f);
60
61 /* security definer */
62 bool prosecdef BKI_DEFAULT(f);
63
64 /* is it a leak-proof function? */
65 bool proleakproof BKI_DEFAULT(f);
66
67 /* strict with respect to NULLs? */
68 bool proisstrict BKI_DEFAULT(t);
69
70 /* returns a set? */
71 bool proretset BKI_DEFAULT(f);
72
73 /* see PROVOLATILE_ categories below */
74 char provolatile BKI_DEFAULT(i);
75
76 /* see PROPARALLEL_ categories below */
77 char proparallel BKI_DEFAULT(s);
78
79 /* number of arguments */
80 /* Note: need not be given in pg_proc.dat; genbki.pl will compute it */
82
83 /* number of arguments with defaults */
84 int16 pronargdefaults BKI_DEFAULT(0);
85
86 /* OID of result type */
87 Oid prorettype BKI_LOOKUP(pg_type);
88
89 /*
90 * variable-length fields start here, but we allow direct access to
91 * proargtypes
92 */
93
94 /* parameter types (excludes OUT params) */
95 oidvector proargtypes BKI_LOOKUP(pg_type) BKI_FORCE_NOT_NULL;
96
97#ifdef CATALOG_VARLEN
98
99 /* all param types (NULL if IN only) */
100 Oid proallargtypes[1] BKI_DEFAULT(_null_) BKI_LOOKUP(pg_type);
101
102 /* parameter modes (NULL if IN only) */
103 char proargmodes[1] BKI_DEFAULT(_null_);
104
105 /* parameter names (NULL if no names) */
106 text proargnames[1] BKI_DEFAULT(_null_);
107
108 /* list of expression trees for argument defaults (NULL if none) */
109 pg_node_tree proargdefaults BKI_DEFAULT(_null_);
110
111 /* types for which to apply transforms */
112 Oid protrftypes[1] BKI_DEFAULT(_null_) BKI_LOOKUP(pg_type);
113
114 /* procedure source text */
116
117 /* secondary procedure info (can be NULL) */
118 text probin BKI_DEFAULT(_null_);
119
120 /* pre-parsed SQL function body */
121 pg_node_tree prosqlbody BKI_DEFAULT(_null_);
122
123 /* procedure-local GUC settings */
124 text proconfig[1] BKI_DEFAULT(_null_);
125
126 /* access permissions */
127 aclitem proacl[1] BKI_DEFAULT(_null_);
128#endif
130
131/* ----------------
132 * Form_pg_proc corresponds to a pointer to a tuple with
133 * the format of pg_proc relation.
134 * ----------------
135 */
137
138DECLARE_TOAST(pg_proc, 2836, 2837);
139
140DECLARE_UNIQUE_INDEX_PKEY(pg_proc_oid_index, 2690, ProcedureOidIndexId, pg_proc, btree(oid oid_ops));
141DECLARE_UNIQUE_INDEX(pg_proc_proname_args_nsp_index, 2691, ProcedureNameArgsNspIndexId, pg_proc, btree(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops));
142
143MAKE_SYSCACHE(PROCOID, pg_proc_oid_index, 128);
144MAKE_SYSCACHE(PROCNAMEARGSNSP, pg_proc_proname_args_nsp_index, 128);
145
146#ifdef EXPOSE_TO_CLIENT_CODE
147
148/*
149 * Symbolic values for prokind column
150 */
151#define PROKIND_FUNCTION 'f'
152#define PROKIND_AGGREGATE 'a'
153#define PROKIND_WINDOW 'w'
154#define PROKIND_PROCEDURE 'p'
155
156/*
157 * Symbolic values for provolatile column: these indicate whether the result
158 * of a function is dependent *only* on the values of its explicit arguments,
159 * or can change due to outside factors (such as parameter variables or
160 * table contents). NOTE: functions having side-effects, such as setval(),
161 * must be labeled volatile to ensure they will not get optimized away,
162 * even if the actual return value is not changeable.
163 */
164#define PROVOLATILE_IMMUTABLE 'i' /* never changes for given input */
165#define PROVOLATILE_STABLE 's' /* does not change within a scan */
166#define PROVOLATILE_VOLATILE 'v' /* can change even within a scan */
167
168/*
169 * Symbolic values for proparallel column: these indicate whether a function
170 * can be safely be run in a parallel backend, during parallelism but
171 * necessarily in the leader, or only in non-parallel mode.
172 */
173#define PROPARALLEL_SAFE 's' /* can run in worker or leader */
174#define PROPARALLEL_RESTRICTED 'r' /* can run in parallel leader only */
175#define PROPARALLEL_UNSAFE 'u' /* banned while in parallel mode */
176
177/*
178 * Symbolic values for proargmodes column. Note that these must agree with
179 * the FunctionParameterMode enum in parsenodes.h; we declare them here to
180 * be accessible from either header.
181 */
182#define PROARGMODE_IN 'i'
183#define PROARGMODE_OUT 'o'
184#define PROARGMODE_INOUT 'b'
185#define PROARGMODE_VARIADIC 'v'
186#define PROARGMODE_TABLE 't'
187
188#endif /* EXPOSE_TO_CLIENT_CODE */
189
190
191extern ObjectAddress ProcedureCreate(const char *procedureName,
192 Oid procNamespace,
193 bool replace,
194 bool returnsSet,
195 Oid returnType,
196 Oid proowner,
197 Oid languageObjectId,
198 Oid languageValidator,
199 const char *prosrc,
200 const char *probin,
201 Node *prosqlbody,
202 char prokind,
203 bool security_definer,
204 bool isLeakProof,
205 bool isStrict,
206 char volatility,
207 char parallel,
208 oidvector *parameterTypes,
209 Datum allParameterTypes,
210 Datum parameterModes,
211 Datum parameterNames,
212 List *parameterDefaults,
213 Datum trftypes,
214 Datum proconfig,
215 Oid prosupport,
216 float4 procost,
217 float4 prorows);
218
219extern bool function_parse_error_transpose(const char *prosrc);
220
221extern List *oid_array_to_list(Datum datum);
222
223#endif /* PG_PROC_H */
Oid regproc
Definition: c.h:603
int16_t int16
Definition: c.h:480
float float4
Definition: c.h:583
#define BKI_LOOKUP_OPT(catalog)
Definition: genbki.h:47
#define BKI_FORCE_NOT_NULL
Definition: genbki.h:33
#define BKI_BOOTSTRAP
Definition: genbki.h:26
#define BKI_ROWTYPE_OID(oid, oidmacro)
Definition: genbki.h:28
int i
Definition: isn.c:72
FormData_pg_proc * Form_pg_proc
Definition: pg_proc.h:136
DECLARE_UNIQUE_INDEX(pg_proc_proname_args_nsp_index, 2691, ProcedureNameArgsNspIndexId, pg_proc, btree(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops))
DECLARE_UNIQUE_INDEX_PKEY(pg_proc_oid_index, 2690, ProcedureOidIndexId, pg_proc, btree(oid oid_ops))
Oid prorettype BKI_LOOKUP(pg_type)
FormData_pg_proc
Definition: pg_proc.h:129
List * oid_array_to_list(Datum datum)
Definition: pg_proc.c:1184
int16 pronargs
Definition: pg_proc.h:81
CATALOG(pg_proc, 1255, ProcedureRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81
ProcedureRelation_Rowtype_Id BKI_SCHEMA_MACRO
Definition: pg_proc.h:31
DECLARE_TOAST(pg_proc, 2836, 2837)
bool function_parse_error_transpose(const char *prosrc)
Definition: pg_proc.c:1002
MAKE_SYSCACHE(PROCOID, pg_proc_oid_index, 128)
ObjectAddress ProcedureCreate(const char *procedureName, Oid procNamespace, bool replace, bool returnsSet, Oid returnType, Oid proowner, Oid languageObjectId, Oid languageValidator, const char *prosrc, const char *probin, Node *prosqlbody, char prokind, bool security_definer, bool isLeakProof, bool isStrict, char volatility, char parallel, oidvector *parameterTypes, Datum allParameterTypes, Datum parameterModes, Datum parameterNames, List *parameterDefaults, Datum trftypes, Datum proconfig, Oid prosupport, float4 procost, float4 prorows)
Definition: pg_proc.c:70
NameData proname
Definition: pg_proc.h:35
Oid pronamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace)
uintptr_t Datum
Definition: postgres.h:64
unsigned int Oid
Definition: postgres_ext.h:31
Definition: pg_list.h:54
Definition: nodes.h:129
Definition: c.h:695
Definition: c.h:680
Definition: c.h:641