mirror of
https://github.com/postgres/postgres.git
synced 2025-06-04 00:02:37 -04:00
Forgot to handle 'opaque' function arguments in regprocedurein/out.
This commit is contained in:
parent
9f0ae0c820
commit
9b5ca7ee0c
@ -13,7 +13,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.67 2002/05/01 23:06:41 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.68 2002/05/11 00:24:16 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
static List *stringToQualifiedNameList(const char *string, const char *caller);
|
static List *stringToQualifiedNameList(const char *string, const char *caller);
|
||||||
static void parseNameAndArgTypes(const char *string, const char *caller,
|
static void parseNameAndArgTypes(const char *string, const char *caller,
|
||||||
bool allow_none,
|
const char *type0_spelling,
|
||||||
List **names, int *nargs, Oid *argtypes);
|
List **names, int *nargs, Oid *argtypes);
|
||||||
|
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ regprocedurein(PG_FUNCTION_ARGS)
|
|||||||
* datatype cannot be used for any system column that needs to receive
|
* datatype cannot be used for any system column that needs to receive
|
||||||
* data during bootstrap.
|
* data during bootstrap.
|
||||||
*/
|
*/
|
||||||
parseNameAndArgTypes(pro_name_or_oid, "regprocedurein", false,
|
parseNameAndArgTypes(pro_name_or_oid, "regprocedurein", "opaque",
|
||||||
&names, &nargs, argtypes);
|
&names, &nargs, argtypes);
|
||||||
|
|
||||||
clist = FuncnameGetCandidates(names, nargs);
|
clist = FuncnameGetCandidates(names, nargs);
|
||||||
@ -326,12 +326,16 @@ regprocedureout(PG_FUNCTION_ARGS)
|
|||||||
quote_qualified_identifier(nspname, proname));
|
quote_qualified_identifier(nspname, proname));
|
||||||
for (i = 0; i < nargs; i++)
|
for (i = 0; i < nargs; i++)
|
||||||
{
|
{
|
||||||
appendStringInfo(&buf, "%s%s",
|
Oid thisargtype = procform->proargtypes[i];
|
||||||
(i > 0) ? "," : "",
|
|
||||||
format_type_be(procform->proargtypes[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
appendStringInfo(&buf, ")");
|
if (i > 0)
|
||||||
|
appendStringInfoChar(&buf, ',');
|
||||||
|
if (OidIsValid(thisargtype))
|
||||||
|
appendStringInfo(&buf, "%s", format_type_be(thisargtype));
|
||||||
|
else
|
||||||
|
appendStringInfo(&buf, "opaque");
|
||||||
|
}
|
||||||
|
appendStringInfoChar(&buf, ')');
|
||||||
|
|
||||||
result = buf.data;
|
result = buf.data;
|
||||||
|
|
||||||
@ -567,7 +571,7 @@ regoperatorin(PG_FUNCTION_ARGS)
|
|||||||
* datatype cannot be used for any system column that needs to receive
|
* datatype cannot be used for any system column that needs to receive
|
||||||
* data during bootstrap.
|
* data during bootstrap.
|
||||||
*/
|
*/
|
||||||
parseNameAndArgTypes(opr_name_or_oid, "regoperatorin", true,
|
parseNameAndArgTypes(opr_name_or_oid, "regoperatorin", "none",
|
||||||
&names, &nargs, argtypes);
|
&names, &nargs, argtypes);
|
||||||
if (nargs == 1)
|
if (nargs == 1)
|
||||||
elog(ERROR, "regoperatorin: use NONE to denote the missing argument of a unary operator");
|
elog(ERROR, "regoperatorin: use NONE to denote the missing argument of a unary operator");
|
||||||
@ -1000,10 +1004,12 @@ stringToQualifiedNameList(const char *string, const char *caller)
|
|||||||
* the argtypes array should be of size FUNC_MAX_ARGS). The function or
|
* the argtypes array should be of size FUNC_MAX_ARGS). The function or
|
||||||
* operator name is returned to *names as a List of Strings.
|
* operator name is returned to *names as a List of Strings.
|
||||||
*
|
*
|
||||||
* NONE is accepted as a placeholder for OID 0 if allow_none is true.
|
* If type0_spelling is not NULL, it is a name to be accepted as a
|
||||||
|
* placeholder for OID 0.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
parseNameAndArgTypes(const char *string, const char *caller, bool allow_none,
|
parseNameAndArgTypes(const char *string, const char *caller,
|
||||||
|
const char *type0_spelling,
|
||||||
List **names, int *nargs, Oid *argtypes)
|
List **names, int *nargs, Oid *argtypes)
|
||||||
{
|
{
|
||||||
char *rawname;
|
char *rawname;
|
||||||
@ -1109,9 +1115,9 @@ parseNameAndArgTypes(const char *string, const char *caller, bool allow_none,
|
|||||||
*ptr2 = '\0';
|
*ptr2 = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allow_none && strcasecmp(typename, "none") == 0)
|
if (type0_spelling && strcasecmp(typename, type0_spelling) == 0)
|
||||||
{
|
{
|
||||||
/* Report NONE as OID 0 */
|
/* Special case for OPAQUE or NONE */
|
||||||
typeid = InvalidOid;
|
typeid = InvalidOid;
|
||||||
typmod = -1;
|
typmod = -1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user