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 */ |
22 | typedef 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 | |
34 | extern Node *ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, |
35 | Node *last_srf, FuncCall *fn, bool proc_call, |
36 | int location); |
37 | |
38 | extern 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 | |
46 | extern int func_match_argtypes(int nargs, |
47 | Oid *input_typeids, |
48 | FuncCandidateList raw_candidates, |
49 | FuncCandidateList *candidates); |
50 | |
51 | extern FuncCandidateList func_select_candidate(int nargs, |
52 | Oid *input_typeids, |
53 | FuncCandidateList candidates); |
54 | |
55 | extern void make_fn_arguments(ParseState *pstate, |
56 | List *fargs, |
57 | Oid *actual_arg_types, |
58 | Oid *declared_arg_types); |
59 | |
60 | extern const char *funcname_signature_string(const char *funcname, int nargs, |
61 | List *argnames, const Oid *argtypes); |
62 | extern const char *func_signature_string(List *funcname, int nargs, |
63 | List *argnames, const Oid *argtypes); |
64 | |
65 | extern Oid LookupFuncName(List *funcname, int nargs, const Oid *argtypes, |
66 | bool missing_ok); |
67 | extern Oid LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, |
68 | bool missing_ok); |
69 | |
70 | extern void check_srf_call_placement(ParseState *pstate, Node *last_srf, |
71 | int location); |
72 | |
73 | #endif /* PARSE_FUNC_H */ |
74 | |