|
8 | 8 | * |
9 | 9 | * |
10 | 10 | * IDENTIFICATION |
11 | | - * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.40 1999/01/2700:36:22 tgl Exp $ |
| 11 | + * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.41 1999/01/2701:11:43 tgl Exp $ |
12 | 12 | * |
13 | 13 | *------------------------------------------------------------------------- |
14 | 14 | */ |
@@ -75,7 +75,7 @@ getTypeOutAndElem(Oid type, Oid* typOutput, Oid* typElem) |
75 | 75 | typedefstruct {/* Per-attribute information */ |
76 | 76 | Oidtypoutput;/* Oid for the attribute's type output fn */ |
77 | 77 | Oidtypelem;/* typelem value to pass to the output fn */ |
78 | | -/*more soon... */ |
| 78 | +FmgrInfofinfo;/*Precomputed call info for typoutput */ |
79 | 79 | }PrinttupAttrInfo; |
80 | 80 |
|
81 | 81 | typedefstruct { |
@@ -138,8 +138,9 @@ printtup_prepare_info(DR_printtup* myState, TupleDesc typeinfo, int numAttrs) |
138 | 138 | for (i=0;i<numAttrs;i++) |
139 | 139 | { |
140 | 140 | PrinttupAttrInfo*thisState=myState->myinfo+i; |
141 | | -getTypeOutAndElem((Oid)typeinfo->attrs[i]->atttypid, |
142 | | -&thisState->typoutput,&thisState->typelem); |
| 141 | +if (getTypeOutAndElem((Oid)typeinfo->attrs[i]->atttypid, |
| 142 | +&thisState->typoutput,&thisState->typelem)) |
| 143 | +fmgr_info(thisState->typoutput,&thisState->finfo); |
143 | 144 | } |
144 | 145 | } |
145 | 146 |
|
@@ -200,15 +201,14 @@ printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) |
200 | 201 | */ |
201 | 202 | for (i=0;i<tuple->t_data->t_natts;++i) |
202 | 203 | { |
| 204 | +PrinttupAttrInfo*thisState=myState->myinfo+i; |
203 | 205 | attr=heap_getattr(tuple,i+1,typeinfo,&isnull); |
204 | 206 | if (isnull) |
205 | 207 | continue; |
206 | | -if (OidIsValid(myState->myinfo[i].typoutput)) |
| 208 | +if (OidIsValid(thisState->typoutput)) |
207 | 209 | { |
208 | | -outputstr=fmgr(myState->myinfo[i].typoutput, |
209 | | -attr, |
210 | | -myState->myinfo[i].typelem, |
211 | | -typeinfo->attrs[i]->atttypmod); |
| 210 | +outputstr= (char*) (*fmgr_faddr(&thisState->finfo)) |
| 211 | +(attr,thisState->typelem,typeinfo->attrs[i]->atttypmod); |
212 | 212 | #ifdefMULTIBYTE |
213 | 213 | p=pg_server_to_client(outputstr,strlen(outputstr)); |
214 | 214 | outputlen=strlen(p); |
|