1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-09 18:21:05 +03:00

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.
This commit is contained in:
Tom Lane 2005-04-30 20:04:33 +00:00
parent 93b2477278
commit d7018abe06

View File

@ -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
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)
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 tupType = HeapTupleHeaderGetTypeId(rec);
* get the type info out of the datum itself. Note that for RECORD, tupTypmod = HeapTupleHeaderGetTypMod(rec);
* 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;
tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod); tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
ncolumns = tupdesc->natts; ncolumns = tupdesc->natts;
@ -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)
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 tupType = HeapTupleHeaderGetTypeId(rec);
* get the type info out of the datum itself. Note that for RECORD, tupTypmod = HeapTupleHeaderGetTypMod(rec);
* 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;
tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod); tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
ncolumns = tupdesc->natts; ncolumns = tupdesc->natts;