1 /*------------------------------------------------------------------------- 2 * 3 * parse_func.h 4 * 5 * 6 * 7 * Portions Copyright (c) 1996-2018, 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 noError); 67 extern Oid LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func, 68 bool noError); 69 70 extern void check_srf_call_placement(ParseState *pstate, Node *last_srf, 71 int location); 72 73 #endif /* PARSE_FUNC_H */ 74