aboutsummaryrefslogtreecommitdiff
path: root/src/include/catalog/pg_aggregate.h
blob: 252895276e629bdf78c35cb9872291d01ed9a1ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/*-------------------------------------------------------------------------
 *
 * pg_aggregate.h
 *	  definition of the system "aggregate" relation (pg_aggregate)
 *	  along with the relation's initial contents.
 *
 *
 * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * $Id: pg_aggregate.h,v 1.38 2002/04/11 20:00:11 tgl Exp $
 *
 * NOTES
 *	  the genbki.sh script reads this file and generates .bki
 *	  information from the DATA() statements.
 *
 *-------------------------------------------------------------------------
 */
#ifndef PG_AGGREGATE_H
#define PG_AGGREGATE_H

/* ----------------
 *		postgres.h contains the system type definitions and the
 *		CATALOG(), BOOTSTRAP and DATA() sugar words so this file
 *		can be read by both genbki.sh and the C compiler.
 * ----------------
 */

/* ----------------------------------------------------------------
 *		pg_aggregate definition.
 *
 *		cpp turns this into typedef struct FormData_pg_aggregate
 *
 *	aggfnoid			pg_proc OID of the aggregate itself
 *	aggtransfn			transition function
 *	aggfinalfn			final function
 *	aggtranstype		type of aggregate's transition (state) data
 *	agginitval			initial value for transition state
 * ----------------------------------------------------------------
 */
CATALOG(pg_aggregate) BKI_WITHOUT_OIDS
{
	regproc		aggfnoid;
	regproc		aggtransfn;
	regproc		aggfinalfn;
	Oid			aggtranstype;
	text		agginitval;		/* VARIABLE LENGTH FIELD */
} FormData_pg_aggregate;

/* ----------------
 *		Form_pg_aggregate corresponds to a pointer to a tuple with
 *		the format of pg_aggregate relation.
 * ----------------
 */
typedef FormData_pg_aggregate *Form_pg_aggregate;

/* ----------------
 *		compiler constants for pg_aggregate
 * ----------------
 */

#define Natts_pg_aggregate				5
#define Anum_pg_aggregate_aggfnoid		1
#define Anum_pg_aggregate_aggtransfn	2
#define Anum_pg_aggregate_aggfinalfn	3
#define Anum_pg_aggregate_aggtranstype	4
#define Anum_pg_aggregate_agginitval	5


/* ----------------
 * initial contents of pg_aggregate
 * ---------------
 */

/* avg */
DATA(insert ( 2100	int8_accum		numeric_avg		1231	"{0,0,0}" ));
DATA(insert ( 2101	int4_avg_accum	int8_avg		1016	"{0,0}" ));
DATA(insert ( 2102	int2_avg_accum	int8_avg		1016	"{0,0}" ));
DATA(insert ( 2103	numeric_accum	numeric_avg		1231	"{0,0,0}" ));
DATA(insert ( 2104	float4_accum	float8_avg		1022	"{0,0,0}" ));
DATA(insert ( 2105	float8_accum	float8_avg		1022	"{0,0,0}" ));
DATA(insert ( 2106	interval_accum	interval_avg	1187	"{0 second,0 second}" ));

/* sum */
DATA(insert ( 2107	int8_sum		-				1700	_null_ ));
DATA(insert ( 2108	int4_sum		-				20		_null_ ));
DATA(insert ( 2109	int2_sum		-				20		_null_ ));
DATA(insert ( 2110	float4pl		-				700		_null_ ));
DATA(insert ( 2111	float8pl		-				701		_null_ ));
DATA(insert ( 2112	cash_pl			-				790		_null_ ));
DATA(insert ( 2113	interval_pl		-				1186	_null_ ));
DATA(insert ( 2114	numeric_add		-				1700	_null_ ));

