66 lines
2.7 KiB
C
Executable File
66 lines
2.7 KiB
C
Executable File
/* -------------------------------------------------------------------------
|
|
*
|
|
* parse_func.h
|
|
*
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/parser/parse_func.h
|
|
*
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PARSER_FUNC_H
|
|
#define PARSER_FUNC_H
|
|
|
|
#include "catalog/namespace.h"
|
|
#include "parser/parse_node.h"
|
|
|
|
/*
|
|
* This structure is used to explore the inheritance hierarchy above
|
|
* nodes in the type tree in order to disambiguate among polymorphic
|
|
* functions.
|
|
*/
|
|
typedef struct _InhPaths {
|
|
int nsupers; /* number of superclasses */
|
|
Oid self; /* this class */
|
|
Oid* supervec; /* vector of superclasses */
|
|
} InhPaths;
|
|
|
|
/* Result codes for func_get_detail */
|
|
typedef enum {
|
|
FUNCDETAIL_NOTFOUND, /* no matching function */
|
|
FUNCDETAIL_MULTIPLE, /* too many matching functions */
|
|
FUNCDETAIL_NORMAL, /* found a matching regular function */
|
|
FUNCDETAIL_AGGREGATE, /* found a matching aggregate function */
|
|
FUNCDETAIL_WINDOWFUNC, /* found a matching window function */
|
|
FUNCDETAIL_COERCION /* it's a type coercion request */
|
|
} FuncDetailCode;
|
|
|
|
extern Node* ParseFuncOrColumn(
|
|
ParseState* pstate, List* funcname, List* fargs, FuncCall* fn, int location, bool call_func = false);
|
|
|
|
extern FuncDetailCode func_get_detail(List* funcname, List* fargs, List* fargnames, int nargs, Oid* argtypes,
|
|
bool expand_variadic, bool expand_defaults, Oid* funcid, Oid* rettype, bool* retset, int* nvargs, Oid* vatype,
|
|
Oid** true_typeids, List** argdefaults, bool call_func = false, Oid* refSynOid = NULL);
|
|
|
|
extern int func_match_argtypes(
|
|
int nargs, Oid* input_typeids, FuncCandidateList raw_candidates, FuncCandidateList* candidates);
|
|
|
|
extern FuncCandidateList func_select_candidate(int nargs, Oid* input_typeids, FuncCandidateList candidates);
|
|
|
|
extern void make_fn_arguments(ParseState* pstate, List* fargs, Oid* actual_arg_types, Oid* declared_arg_types);
|
|
|
|
extern const char* funcname_signature_string(const char* funcname, int nargs, List* argnames, const Oid* argtypes);
|
|
extern const char* func_signature_string(List* funcname, int nargs, List* argnames, const Oid* argtypes);
|
|
|
|
extern Oid LookupFuncName(List* funcname, int nargs, const Oid* argtypes, bool noError);
|
|
extern Oid LookupFuncNameTypeNames(List* funcname, List* argtypes, bool noError);
|
|
extern Oid LookupFuncNameOptTypeNames(List* funcname, List* argtypes, bool noError);
|
|
extern Oid LookupAggNameTypeNames(List* aggname, List* argtypes, bool noError);
|
|
|
|
extern void check_pg_get_expr_args(ParseState* pstate, Oid fnoid, List* args);
|
|
extern int GetPriority(Oid typeoid);
|
|
#endif /* PARSE_FUNC_H */
|