aboutsummaryrefslogtreecommitdiff
path: root/contrib/intagg/int_aggregate.sql.in
blob: e08324aead1665e76b12a05af710d35b416a5719 (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
-- Drop functions
drop function int_agg_state (int4, int4);
drop function int_agg_final_array (int4);
drop aggregate int_array_aggregate(int4);
drop function int_array_enum (int4[]);


-- Internal function for the aggregate
-- Is called for each item in an aggregation
create function int_agg_state (int4, int4)
	returns int4
	as 'MODULE_FILENAME','int_agg_state'
	language 'c';

-- Internal function for the aggregate
-- Is called at the end of the aggregation, and returns an array.
create function int_agg_final_array (int4)
	returns int4[]
	as 'MODULE_FILENAME','int_agg_final_array'
	language 'c';

-- The aggration funcion.
-- uses the above functions to create an array of integers from an aggregation.
create aggregate int_array_aggregate
(
	BASETYPE = int4,
	SFUNC = int_agg_state,
	STYPE = int4,
	FINALFUNC = int_agg_final_array,
	INITCOND = 0
);

-- The enumeration function
-- returns each element in a one dimentional integer array
-- as a row.
create function int_array_enum(int4[])
	returns setof integer
	as 'MODULE_FILENAME','int_enum'
	language 'c';