From 6e646c73130c16570c72b704d73a59ffcff0b6cd Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 8 Dec 2000 00:09:07 +0000
Subject: [PATCH] Improve error message for erroneous use of 'opaque' as pltcl
 argument or return type.

---
 src/pl/tcl/pltcl.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c
index 94a67ef0433..f37b31a30dd 100644
--- a/src/pl/tcl/pltcl.c
+++ b/src/pl/tcl/pltcl.c
@@ -31,7 +31,7 @@
  *	  ENHANCEMENTS, OR MODIFICATIONS.
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.30 2000/11/20 20:36:52 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/pl/tcl/pltcl.c,v 1.31 2000/12/08 00:09:07 tgl Exp $
  *
  **********************************************************************/
 
@@ -489,8 +489,12 @@ pltcl_func_handler(PG_FUNCTION_ARGS)
 		{
 			free(prodesc->proname);
 			free(prodesc);
-			elog(ERROR, "pltcl: cache lookup for return type %u failed",
-				 procStruct->prorettype);
+			if (!OidIsValid(procStruct->prorettype))
+				elog(ERROR, "pltcl functions cannot return type \"opaque\""
+					 "\n\texcept when used as triggers");
+			else
+				elog(ERROR, "pltcl: cache lookup for return type %u failed",
+					 procStruct->prorettype);
 		}
 		typeStruct = (Form_pg_type) GETSTRUCT(typeTup);
 
@@ -521,8 +525,11 @@ pltcl_func_handler(PG_FUNCTION_ARGS)
 			{
 				free(prodesc->proname);
 				free(prodesc);
-				elog(ERROR, "pltcl: cache lookup for argument type %u failed",
-					 procStruct->proargtypes[i]);
+				if (!OidIsValid(procStruct->proargtypes[i]))
+					elog(ERROR, "pltcl functions cannot take type \"opaque\"");
+				else
+					elog(ERROR, "pltcl: cache lookup for argument type %u failed",
+						 procStruct->proargtypes[i]);
 			}
 			typeStruct = (Form_pg_type) GETSTRUCT(typeTup);
 
-- 
GitLab