Commit d7018abe authored by Tom Lane's avatar Tom Lane

Make record_out and record_send extract type information from the passed

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.
parent 93b24772
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 ...@@ -268,7 +268,7 @@ Datum
record_out(PG_FUNCTION_ARGS) record_out(PG_FUNCTION_ARGS)
{ {
HeapTupleHeader rec = PG_GETARG_HEAPTUPLEHEADER(0); HeapTupleHeader rec = PG_GETARG_HEAPTUPLEHEADER(0);
Oid tupType = PG_GETARG_OID(1); Oid tupType;
int32 tupTypmod; int32 tupTypmod;
TupleDesc tupdesc; TupleDesc tupdesc;
HeapTupleData tuple; HeapTupleData tuple;
...@@ -280,18 +280,9 @@ record_out(PG_FUNCTION_ARGS) ...@@ -280,18 +280,9 @@ record_out(PG_FUNCTION_ARGS)
char *nulls; char *nulls;
StringInfoData buf; StringInfoData buf;
/* /* Extract type info from the tuple itself */
* 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); tupType = HeapTupleHeaderGetTypeId(rec);
tupTypmod = HeapTupleHeaderGetTypMod(rec); tupTypmod = HeapTupleHeaderGetTypMod(rec);
}
else
tupTypmod = -1;
tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod); tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
ncolumns = tupdesc->natts; ncolumns = tupdesc->natts;
...@@ -613,7 +604,7 @@ Datum ...@@ -613,7 +604,7 @@ Datum
record_send(PG_FUNCTION_ARGS) record_send(PG_FUNCTION_ARGS)
{ {
HeapTupleHeader rec = PG_GETARG_HEAPTUPLEHEADER(0); HeapTupleHeader rec = PG_GETARG_HEAPTUPLEHEADER(0);
Oid tupType = PG_GETARG_OID(1); Oid tupType;
int32 tupTypmod; int32 tupTypmod;
TupleDesc tupdesc; TupleDesc tupdesc;
HeapTupleData tuple; HeapTupleData tuple;
...@@ -625,18 +616,9 @@ record_send(PG_FUNCTION_ARGS) ...@@ -625,18 +616,9 @@ record_send(PG_FUNCTION_ARGS)
char *nulls; char *nulls;
StringInfoData buf; StringInfoData buf;
/* /* Extract type info from the tuple itself */
* 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); tupType = HeapTupleHeaderGetTypeId(rec);
tupTypmod = HeapTupleHeaderGetTypMod(rec); tupTypmod = HeapTupleHeaderGetTypMod(rec);
}
else
tupTypmod = -1;
tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod); tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
ncolumns = tupdesc->natts; ncolumns = tupdesc->natts;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment