Add data for WAL in pg_stat_io and backend statistics
[pgsql.git] / src / include / catalog / pg_aggregate.h
blobc15f8d2c9fc7464625bc3171d60832a869273969
1 /*-------------------------------------------------------------------------
3 * pg_aggregate.h
4 * definition of the "aggregate" system catalog (pg_aggregate)
7 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
10 * src/include/catalog/pg_aggregate.h
12 * NOTES
13 * The Catalog.pm module reads this file and derives schema
14 * information.
16 *-------------------------------------------------------------------------
18 #ifndef PG_AGGREGATE_H
19 #define PG_AGGREGATE_H
21 #include "catalog/genbki.h"
22 #include "catalog/pg_aggregate_d.h" /* IWYU pragma: export */
24 #include "catalog/objectaddress.h"
25 #include "nodes/pg_list.h"
27 /* ----------------------------------------------------------------
28 * pg_aggregate definition.
29 * cpp turns this into typedef struct FormData_pg_aggregate
30 * ----------------------------------------------------------------
32 CATALOG(pg_aggregate,2600,AggregateRelationId)
34 /* pg_proc OID of the aggregate itself */
35 regproc aggfnoid BKI_LOOKUP(pg_proc);
37 /* aggregate kind, see AGGKIND_ categories below */
38 char aggkind BKI_DEFAULT(n);
40 /* number of arguments that are "direct" arguments */
41 int16 aggnumdirectargs BKI_DEFAULT(0);
43 /* transition function */
44 regproc aggtransfn BKI_LOOKUP(pg_proc);
46 /* final function (0 if none) */
47 regproc aggfinalfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
49 /* combine function (0 if none) */
50 regproc aggcombinefn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
52 /* function to convert transtype to bytea (0 if none) */
53 regproc aggserialfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
55 /* function to convert bytea to transtype (0 if none) */
56 regproc aggdeserialfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
58 /* forward function for moving-aggregate mode (0 if none) */
59 regproc aggmtransfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
61 /* inverse function for moving-aggregate mode (0 if none) */
62 regproc aggminvtransfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
64 /* final function for moving-aggregate mode (0 if none) */
65 regproc aggmfinalfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
67 /* true to pass extra dummy arguments to aggfinalfn */
68 bool aggfinalextra BKI_DEFAULT(f);
70 /* true to pass extra dummy arguments to aggmfinalfn */
71 bool aggmfinalextra BKI_DEFAULT(f);
73 /* tells whether aggfinalfn modifies transition state */
74 char aggfinalmodify BKI_DEFAULT(r);
76 /* tells whether aggmfinalfn modifies transition state */
77 char aggmfinalmodify BKI_DEFAULT(r);
79 /* associated sort operator (0 if none) */
80 Oid aggsortop BKI_DEFAULT(0) BKI_LOOKUP_OPT(pg_operator);
82 /* type of aggregate's transition (state) data */
83 Oid aggtranstype BKI_LOOKUP(pg_type);
85 /* estimated size of state data (0 for default estimate) */
86 int32 aggtransspace BKI_DEFAULT(0);
88 /* type of moving-aggregate state data (0 if none) */
89 Oid aggmtranstype BKI_DEFAULT(0) BKI_LOOKUP_OPT(pg_type);
91 /* estimated size of moving-agg state (0 for default est) */
92 int32 aggmtransspace BKI_DEFAULT(0);
94 #ifdef CATALOG_VARLEN /* variable-length fields start here */
96 /* initial value for transition state (can be NULL) */
97 text agginitval BKI_DEFAULT(_null_);
99 /* initial value for moving-agg state (can be NULL) */
100 text aggminitval BKI_DEFAULT(_null_);
101 #endif
102 } FormData_pg_aggregate;
104 /* ----------------
105 * Form_pg_aggregate corresponds to a pointer to a tuple with
106 * the format of pg_aggregate relation.
107 * ----------------
109 typedef FormData_pg_aggregate *Form_pg_aggregate;
111 DECLARE_TOAST(pg_aggregate, 4159, 4160);
113 DECLARE_UNIQUE_INDEX_PKEY(pg_aggregate_fnoid_index, 2650, AggregateFnoidIndexId, pg_aggregate, btree(aggfnoid oid_ops));
115 MAKE_SYSCACHE(AGGFNOID, pg_aggregate_fnoid_index, 16);
117 #ifdef EXPOSE_TO_CLIENT_CODE
120 * Symbolic values for aggkind column. We distinguish normal aggregates
121 * from ordered-set aggregates (which have two sets of arguments, namely
122 * direct and aggregated arguments) and from hypothetical-set aggregates
123 * (which are a subclass of ordered-set aggregates in which the last
124 * direct arguments have to match up in number and datatypes with the
125 * aggregated arguments).
127 #define AGGKIND_NORMAL 'n'
128 #define AGGKIND_ORDERED_SET 'o'
129 #define AGGKIND_HYPOTHETICAL 'h'
131 /* Use this macro to test for "ordered-set agg including hypothetical case" */
132 #define AGGKIND_IS_ORDERED_SET(kind) ((kind) != AGGKIND_NORMAL)
135 * Symbolic values for aggfinalmodify and aggmfinalmodify columns.
136 * Preferably, finalfns do not modify the transition state value at all,
137 * but in some cases that would cost too much performance. We distinguish
138 * "pure read only" and "trashes it arbitrarily" cases, as well as the
139 * intermediate case where multiple finalfn calls are allowed but the
140 * transfn cannot be applied anymore after the first finalfn call.
142 #define AGGMODIFY_READ_ONLY 'r'
143 #define AGGMODIFY_SHAREABLE 's'
144 #define AGGMODIFY_READ_WRITE 'w'
146 #endif /* EXPOSE_TO_CLIENT_CODE */
149 extern ObjectAddress AggregateCreate(const char *aggName,
150 Oid aggNamespace,
151 bool replace,
152 char aggKind,
153 int numArgs,
154 int numDirectArgs,
155 oidvector *parameterTypes,
156 Datum allParameterTypes,
157 Datum parameterModes,
158 Datum parameterNames,
159 List *parameterDefaults,
160 Oid variadicArgType,
161 List *aggtransfnName,
162 List *aggfinalfnName,
163 List *aggcombinefnName,
164 List *aggserialfnName,
165 List *aggdeserialfnName,
166 List *aggmtransfnName,
167 List *aggminvtransfnName,
168 List *aggmfinalfnName,
169 bool finalfnExtraArgs,
170 bool mfinalfnExtraArgs,
171 char finalfnModify,
172 char mfinalfnModify,
173 List *aggsortopName,
174 Oid aggTransType,
175 int32 aggTransSpace,
176 Oid aggmTransType,
177 int32 aggmTransSpace,
178 const char *agginitval,
179 const char *aggminitval,
180 char proparallel);
182 #endif /* PG_AGGREGATE_H */