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);
 }
 
 /*

Attachment: pgpO2H7dLlWm6.pgp
Description: PGP signature

Reply via email to