Forgot to attach it, oops. On Fri, Aug 12, 2005 at 09:56:47AM +0200, Martijn van Oosterhout wrote: > Ok, here's a patch (with documentation update). I checked the > regression tests (looked over, not run) but nothing there appears to > test this anyway. I looked through all the datatype input functions but > none of them even use the second argument except array and record types > and they're explicitly unchanged. > > Note: the logic could be simplified if we could assume composite types > can't have a non-zero typelem. From looking at the code, I think it may > be assumed in places and I'm fairly sure it's non-sensical, but is it > explicitly forbidden? > > I thought of writing a few simple tests but no language will accept > cstring arguments except C. It can be added if you think it's worth > regression testing. > > Unless there are other comments I'll post this to pgsql-patches > later...
-- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > tool for doing 5% of the work and then sitting around waiting for someone > else to do the other 95% so you can sue them.
Index: doc/src/sgml/ref/create_type.sgml =================================================================== RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/create_type.sgml,v retrieving revision 1.57 diff -u -r1.57 create_type.sgml --- doc/src/sgml/ref/create_type.sgml 14 Jul 2005 06:17:36 -0000 1.57 +++ doc/src/sgml/ref/create_type.sgml 12 Aug 2005 12:52:17 -0000 @@ -102,9 +102,8 @@ declared as taking one argument of type <type>cstring</type>, 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), + The first argument is the input text as a C string, the second argument is + the OID of the type, except for arrays where it is the 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. Index: src/backend/utils/cache/lsyscache.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v retrieving revision 1.116 diff -u -r1.116 lsyscache.c --- src/backend/utils/cache/lsyscache.c 29 Aug 2004 05:06:50 -0000 1.116 +++ src/backend/utils/cache/lsyscache.c 12 Aug 2005 12:52:17 -0000 @@ -1220,12 +1220,14 @@ /* * Composite types get their own OID as parameter; array types get - * their typelem as parameter; everybody else gets zero. + * their typelem as parameter; everybody else gets their own oid. */ if (typeStruct->typtype == 'c') return HeapTupleGetOid(typeTuple); - else + else if( typeStruct->typelem != 0 ) return typeStruct->typelem; + else + return HeapTupleGetOid(typeTuple); } /*
pgpO2H7dLlWm6.pgp
Description: PGP signature