1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-17 01:02:17 +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:46 +00:00
parent 757956ec47
commit 50433d6533

View File

@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/rowtypes.c,v 1.8.4.1 2005/04/18 17:11:15 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/adt/rowtypes.c,v 1.8.4.2 2005/04/30 20:04:46 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;