161 "functions cannot have more than %d arguments",
181 elog(
ERROR,
"allParameterTypes is not a 1-D Oid array");
205 elog(
ERROR,
"parameterModes is not a 1-D char array");
219 errmsg(
"cannot determine result data type"),
232 errmsg(
"unsafe use of pseudo-type \"internal\""),
253 errmsg(
"cannot determine result data type"),
261 errmsg(
"unsafe use of pseudo-type \"internal\""),
281 elog(
ERROR,
"variadic parameter must be last");
285 elog(
ERROR,
"variadic parameter must be last");
292 elog(
ERROR,
"variadic parameter must be last");
307 elog(
ERROR,
"variadic parameter is not an array");
404 errmsg(
"function \"%s\" already exists with same argument types",
411 if (
oldproc->prokind != prokind)
414 errmsg(
"cannot change routine kind"),
437 if (returnType !=
oldproc->prorettype ||
438 returnsSet !=
oldproc->proretset)
442 ?
errmsg(
"cannot change whether a procedure has output parameters")
443 :
errmsg(
"cannot change return type of existing function"),
473 errmsg(
"cannot change return type of existing function"),
474 errdetail(
"Row type defined by OUT parameters is different."),
518 errmsg(
"cannot change name of input parameter \"%s\"",
535 if (
oldproc->pronargdefaults != 0)
545 errmsg(
"cannot remove parameter defaults from existing function"),
569 errmsg(
"cannot change data type of existing parameter default value"),
681 (
errmsg(
"function \"%s\" will be effectively temporary",
721 int save_nestlevel = 0;
796 errmsg(
"there is no built-in function named \"%s\"",
889 errmsg(
"SQL functions cannot return type %s",
895 for (
i = 0;
i < proc->pronargs;
i++)
904 errmsg(
"SQL functions cannot have arguments of type %s",
919 callback_arg.
prosrc = prosrc;
1007 rettype, rettupdesc,
1176 int newcp = cursorpos;
1239 for (
i = 0;
i < nelems;
i++)
void recordDependencyOnNewAcl(Oid classId, Oid objectId, int32 objsubId, Oid ownerId, Acl *acl)
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
bool object_ownercheck(Oid classid, Oid objectid, Oid roleid)
Acl * get_user_default_acl(ObjectType objtype, Oid ownerId, Oid nsp_oid)
#define DatumGetArrayTypeP(X)
void deconstruct_array_builtin(const ArrayType *array, Oid elmtype, Datum **elemsp, bool **nullsp, int *nelemsp)
static Datum values[MAXATTR]
#define CStringGetTextDatum(s)
#define TextDatumGetCString(d)
#define Assert(condition)
#define OidIsValid(objectId)
Oid GetNewOidWithIndex(Relation relation, Oid indexId, AttrNumber oidcolumn)
void record_object_address_dependencies(const ObjectAddress *depender, ObjectAddresses *referenced, DependencyType behavior)
void collectDependenciesOfExpr(ObjectAddresses *addrs, Node *expr, List *rtable)
bool find_temp_object(const ObjectAddresses *addrs, bool local_temp_okay, ObjectAddress *foundobj)
void add_exact_object_address(const ObjectAddress *object, ObjectAddresses *addrs)
ObjectAddresses * new_object_addresses(void)
void free_object_addresses(ObjectAddresses *addrs)
void * load_external_function(const char *filename, const char *funcname, bool signalNotFound, void **filehandle)
int getinternalerrposition(void)
int errmsg_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...)
int internalerrquery(const char *query)
int internalerrposition(int cursorpos)
int errdetail_internal(const char *fmt,...)
int errdetail(const char *fmt,...)
ErrorContextCallback * error_context_stack
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
int errposition(int cursorpos)
#define ereport(elevel,...)
Oid fmgr_internal_function(const char *proname)
bool CheckFunctionValidatorAccess(Oid validatorOid, Oid functionOid)
const Pg_finfo_record * fetch_finfo_record(void *filehandle, const char *funcname)
#define OidFunctionCall1(functionId, arg1)
TupleDesc build_function_result_tupdesc_t(HeapTuple procTuple)
TupleDesc build_function_result_tupdesc_d(char prokind, Datum proallargtypes, Datum proargmodes, Datum proargnames)
int get_func_input_arg_names(Datum proargnames, Datum proargmodes, char ***arg_names)
TypeFuncClass get_func_result_type(Oid functionId, Oid *resultTypeId, TupleDesc *resultTupleDesc)
bool check_sql_fn_retval(List *queryTreeLists, Oid rettype, TupleDesc rettupdesc, char prokind, bool insertDroppedCols)
void check_sql_fn_statements(List *queryTreeLists)
void sql_fn_parser_setup(struct ParseState *pstate, SQLFunctionParseInfoPtr pinfo)
SQLFunctionParseInfoPtr prepare_sql_fn_parse_info(HeapTuple procedureTuple, Node *call_expr, Oid inputCollation)
int NewGUCNestLevel(void)
void ProcessGUCArray(ArrayType *array, GucContext context, GucSource source, GucAction action)
void AtEOXact_GUC(bool isCommit, int nestLevel)
bool check_function_bodies
HeapTuple heap_modify_tuple(HeapTuple tuple, TupleDesc tupleDesc, const Datum *replValues, const bool *replIsnull, const bool *doReplace)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, const Datum *values, const bool *isnull)
void heap_freetuple(HeapTuple htup)
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
void CatalogTupleUpdate(Relation heapRel, const ItemPointerData *otid, HeapTuple tup)
void CatalogTupleInsert(Relation heapRel, HeapTuple tup)
List * lappend(List *list, void *datum)
List * lappend_oid(List *list, Oid datum)
Oid get_element_type(Oid typid)
char get_typtype(Oid typid)
int pg_mbstrlen_with_len(const char *mbstr, int limit)
int pg_mblen(const char *mbstr)
void namestrcpy(Name name, const char *str)
bool isTempNamespace(Oid namespaceId)
Oid exprType(const Node *expr)
#define IsA(nodeptr, _type_)
#define castNode(_type_, nodeptr)
#define InvokeObjectPostCreateHook(classId, objectId, subId)
char * getObjectDescription(const ObjectAddress *object, bool missing_ok)
#define ObjectAddressSet(addr, class_id, object_id)
char * nodeToString(const void *obj)
void(* ParserSetupHook)(ParseState *pstate, void *arg)
char * check_valid_internal_signature(Oid ret_type, const Oid *declared_arg_types, int nargs)
char * check_valid_polymorphic_signature(Oid ret_type, const Oid *declared_arg_types, int nargs)
long deleteDependencyRecordsFor(Oid classId, Oid objectId, bool skipExtensionDeps)
void recordDependencyOnCurrentExtension(const ObjectAddress *object, bool isReplace)
#define lfirst_node(type, lc)
static int list_length(const List *l)
static ListCell * list_nth_cell(const List *list, int n)
#define foreach_oid(var, lst)
static ListCell * lnext(const List *l, const ListCell *c)
ObjectAddress ProcedureCreate(const char *procedureName, Oid procNamespace, bool replace, bool returnsSet, Oid returnType, Oid proowner, Oid languageObjectId, Oid languageValidator, const char *prosrc, const char *probin, Node *prosqlbody, char prokind, bool security_definer, bool isLeakProof, bool isStrict, char volatility, char parallel, oidvector *parameterTypes, Datum allParameterTypes, Datum parameterModes, Datum parameterNames, List *parameterDefaults, Datum trftypes, List *trfoids, Datum proconfig, Oid prosupport, float4 procost, float4 prorows)
static void sql_function_parse_error_callback(void *arg)
Datum fmgr_internal_validator(PG_FUNCTION_ARGS)
Datum fmgr_c_validator(PG_FUNCTION_ARGS)
List * oid_array_to_list(Datum datum)
static bool match_prosrc_to_literal(const char *prosrc, const char *literal, int cursorpos, int *newcursorpos)
bool function_parse_error_transpose(const char *prosrc)
Datum fmgr_sql_validator(PG_FUNCTION_ARGS)
static int match_prosrc_to_query(const char *prosrc, const char *queryText, int cursorpos)
FormData_pg_proc * Form_pg_proc
void recordDependencyOnOwner(Oid classId, Oid objectId, Oid owner)
void pgstat_create_function(Oid proid)
List * pg_analyze_and_rewrite_withcb(RawStmt *parsetree, const char *query_string, ParserSetupHook parserSetup, void *parserSetupArg, QueryEnvironment *queryEnv)
List * pg_parse_query(const char *query_string)
List * pg_rewrite_query(Query *query)
static Datum PointerGetDatum(const void *X)
static Datum Float4GetDatum(float4 X)
static Oid DatumGetObjectId(Datum X)
static Datum UInt16GetDatum(uint16 X)
static Datum BoolGetDatum(bool X)
static Datum ObjectIdGetDatum(Oid X)
static Datum NameGetDatum(const NameData *X)
static Pointer DatumGetPointer(Datum X)
static Datum CharGetDatum(char X)
void * stringToNode(const char *str)
char * format_procedure(Oid procedure_oid)
#define RelationGetDescr(relation)
void AcquireRewriteLocks(Query *parsetree, bool forExecute, bool forUpdatePushedDown)
struct ErrorContextCallback * previous
Oid values[FLEXIBLE_ARRAY_MEMBER]
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
HeapTuple SearchSysCache3(int cacheId, Datum key1, Datum key2, Datum key3)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Datum SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, AttrNumber attributeNumber)
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
bool equalRowTypes(TupleDesc tupdesc1, TupleDesc tupdesc2)
void CommandCounterIncrement(void)