From 9b5ca7ee0c4c9aefe9f0669b8f08b6f433f1f00a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 11 May 2002 00:24:16 +0000 Subject: [PATCH] Forgot to handle 'opaque' function arguments in regprocedurein/out. --- src/backend/utils/adt/regproc.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index ac5a7fc84d..f9de267796 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -13,7 +13,7 @@ * * * 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 void parseNameAndArgTypes(const char *string, const char *caller, - bool allow_none, + const char *type0_spelling, 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 * data during bootstrap. */ - parseNameAndArgTypes(pro_name_or_oid, "regprocedurein", false, + parseNameAndArgTypes(pro_name_or_oid, "regprocedurein", "opaque", &names, &nargs, argtypes); clist = FuncnameGetCandidates(names, nargs); @@ -326,12 +326,16 @@ regprocedureout(PG_FUNCTION_ARGS) quote_qualified_identifier(nspname, proname)); for (i = 0; i < nargs; i++) { - appendStringInfo(&buf, "%s%s", - (i > 0) ? "," : "", - format_type_be(procform->proargtypes[i])); - } + Oid thisargtype = 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; @@ -567,7 +571,7 @@ regoperatorin(PG_FUNCTION_ARGS) * datatype cannot be used for any system column that needs to receive * data during bootstrap. */ - parseNameAndArgTypes(opr_name_or_oid, "regoperatorin", true, + parseNameAndArgTypes(opr_name_or_oid, "regoperatorin", "none", &names, &nargs, argtypes); if (nargs == 1) 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 * 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 -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) { char *rawname; @@ -1109,9 +1115,9 @@ parseNameAndArgTypes(const char *string, const char *caller, bool allow_none, *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; typmod = -1; } -- 2.11.0