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-2024, 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"
23 
24 #include "catalog/objectaddress.h"
25 #include "nodes/pg_list.h"
26 
27 /* ----------------------------------------------------------------
28  * pg_aggregate definition.
29  * cpp turns this into typedef struct FormData_pg_aggregate
30  * ----------------------------------------------------------------
31  */
32 CATALOG(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 
111 DECLARE_TOAST(pg_aggregate, 4159, 4160);
112 
113 DECLARE_UNIQUE_INDEX_PKEY(pg_aggregate_fnoid_index, 2650, AggregateFnoidIndexId, pg_aggregate, btree(aggfnoid oid_ops));
114 
115 MAKE_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 
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);
181 
182 #endif /* PG_AGGREGATE_H */
signed short int16
Definition: c.h:480
signed int int32
Definition: c.h:481
Oid regproc
Definition: c.h:636
#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:64
unsigned int Oid
Definition: postgres_ext.h:31
Definition: pg_list.h:54
Definition: c.h:713
Definition: c.h:674