From 59c016aa9f490b533621ab26a98de02cf0ab7e31 Mon Sep 17 00:00:00 2001 From: Tom Lane 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 4d05fa98cd..5fca3582fb 100644 --- a/doc/src/sgml/ref/create_type.sgml +++ b/doc/src/sgml/ref/create_type.sgml @@ -1,5 +1,5 @@ @@ -103,8 +103,8 @@ CREATE TYPE name ( or as taking three arguments of types cstring, oid, integer. 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 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 ea10f8c8cd..6b1646b896 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