codekingpro/portable-devtools
114k
1/*-------------------------------------------------------------------------2 *3 * pg_proc.h4 * definition of the "procedure" system catalog (pg_proc)5 *6 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group7 * Portions Copyright (c) 1994, Regents of the University of California8 *9 * src/include/catalog/pg_proc.h10 *11 * NOTES12 * The Catalog.pm module reads this file and derives schema13 * information.14 *15 *-------------------------------------------------------------------------16 */17#ifndef PG_PROC_H18#define PG_PROC_H19 20#include "catalog/genbki.h"21#include "catalog/objectaddress.h"22#include "catalog/pg_proc_d.h"23#include "nodes/pg_list.h"24 25/* ----------------26 * pg_proc definition. cpp turns this into27 * typedef struct FormData_pg_proc28 * ----------------29 */30CATALOG(pg_proc,1255,ProcedureRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81,ProcedureRelation_Rowtype_Id) BKI_SCHEMA_MACRO31{32 Oid oid; /* oid */33 34 /* procedure name */35 NameData proname;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 */81 int16 pronargs;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 to91 * proargtypes92 */93 94 /* parameter types (excludes OUT params) */95 oidvector proargtypes BKI_LOOKUP(pg_type) BKI_FORCE_NOT_NULL;96 97#ifdef CATALOG_VARLEN98 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 */115 text prosrc BKI_FORCE_NOT_NULL;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#endif129} FormData_pg_proc;130 131/* ----------------132 * Form_pg_proc corresponds to a pointer to a tuple with133 * the format of pg_proc relation.134 * ----------------135 */136typedef FormData_pg_proc *Form_pg_proc;137 138DECLARE_TOAST(pg_proc, 2836, 2837);139 140DECLARE_UNIQUE_INDEX_PKEY(pg_proc_oid_index, 2690, ProcedureOidIndexId, on pg_proc using btree(oid oid_ops));141DECLARE_UNIQUE_INDEX(pg_proc_proname_args_nsp_index, 2691, ProcedureNameArgsNspIndexId, on pg_proc using btree(proname name_ops, proargtypes oidvector_ops, pronamespace oid_ops));142 143#ifdef EXPOSE_TO_CLIENT_CODE144 145/*146 * Symbolic values for prokind column147 */148#define PROKIND_FUNCTION 'f'149#define PROKIND_AGGREGATE 'a'150#define PROKIND_WINDOW 'w'151#define PROKIND_PROCEDURE 'p'152 153/*154 * Symbolic values for provolatile column: these indicate whether the result155 * of a function is dependent *only* on the values of its explicit arguments,156 * or can change due to outside factors (such as parameter variables or157 * table contents). NOTE: functions having side-effects, such as setval(),158 * must be labeled volatile to ensure they will not get optimized away,159 * even if the actual return value is not changeable.160 */161#define PROVOLATILE_IMMUTABLE 'i' /* never changes for given input */162#define PROVOLATILE_STABLE 's' /* does not change within a scan */163#define PROVOLATILE_VOLATILE 'v' /* can change even within a scan */164 165/*166 * Symbolic values for proparallel column: these indicate whether a function167 * can be safely be run in a parallel backend, during parallelism but168 * necessarily in the leader, or only in non-parallel mode.169 */170#define PROPARALLEL_SAFE 's' /* can run in worker or leader */171#define PROPARALLEL_RESTRICTED 'r' /* can run in parallel leader only */172#define PROPARALLEL_UNSAFE 'u' /* banned while in parallel mode */173 174/*175 * Symbolic values for proargmodes column. Note that these must agree with176 * the FunctionParameterMode enum in parsenodes.h; we declare them here to177 * be accessible from either header.178 */179#define PROARGMODE_IN 'i'180#define PROARGMODE_OUT 'o'181#define PROARGMODE_INOUT 'b'182#define PROARGMODE_VARIADIC 'v'183#define PROARGMODE_TABLE 't'184 185#endif /* EXPOSE_TO_CLIENT_CODE */186 187 188extern ObjectAddress ProcedureCreate(const char *procedureName,189 Oid procNamespace,190 bool replace,191 bool returnsSet,192 Oid returnType,193 Oid proowner,194 Oid languageObjectId,195 Oid languageValidator,196 const char *prosrc,197 const char *probin,198 Node *prosqlbody,199 char prokind,200 bool security_definer,201 bool isLeakProof,202 bool isStrict,203 char volatility,204 char parallel,205 oidvector *parameterTypes,206 Datum allParameterTypes,207 Datum parameterModes,208 Datum parameterNames,209 List *parameterDefaults,210 Datum trftypes,211 Datum proconfig,212 Oid prosupport,213 float4 procost,214 float4 prorows);215 216extern bool function_parse_error_transpose(const char *prosrc);217 218extern List *oid_array_to_list(Datum datum);219 220#endif /* PG_PROC_H */221 