diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/catalog/pg_proc.h | 9 | ||||
-rw-r--r-- | src/include/executor/functions.h | 4 | ||||
-rw-r--r-- | src/include/fmgr.h | 6 | ||||
-rw-r--r-- | src/include/funcapi.h | 55 | ||||
-rw-r--r-- | src/include/utils/lsyscache.h | 12 |
5 files changed, 65 insertions, 21 deletions
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index d86ce3ef0eb..cb90a5e04c3 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.356 2005/03/29 19:44:23 tgl Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.357 2005/03/31 22:46:18 tgl Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -3668,9 +3668,10 @@ extern Oid ProcedureCreate(const char *procedureName, bool security_definer, bool isStrict, char volatility, - int parameterCount, - const Oid *parameterTypes, - const char *parameterNames[]); + oidvector *parameterTypes, + Datum allParameterTypes, + Datum parameterModes, + Datum parameterNames); extern bool function_parse_error_transpose(const char *prosrc); diff --git a/src/include/executor/functions.h b/src/include/executor/functions.h index fdc23b2812e..88ca87fd86d 100644 --- a/src/include/executor/functions.h +++ b/src/include/executor/functions.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/executor/functions.h,v 1.24 2004/12/31 22:03:29 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/executor/functions.h,v 1.25 2005/03/31 22:46:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -20,7 +20,7 @@ extern Datum fmgr_sql(PG_FUNCTION_ARGS); -extern bool check_sql_fn_retval(Oid rettype, char fn_typtype, +extern bool check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList, JunkFilter **junkFilter); diff --git a/src/include/fmgr.h b/src/include/fmgr.h index 0c11130053e..3dc53ccb166 100644 --- a/src/include/fmgr.h +++ b/src/include/fmgr.h @@ -11,13 +11,16 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/fmgr.h,v 1.37 2005/03/22 20:13:09 tgl Exp $ + * $PostgreSQL: pgsql/src/include/fmgr.h,v 1.38 2005/03/31 22:46:24 tgl Exp $ * *------------------------------------------------------------------------- */ #ifndef FMGR_H #define FMGR_H +/* We don't want to include primnodes.h here, so make a stub reference */ +struct Node; + /* * All functions that can be called directly by fmgr must have this signature. @@ -402,6 +405,7 @@ extern void clear_external_function_hash(void *filehandle); extern Oid fmgr_internal_function(const char *proname); extern Oid get_fn_expr_rettype(FmgrInfo *flinfo); extern Oid get_fn_expr_argtype(FmgrInfo *flinfo, int argnum); +extern Oid get_call_expr_argtype(struct Node *expr, int argnum); /* * Routines in dfmgr.c diff --git a/src/include/funcapi.h b/src/include/funcapi.h index 00549897d58..c4d1809948d 100644 --- a/src/include/funcapi.h +++ b/src/include/funcapi.h @@ -9,7 +9,7 @@ * * Copyright (c) 2002-2005, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/include/funcapi.h,v 1.15 2005/01/01 05:43:08 momjian Exp $ + * $PostgreSQL: pgsql/src/include/funcapi.h,v 1.16 2005/03/31 22:46:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -124,7 +124,57 @@ typedef struct FuncCallContext } FuncCallContext; /*---------- - * Support to ease writing Functions returning composite types + * Support to ease writing functions returning composite types + * + * External declarations: + * get_call_result_type: + * Given a function's call info record, determine the kind of datatype + * it is supposed to return. If resultTypeId isn't NULL, *resultTypeId + * receives the actual datatype OID (this is mainly useful for scalar + * result types). If resultTupleDesc isn't NULL, *resultTupleDesc + * receives a pointer to a TupleDesc when the result is of a composite + * type, or NULL when it's a scalar result or the rowtype could not be + * determined. NB: the tupledesc should be copied if it is to be + * accessed over a long period. + * get_expr_result_type: + * Given an expression node, return the same info as for + * get_call_result_type. Note: the cases in which rowtypes cannot be + * determined are different from the cases for get_call_result_type. + * get_func_result_type: + * Given only a function's OID, return the same info as for + * get_call_result_type. Note: the cases in which rowtypes cannot be + * determined are different from the cases for get_call_result_type. + * Do *not* use this if you can use one of the others. + *---------- + */ + +/* Type categories for get_call_result_type and siblings */ +typedef enum TypeFuncClass +{ + TYPEFUNC_SCALAR, /* scalar result type */ + TYPEFUNC_COMPOSITE, /* determinable rowtype result */ + TYPEFUNC_RECORD, /* indeterminate rowtype result */ + TYPEFUNC_OTHER /* bogus type, eg pseudotype */ +} TypeFuncClass; + +extern TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, + Oid *resultTypeId, + TupleDesc *resultTupleDesc); +extern TypeFuncClass get_expr_result_type(Node *expr, + Oid *resultTypeId, + TupleDesc *resultTupleDesc); +extern TypeFuncClass get_func_result_type(Oid functionId, + Oid *resultTypeId, + TupleDesc *resultTupleDesc); + +extern TupleDesc build_function_result_tupdesc_d(Datum proallargtypes, + Datum proargmodes, + Datum proargnames); +extern TupleDesc build_function_result_tupdesc_t(HeapTuple procTuple); + + +/*---------- + * Support to ease writing functions returning composite types * * External declarations: * TupleDesc RelationNameGetTupleDesc(const char *relname) - Use to get a @@ -160,7 +210,6 @@ typedef struct FuncCallContext /* obsolete version of above */ #define TupleGetDatum(_slot, _tuple) PointerGetDatum((_tuple)->t_data) -/* from tupdesc.c */ extern TupleDesc RelationNameGetTupleDesc(const char *relname); extern TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases); diff --git a/src/include/utils/lsyscache.h b/src/include/utils/lsyscache.h index 1c5398a71b0..845a886ba82 100644 --- a/src/include/utils/lsyscache.h +++ b/src/include/utils/lsyscache.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/lsyscache.h,v 1.95 2005/03/29 00:17:18 tgl Exp $ + * $PostgreSQL: pgsql/src/include/utils/lsyscache.h,v 1.96 2005/03/31 22:46:27 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -24,15 +24,6 @@ typedef enum IOFuncSelector IOFunc_send } IOFuncSelector; -/* Type categories for get_type_func_class */ -typedef enum TypeFuncClass -{ - TYPEFUNC_SCALAR, - TYPEFUNC_COMPOSITE, - TYPEFUNC_RECORD, - TYPEFUNC_OTHER -} TypeFuncClass; - extern bool op_in_opclass(Oid opno, Oid opclass); extern void get_op_opclass_properties(Oid opno, Oid opclass, int *strategy, Oid *subtype, @@ -94,7 +85,6 @@ extern char get_typstorage(Oid typid); extern int32 get_typtypmod(Oid typid); extern Node *get_typdefault(Oid typid); extern char get_typtype(Oid typid); -extern TypeFuncClass get_type_func_class(Oid typid); extern Oid get_typ_typrelid(Oid typid); extern Oid get_element_type(Oid typid); extern Oid get_array_type(Oid typid); |