Make record_out and record_send extract type information from the passed
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 30 Apr 2005 20:04:33 +0000 (20:04 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 30 Apr 2005 20:04:33 +0000 (20:04 +0000)
record object itself, rather than relying on a second OID argument to be
correct.  This patch just changes the function behavior and not the
catalogs, so it's OK to back-patch to 8.0.  Will remove the now-redundant
second argument in pg_proc in a separate patch in HEAD only.

src/backend/utils/adt/rowtypes.c

index 79f04a124ee27242a8655f8b3ac9ceb1c8cb4ec7..090158d34a528f3c227025a75f47b863b5ec4f7c 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/rowtypes.c,v 1.9 2005/04/18 17:11:05 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/rowtypes.c,v 1.10 2005/04/30 20:04:33 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -268,7 +268,7 @@ Datum
 record_out(PG_FUNCTION_ARGS)
 {
    HeapTupleHeader rec = PG_GETARG_HEAPTUPLEHEADER(0);
-   Oid         tupType = PG_GETARG_OID(1);
+   Oid         tupType;
    int32       tupTypmod;
    TupleDesc   tupdesc;
    HeapTupleData tuple;
@@ -280,18 +280,9 @@ record_out(PG_FUNCTION_ARGS)
    char       *nulls;
    StringInfoData buf;
 
-   /*
-    * Use the passed type unless it's RECORD; in that case, we'd better
-    * get the type info out of the datum itself.  Note that for RECORD,
-    * what we'll probably actually get is RECORD's typelem, ie, zero.
-    */
-   if (tupType == InvalidOid || tupType == RECORDOID)
-   {
-       tupType = HeapTupleHeaderGetTypeId(rec);
-       tupTypmod = HeapTupleHeaderGetTypMod(rec);
-   }
-   else
-       tupTypmod = -1;
+   /* Extract type info from the tuple itself */
+   tupType = HeapTupleHeaderGetTypeId(rec);
+   tupTypmod = HeapTupleHeaderGetTypMod(rec);
    tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
    ncolumns = tupdesc->natts;
 
@@ -613,7 +604,7 @@ Datum
 record_send(PG_FUNCTION_ARGS)
 {
    HeapTupleHeader rec = PG_GETARG_HEAPTUPLEHEADER(0);
-   Oid         tupType = PG_GETARG_OID(1);
+   Oid         tupType;
    int32       tupTypmod;
    TupleDesc   tupdesc;
    HeapTupleData tuple;
@@ -625,18 +616,9 @@ record_send(PG_FUNCTION_ARGS)
    char       *nulls;
    StringInfoData buf;
 
-   /*
-    * Use the passed type unless it's RECORD; in that case, we'd better
-    * get the type info out of the datum itself.  Note that for RECORD,
-    * what we'll probably actually get is RECORD's typelem, ie, zero.
-    */
-   if (tupType == InvalidOid || tupType == RECORDOID)
-   {
-       tupType = HeapTupleHeaderGetTypeId(rec);
-       tupTypmod = HeapTupleHeaderGetTypMod(rec);
-   }
-   else
-       tupTypmod = -1;
+   /* Extract type info from the tuple itself */
+   tupType = HeapTupleHeaderGetTypeId(rec);
+   tupTypmod = HeapTupleHeaderGetTypMod(rec);
    tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
    ncolumns = tupdesc->natts;