From 74c14995f1643119b4e338fb6d511420c12023cf Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 8 Dec 2000 00:03:02 +0000 Subject: [PATCH] Improve error message for erroneous use of 'opaque' as plpgsql argument or return type. --- src/pl/plpgsql/src/pl_comp.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c index c0fe596897..299a31da09 100644 --- a/src/pl/plpgsql/src/pl_comp.c +++ b/src/pl/plpgsql/src/pl_comp.c @@ -3,7 +3,7 @@ * procedural language * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.24 2000/11/16 22:30:50 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.25 2000/12/08 00:03:02 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -181,8 +181,12 @@ plpgsql_compile(Oid fn_oid, int functype) if (!HeapTupleIsValid(typeTup)) { plpgsql_comperrinfo(); - elog(ERROR, "cache lookup for return type %u failed", - procStruct->prorettype); + if (!OidIsValid(procStruct->prorettype)) + elog(ERROR, "plpgsql functions cannot return type \"opaque\"" + "\n\texcept when used as triggers"); + else + elog(ERROR, "cache lookup for return type %u failed", + procStruct->prorettype); } typeStruct = (Form_pg_type) GETSTRUCT(typeTup); if (typeStruct->typrelid != InvalidOid) @@ -214,8 +218,11 @@ plpgsql_compile(Oid fn_oid, int functype) if (!HeapTupleIsValid(typeTup)) { plpgsql_comperrinfo(); - elog(ERROR, "cache lookup for argument type %u failed", - procStruct->proargtypes[i]); + if (!OidIsValid(procStruct->proargtypes[i])) + elog(ERROR, "plpgsql functions cannot take type \"opaque\""); + else + elog(ERROR, "cache lookup for argument type %u failed", + procStruct->proargtypes[i]); } typeStruct = (Form_pg_type) GETSTRUCT(typeTup); @@ -232,7 +239,8 @@ plpgsql_compile(Oid fn_oid, int functype) if (plpgsql_parse_wordrowtype(buf) != T_ROW) { plpgsql_comperrinfo(); - elog(ERROR, "cannot get tuple struct of argument %d", i + 1); + elog(ERROR, "cannot get tuple struct of argument %d", + i + 1); } row = plpgsql_yylval.row;