1/*-------------------------------------------------------------------------
2 *
3 * parse_func.h
4 *
5 *
6 *
7 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/parser/parse_func.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef PARSER_FUNC_H
15#define PARSER_FUNC_H
16
17#include "catalog/namespace.h"
18#include "parser/parse_node.h"
19
20
21/* Result codes for func_get_detail */
22typedef enum
23{
24 FUNCDETAIL_NOTFOUND, /* no matching function */
25 FUNCDETAIL_MULTIPLE, /* too many matching functions */
26 FUNCDETAIL_NORMAL, /* found a matching regular function */
27 FUNCDETAIL_PROCEDURE, /* found a matching procedure */
28 FUNCDETAIL_AGGREGATE, /* found a matching aggregate function */
29 FUNCDETAIL_WINDOWFUNC, /* found a matching window function */
30 FUNCDETAIL_COERCION /* it's a type coercion request */
31} FuncDetailCode;
32
33
34extern Node *ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
35 Node *last_srf, FuncCall *fn, bool proc_call,
36 int location);
37
38extern FuncDetailCode func_get_detail(List *funcname,
39 List *fargs, List *fargnames,
40 int nargs, Oid *argtypes,
41 bool expand_variadic, bool expand_defaults,
42 Oid *funcid, Oid *rettype,
43 bool *retset, int *nvargs, Oid *vatype,
44 Oid **true_typeids, List **argdefaults);
45
46extern int func_match_argtypes(int nargs,
47 Oid *input_typeids,
48 FuncCandidateList raw_candidates,
49 FuncCandidateList *candidates);
50
51extern FuncCandidateList func_select_candidate(int nargs,
52 Oid *input_typeids,
53 FuncCandidateList candidates);
54
55extern void make_fn_arguments(ParseState *pstate,
56 List *fargs,
57 Oid *actual_arg_types,
58 Oid *declared_arg_types);
59
60extern const char *funcname_signature_string(const char *funcname, int nargs,
61 List *argnames, const Oid *argtypes);
62extern const char *func_signature_string(List *funcname, int nargs,
63 List *argnames, const Oid *argtypes);
64
65extern Oid LookupFuncName(List *funcname, int nargs, const Oid *argtypes,
66 bool missing_ok);
67extern Oid LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func,
68 bool missing_ok);
69
70extern void check_srf_call_placement(ParseState *pstate, Node *last_srf,
71 int location);
72
73#endif /* PARSE_FUNC_H */
74