1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-27 23:21:58 +03:00

Replace typtoout() and gettypelem() with a single routine,

so that fetching an attribute value needs only one SearchSysCacheTuple call
instead of two redundant searches.  This speeds up a large SELECT by about
ten percent, and probably will help GROUP BY and SELECT DISTINCT too.
This commit is contained in:
Tom Lane
1999-01-24 05:40:49 +00:00
parent 77f5428244
commit d03e98737c
6 changed files with 74 additions and 78 deletions

View File

@ -3,7 +3,7 @@
* spi.c--
* Server Programming Interface
*
* $Id: spi.c,v 1.29 1998/12/14 05:18:51 scrappy Exp $
* $Id: spi.c,v 1.30 1999/01/24 05:40:48 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -409,7 +409,8 @@ SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber)
{
Datum val;
bool isnull;
Oid foutoid;
Oid foutoid,
typelem;
SPI_result = 0;
if (tuple->t_data->t_natts < fnumber || fnumber <= 0)
@ -421,15 +422,14 @@ SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber)
val = heap_getattr(tuple, fnumber, tupdesc, &isnull);
if (isnull)
return NULL;
foutoid = typtoout((Oid) tupdesc->attrs[fnumber - 1]->atttypid);
if (!OidIsValid(foutoid))
if (! getTypeOutAndElem((Oid) tupdesc->attrs[fnumber - 1]->atttypid,
&foutoid, &typelem))
{
SPI_result = SPI_ERROR_NOOUTFUNC;
return NULL;
}
return (fmgr(foutoid, val,
gettypelem(tupdesc->attrs[fnumber - 1]->atttypid),
return (fmgr(foutoid, val, typelem,
tupdesc->attrs[fnumber - 1]->atttypmod));
}