1 /*-------------------------------------------------------------------------
2  *
3  * parse_agg.h
4  *	  handle aggregates and window functions in parser
5  *
6  * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  * src/include/parser/parse_agg.h
10  *
11  *-------------------------------------------------------------------------
12  */
13 #ifndef PARSE_AGG_H
14 #define PARSE_AGG_H
15 
16 #include "parser/parse_node.h"
17 
18 extern void transformAggregateCall(ParseState *pstate, Aggref *agg,
19 					   List *args, List *aggorder,
20 					   bool agg_distinct);
21 
22 extern Node *transformGroupingFunc(ParseState *pstate, GroupingFunc *g);
23 
24 extern void transformWindowFuncCall(ParseState *pstate, WindowFunc *wfunc,
25 						WindowDef *windef);
26 
27 extern void parseCheckAggregates(ParseState *pstate, Query *qry);
28 
29 extern List *expand_grouping_sets(List *groupingSets, int limit);
30 
31 extern int	get_aggregate_argtypes(Aggref *aggref, Oid *inputTypes);
32 
33 extern Oid resolve_aggregate_transtype(Oid aggfuncid,
34 							Oid aggtranstype,
35 							Oid *inputTypes,
36 							int numArguments);
37 
38 extern void build_aggregate_transfn_expr(Oid *agg_input_types,
39 							 int agg_num_inputs,
40 							 int agg_num_direct_inputs,
41 							 bool agg_variadic,
42 							 Oid agg_state_type,
43 							 Oid agg_input_collation,
44 							 Oid transfn_oid,
45 							 Oid invtransfn_oid,
46 							 Expr **transfnexpr,
47 							 Expr **invtransfnexpr);
48 
49 extern void build_aggregate_combinefn_expr(Oid agg_state_type,
50 							   Oid agg_input_collation,
51 							   Oid combinefn_oid,
52 							   Expr **combinefnexpr);
53 
54 extern void build_aggregate_serialfn_expr(Oid serialfn_oid,
55 							  Expr **serialfnexpr);
56 
57 extern void build_aggregate_deserialfn_expr(Oid deserialfn_oid,
58 								Expr **deserialfnexpr);
59 
60 extern void build_aggregate_finalfn_expr(Oid *agg_input_types,
61 							 int num_finalfn_inputs,
62 							 Oid agg_state_type,
63 							 Oid agg_result_type,
64 							 Oid agg_input_collation,
65 							 Oid finalfn_oid,
66 							 Expr **finalfnexpr);
67 
68 #endif   /* PARSE_AGG_H */
69