From 59c016aa9f490b533621ab26a98de02cf0ab7e31 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 12 Aug 2005 21:49:47 +0000
Subject: [PATCH] Pass the type OID as the typioparam for all non-array types,
 rather than only composite types as we did in 8.0.  Per discussion with
 Martijn van Oosterhout.

---
 doc/src/sgml/ref/create_type.sgml   |  6 +++---
 src/backend/utils/cache/lsyscache.c | 13 +++++++------
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/doc/src/sgml/ref/create_type.sgml b/doc/src/sgml/ref/create_type.sgml
index 4d05fa98cd1..5fca3582fb7 100644
--- a/doc/src/sgml/ref/create_type.sgml
+++ b/doc/src/sgml/ref/create_type.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/create_type.sgml,v 1.57 2005/07/14 06:17:36 neilc Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/create_type.sgml,v 1.58 2005/08/12 21:49:46 tgl Exp $
 PostgreSQL documentation
 -->
 
@@ -103,8 +103,8 @@ CREATE TYPE <replaceable class="parameter">name</replaceable> (
    or as taking three arguments of types
    <type>cstring</type>, <type>oid</type>, <type>integer</type>.
    The first argument is the input text as a C string, the second
-   argument is the element type's OID in case this is an array type
-   (or the type's own OID for a composite type),
+   argument is the type's own OID (except for array types, which instead
+   receive their element type's OID),
    and the third is the <literal>typmod</> of the destination column, if known
    (-1 will be passed if not).
    The input function must return a value of the data type itself.
diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c
index ea10f8c8cd3..6b1646b896d 100644
--- a/src/backend/utils/cache/lsyscache.c
+++ b/src/backend/utils/cache/lsyscache.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/cache/lsyscache.c,v 1.126 2005/06/28 05:09:01 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/cache/lsyscache.c,v 1.127 2005/08/12 21:49:47 tgl Exp $
  *
  * NOTES
  *	  Eventually, the index information should go through here, too.
@@ -1223,13 +1223,14 @@ getTypeIOParam(HeapTuple typeTuple)
 	Form_pg_type typeStruct = (Form_pg_type) GETSTRUCT(typeTuple);
 
 	/*
-	 * Composite types get their own OID as parameter; array types get
-	 * their typelem as parameter; everybody else gets zero.
+	 * Array types get their typelem as parameter; everybody else gets
+	 * their own type OID as parameter.  (This is a change from 8.0,
+	 * in which only composite types got their own OID as parameter.)
 	 */
-	if (typeStruct->typtype == 'c')
-		return HeapTupleGetOid(typeTuple);
-	else
+	if (OidIsValid(typeStruct->typelem))
 		return typeStruct->typelem;
+	else
+		return HeapTupleGetOid(typeTuple);
 }
 
 /*
-- 
GitLab