mirror of
https://github.com/postgres/postgres.git
synced 2025-11-29 23:43:17 +03:00
Implement SQL-spec RETURNS TABLE syntax for functions.
(Unlike the original submission, this patch treats TABLE output parameters as being entirely equivalent to OUT parameters -- tgl) Pavel Stehule
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* Copyright (c) 2002-2008, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/fmgr/funcapi.c,v 1.40 2008/07/16 01:30:22 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/fmgr/funcapi.c,v 1.41 2008/07/18 03:32:52 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -550,7 +550,7 @@ resolve_polymorphic_argtypes(int numargs, Oid *argtypes, char *argmodes,
|
||||
case ANYELEMENTOID:
|
||||
case ANYNONARRAYOID:
|
||||
case ANYENUMOID:
|
||||
if (argmode == PROARGMODE_OUT)
|
||||
if (argmode == PROARGMODE_OUT || argmode == PROARGMODE_TABLE)
|
||||
have_anyelement_result = true;
|
||||
else
|
||||
{
|
||||
@@ -565,7 +565,7 @@ resolve_polymorphic_argtypes(int numargs, Oid *argtypes, char *argmodes,
|
||||
}
|
||||
break;
|
||||
case ANYARRAYOID:
|
||||
if (argmode == PROARGMODE_OUT)
|
||||
if (argmode == PROARGMODE_OUT || argmode == PROARGMODE_TABLE)
|
||||
have_anyarray_result = true;
|
||||
else
|
||||
{
|
||||
@@ -582,7 +582,7 @@ resolve_polymorphic_argtypes(int numargs, Oid *argtypes, char *argmodes,
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (argmode != PROARGMODE_OUT)
|
||||
if (argmode != PROARGMODE_OUT && argmode != PROARGMODE_TABLE)
|
||||
inargno++;
|
||||
}
|
||||
|
||||
@@ -848,7 +848,8 @@ get_func_result_name(Oid functionId)
|
||||
argmodes[i] == PROARGMODE_VARIADIC)
|
||||
continue;
|
||||
Assert(argmodes[i] == PROARGMODE_OUT ||
|
||||
argmodes[i] == PROARGMODE_INOUT);
|
||||
argmodes[i] == PROARGMODE_INOUT ||
|
||||
argmodes[i] == PROARGMODE_TABLE);
|
||||
if (++numoutargs > 1)
|
||||
{
|
||||
/* multiple out args, so forget it */
|
||||
@@ -999,7 +1000,8 @@ build_function_result_tupdesc_d(Datum proallargtypes,
|
||||
argmodes[i] == PROARGMODE_VARIADIC)
|
||||
continue;
|
||||
Assert(argmodes[i] == PROARGMODE_OUT ||
|
||||
argmodes[i] == PROARGMODE_INOUT);
|
||||
argmodes[i] == PROARGMODE_INOUT ||
|
||||
argmodes[i] == PROARGMODE_TABLE);
|
||||
outargtypes[numoutargs] = argtypes[i];
|
||||
if (argnames)
|
||||
pname = TextDatumGetCString(argnames[i]);
|
||||
|
||||
Reference in New Issue
Block a user