summaryrefslogtreecommitdiffstats
path: root/src/include/parser/parse_agg.h
blob: e9afd99d11fc54bd2c009954fa85b692a10f081a (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
/*-------------------------------------------------------------------------
 *
 * parse_agg.h
 *	  handle aggregates and window functions in parser
 *
 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/parser/parse_agg.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef PARSE_AGG_H
#define PARSE_AGG_H

#include "parser/parse_node.h"

extern void transformAggregateCall(ParseState *pstate, Aggref *agg,
								   List *args, List *aggorder,
								   bool agg_distinct);

extern Node *transformGroupingFunc(ParseState *pstate, GroupingFunc *p);

extern void transformWindowFuncCall(ParseState *pstate, WindowFunc *wfunc,
									WindowDef *windef);

extern void parseCheckAggregates(ParseState *pstate, Query *qry);

extern List *expand_grouping_sets(List *groupingSets, bool groupDistinct, int limit);

extern int	get_aggregate_argtypes(Aggref *aggref, Oid *inputTypes);

extern Oid	resolve_aggregate_transtype(Oid aggfuncid,
										Oid aggtranstype,
										Oid *inputTypes,
										int numArguments);

extern bool agg_args_support_sendreceive(Aggref *aggref);

extern void build_aggregate_transfn_expr(Oid *agg_input_types,
										 int agg_num_inputs,
										 int agg_num_direct_inputs,
										 bool agg_variadic,
										 Oid agg_state_type,
										 Oid agg_input_collation,
										 Oid transfn_oid,
										 Oid invtransfn_oid,
										 Expr **transfnexpr,
										 Expr **invtransfnexpr);

extern void build_aggregate_serialfn_expr(Oid serialfn_oid,
										  Expr **serialfnexpr);

extern void build_aggregate_deserialfn_expr(Oid deserialfn_oid,
											Expr **deserialfnexpr);

extern void build_aggregate_finalfn_expr(Oid *agg_input_types,
										 int num_finalfn_inputs,
										 Oid agg_state_type,
										 Oid agg_result_type,
										 Oid agg_input_collation,
										 Oid finalfn_oid,
										 Expr **finalfnexpr);

#endif							/* PARSE_AGG_H */