/* max */
DATA(insert ( 2115	int8larger		-				20		_null_ ));
DATA(insert ( 2116	int4larger		-				23		_null_ ));
DATA(insert ( 2117	int2larger		-				21		_null_ ));
DATA(insert ( 2118	oidlarger		-				26		_null_ ));
DATA(insert ( 2119	float4larger	-				700		_null_ ));
DATA(insert ( 2120	float8larger	-				701		_null_ ));
DATA(insert ( 2121	int4larger		-				702		_null_ ));
DATA(insert ( 2122	date_larger		-				1082	_null_ ));
DATA(insert ( 2123	time_larger		-				1083	_null_ ));
DATA(insert ( 2124	timetz_larger	-				1266	_null_ ));
DATA(insert ( 2125	cashlarger		-				790		_null_ ));
DATA(insert ( 2126	timestamp_larger	-			1114	_null_ ));
DATA(insert ( 2127	timestamptz_larger	-			1184	_null_ ));
DATA(insert ( 2128	interval_larger	-				1186	_null_ ));
DATA(insert ( 2129	text_larger		-				25		_null_ ));
DATA(insert ( 2130	numeric_larger	-				1700	_null_ ));

/* min */
DATA(insert ( 2131	int8smaller		-				20		_null_ ));
DATA(insert ( 2132	int4smaller		-				23		_null_ ));
DATA(insert ( 2133	int2smaller		-				21		_null_ ));
DATA(insert ( 2134	oidsmaller		-				26		_null_ ));
DATA(insert ( 2135	float4smaller	-				700		_null_ ));
DATA(insert ( 2136	float8smaller	-				701		_null_ ));
DATA(insert ( 2137	int4smaller		-				702		_null_ ));
DATA(insert ( 2138	date_smaller	-				1082	_null_ ));
DATA(insert ( 2139	time_smaller	-				1083	_null_ ));
DATA(insert ( 2140	timetz_smaller	-				1266	_null_ ));
DATA(insert ( 2141	cashsmaller		-				790		_null_ ));
DATA(insert ( 2142	timestamp_smaller	-			1114	_null_ ));
DATA(insert ( 2143	timestamptz_smaller	-			1184	_null_ ));
DATA(insert ( 2144	interval_smaller	-			1186	_null_ ));
DATA(insert ( 2145	text_smaller	-				25		_null_ ));
DATA(insert ( 2146	numeric_smaller	-				1700	_null_ ));

/*
 * Using int8inc for count() is cheating a little, since it really only
 * takes 1 parameter not 2, but nodeAgg.c won't complain ...
 */
DATA(insert ( 2147	int8inc		-					 20		0 ));

/* variance */
DATA(insert ( 2148	int8_accum	numeric_variance	1231	"{0,0,0}" ));
DATA(insert ( 2149	int4_accum	numeric_variance	1231	"{0,0,0}" ));
DATA(insert ( 2150	int2_accum	numeric_variance	1231	"{0,0,0}" ));
DATA(insert ( 2151	float4_accum	float8_variance	1022	"{0,0,0}" ));
DATA(insert ( 2152	float8_accum	float8_variance	1022	"{0,0,0}" ));
DATA(insert ( 2153	numeric_accum	numeric_variance	1231	"{0,0,0}" ));

/* stddev */
DATA(insert ( 2154	int8_accum	numeric_stddev		1231	"{0,0,0}" ));
DATA(insert ( 2155	int4_accum	numeric_stddev		1231	"{0,0,0}" ));
DATA(insert ( 2156	int2_accum	numeric_stddev		1231	"{0,0,0}" ));
DATA(insert ( 2157	float4_accum	float8_stddev	1022	"{0,0,0}" ));
DATA(insert ( 2158	float8_accum	float8_stddev	1022	"{0,0,0}" ));
DATA(insert ( 2159	numeric_accum	numeric_stddev	1231	"{0,0,0}" ));

/*
 * prototypes for functions in pg_aggregate.c
 */
extern void AggregateCreate(const char *aggName,
							Oid aggNamespace,
							List *aggtransfnName,
							List *aggfinalfnName,
							Oid aggBaseType,
							Oid aggTransType,
							const char *agginitval);

#endif   /* PG_AGGREGATE_H */