PostgreSQL Source Code git master
pg_aggregate.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * pg_aggregate.h
4 * definition of the "aggregate" system catalog (pg_aggregate)
5 *
6 *
7 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/catalog/pg_aggregate.h
11 *
12 * NOTES
13 * The Catalog.pm module reads this file and derives schema
14 * information.
15 *
16 *-------------------------------------------------------------------------
17 */
18#ifndef PG_AGGREGATE_H
19#define PG_AGGREGATE_H
20
21#include "catalog/genbki.h"
22#include "catalog/pg_aggregate_d.h" /* IWYU pragma: export */
23
25#include "nodes/pg_list.h"
26
27/* ----------------------------------------------------------------
28 * pg_aggregate definition.
29 * cpp turns this into typedef struct FormData_pg_aggregate
30 * ----------------------------------------------------------------
31 */
32CATALOG(pg_aggregate,2600,AggregateRelationId)
33{
34 /* pg_proc OID of the aggregate itself */
35 regproc aggfnoid BKI_LOOKUP(pg_proc);
36
37 /* aggregate kind, see AGGKIND_ categories below */
38 char aggkind BKI_DEFAULT(n);
39
40 /* number of arguments that are "direct" arguments */
41 int16 aggnumdirectargs BKI_DEFAULT(0);
42
43 /* transition function */
44 regproc aggtransfn BKI_LOOKUP(pg_proc);
45
46 /* final function (0 if none) */
47 regproc aggfinalfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
48
49 /* combine function (0 if none) */
50 regproc aggcombinefn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
51
52 /* function to convert transtype to bytea (0 if none) */
53 regproc aggserialfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
54
55 /* function to convert bytea to transtype (0 if none) */
56 regproc aggdeserialfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
57
58 /* forward function for moving-aggregate mode (0 if none) */
59 regproc aggmtransfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
60
61 /* inverse function for moving-aggregate mode (0 if none) */
62 regproc aggminvtransfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
63
64 /* final function for moving-aggregate mode (0 if none) */
65 regproc aggmfinalfn BKI_DEFAULT(-) BKI_LOOKUP_OPT(pg_proc);
66
67 /* true to pass extra dummy arguments to aggfinalfn */
68 bool aggfinalextra BKI_DEFAULT(f);
69
70 /* true to pass extra dummy arguments to aggmfinalfn */
71 bool aggmfinalextra BKI_DEFAULT(f);
72
73 /* tells whether aggfinalfn modifies transition state */
74 char aggfinalmodify BKI_DEFAULT(r);
75
76 /* tells whether aggmfinalfn modifies transition state */
77 char aggmfinalmodify BKI_DEFAULT(r);
78
79 /* associated sort operator (0 if none) */
80 Oid aggsortop BKI_DEFAULT(0) BKI_LOOKUP_OPT(pg_operator);
81
82 /* type of aggregate's transition (state) data */
83 Oid aggtranstype BKI_LOOKUP(pg_type);
84
85 /* estimated size of state data (0 for default estimate) */
86 int32 aggtransspace BKI_DEFAULT(0);
87
88 /* type of moving-aggregate state data (0 if none) */
89 Oid aggmtranstype BKI_DEFAULT(0) BKI_LOOKUP_OPT(pg_type);
90
91 /* estimated size of moving-agg state (0 for default est) */
92 int32 aggmtransspace BKI_DEFAULT(0);
93
94#ifdef CATALOG_VARLEN /* variable-length fields start here */
95
96 /* initial value for transition state (can be NULL) */
97 text agginitval BKI_DEFAULT(_null_);
98
99 /* initial value for moving-agg state (can be NULL) */
100 text aggminitval BKI_DEFAULT(_null_);
101#endif
103
104/* ----------------
105 * Form_pg_aggregate corresponds to a pointer to a tuple with
106 * the format of pg_aggregate relation.
107 * ----------------
108 */
110
111DECLARE_TOAST(pg_aggregate, 4159, 4160);
112
113DECLARE_UNIQUE_INDEX_PKEY(pg_aggregate_fnoid_index, 2650, AggregateFnoidIndexId, pg_aggregate, btree(aggfnoid oid_ops));
114
115MAKE_SYSCACHE(AGGFNOID, pg_aggregate_fnoid_index, 16);
116
117#ifdef EXPOSE_TO_CLIENT_CODE
118
119/*
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).
126 */
127#define AGGKIND_NORMAL 'n'
128#define AGGKIND_ORDERED_SET 'o'
129#define AGGKIND_HYPOTHETICAL 'h'
130
131/* Use this macro to test for "ordered-set agg including hypothetical case" */
132#define AGGKIND_IS_ORDERED_SET(kind) ((kind) != AGGKIND_NORMAL)
133
134/*
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.
141 */
142#define AGGMODIFY_READ_ONLY 'r'
143#define AGGMODIFY_SHAREABLE 's'
144#define AGGMODIFY_READ_WRITE 'w'
145
146#endif /* EXPOSE_TO_CLIENT_CODE */
147
148
149extern 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);
181
182#endif /* PG_AGGREGATE_H */
Oid regproc
Definition: c.h:620
int16_t int16
Definition: c.h:497
int32_t int32
Definition: c.h:498
#define BKI_LOOKUP(catalog)
Definition: genbki.h:46
#define BKI_DEFAULT(value)
Definition: genbki.h:35
#define BKI_LOOKUP_OPT(catalog)
Definition: genbki.h:47
DECLARE_UNIQUE_INDEX_PKEY(pg_aggregate_fnoid_index, 2650, AggregateFnoidIndexId, pg_aggregate, btree(aggfnoid oid_ops))
ObjectAddress AggregateCreate(const char *aggName, Oid aggNamespace, bool replace, char aggKind, int numArgs, int numDirectArgs, oidvector *parameterTypes, Datum allParameterTypes, Datum parameterModes, Datum parameterNames, List *parameterDefaults, Oid variadicArgType, List *aggtransfnName, List *aggfinalfnName, List *aggcombinefnName, List *aggserialfnName, List *aggdeserialfnName, List *aggmtransfnName, List *aggminvtransfnName, List *aggmfinalfnName, bool finalfnExtraArgs, bool mfinalfnExtraArgs, char finalfnModify, char mfinalfnModify, List *aggsortopName, Oid aggTransType, int32 aggTransSpace, Oid aggmTransType, int32 aggmTransSpace, const char *agginitval, const char *aggminitval, char proparallel)
Definition: pg_aggregate.c:46
FormData_pg_aggregate
Definition: pg_aggregate.h:102
CATALOG(pg_aggregate, 2600, AggregateRelationId)
Definition: pg_aggregate.h:32
FormData_pg_aggregate * Form_pg_aggregate
Definition: pg_aggregate.h:109
MAKE_SYSCACHE(AGGFNOID, pg_aggregate_fnoid_index, 16)
DECLARE_TOAST(pg_aggregate, 4159, 4160)
uintptr_t Datum
Definition: postgres.h:69
unsigned int Oid
Definition: postgres_ext.h:32
Definition: pg_list.h:54
Definition: c.h:697
Definition: c.h:658