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 <[email protected]> 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
