mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-04-09 19:50:45 +08:00
First phase of OUT-parameters project. We can now define and use SQL
functions with OUT parameters. The various PLs still need work, as does pg_dump. Rudimentary docs and regression tests included.
This commit is contained in:
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user