4949typedef struct RangeIOData
5050{
5151 TypeCacheEntry * typcache ; /* range type's typcache entry */
52- Oid typiofunc ; /* element type's I/O function */
52+ FmgrInfo typioproc ; /* element type's I/O function */
5353 Oid typioparam ; /* element type's I/O parameter */
54- FmgrInfo proc ; /* lookup result for typiofunc */
5554} RangeIOData ;
5655
5756
@@ -100,10 +99,10 @@ range_in(PG_FUNCTION_ARGS)
10099
101100 /* call element type's input function */
102101 if (RANGE_HAS_LBOUND (flags ))
103- lower .val = InputFunctionCall (& cache -> proc , lbound_str ,
102+ lower .val = InputFunctionCall (& cache -> typioproc , lbound_str ,
104103 cache -> typioparam , typmod );
105104 if (RANGE_HAS_UBOUND (flags ))
106- upper .val = InputFunctionCall (& cache -> proc , ubound_str ,
105+ upper .val = InputFunctionCall (& cache -> typioproc , ubound_str ,
107106 cache -> typioparam , typmod );
108107
109108 lower .infinite = (flags & RANGE_LB_INF ) != 0 ;
@@ -142,9 +141,9 @@ range_out(PG_FUNCTION_ARGS)
142141
143142 /* call element type's output function */
144143 if (RANGE_HAS_LBOUND (flags ))
145- lbound_str = OutputFunctionCall (& cache -> proc , lower .val );
144+ lbound_str = OutputFunctionCall (& cache -> typioproc , lower .val );
146145 if (RANGE_HAS_UBOUND (flags ))
147- ubound_str = OutputFunctionCall (& cache -> proc , upper .val );
146+ ubound_str = OutputFunctionCall (& cache -> typioproc , upper .val );
148147
149148 /* construct result string */
150149 output_str = range_deparse (flags , lbound_str , ubound_str );
@@ -199,7 +198,7 @@ range_recv(PG_FUNCTION_ARGS)
199198 initStringInfo (& bound_buf );
200199 appendBinaryStringInfo (& bound_buf , bound_data , bound_len );
201200
202- lower .val = ReceiveFunctionCall (& cache -> proc ,
201+ lower .val = ReceiveFunctionCall (& cache -> typioproc ,
203202 & bound_buf ,
204203 cache -> typioparam ,
205204 typmod );
@@ -217,7 +216,7 @@ range_recv(PG_FUNCTION_ARGS)
217216 initStringInfo (& bound_buf );
218217 appendBinaryStringInfo (& bound_buf , bound_data , bound_len );
219218
220- upper .val = ReceiveFunctionCall (& cache -> proc ,
219+ upper .val = ReceiveFunctionCall (& cache -> typioproc ,
221220 & bound_buf ,
222221 cache -> typioparam ,
223222 typmod );
@@ -268,7 +267,7 @@ range_send(PG_FUNCTION_ARGS)
268267
269268 if (RANGE_HAS_LBOUND (flags ))
270269 {
271- Datum bound = PointerGetDatum (SendFunctionCall (& cache -> proc ,
270+ Datum bound = PointerGetDatum (SendFunctionCall (& cache -> typioproc ,
272271 lower .val ));
273272 uint32 bound_len = VARSIZE (bound ) - VARHDRSZ ;
274273 char * bound_data = VARDATA (bound );
@@ -279,7 +278,7 @@ range_send(PG_FUNCTION_ARGS)
279278
280279 if (RANGE_HAS_UBOUND (flags ))
281280 {
282- Datum bound = PointerGetDatum (SendFunctionCall (& cache -> proc ,
281+ Datum bound = PointerGetDatum (SendFunctionCall (& cache -> typioproc ,
283282 upper .val ));
284283 uint32 bound_len = VARSIZE (bound ) - VARHDRSZ ;
285284 char * bound_data = VARDATA (bound );
@@ -309,6 +308,7 @@ get_range_io_data(FunctionCallInfo fcinfo, Oid rngtypid, IOFuncSelector func)
309308 bool typbyval ;
310309 char typalign ;
311310 char typdelim ;
311+ Oid typiofunc ;
312312
313313 cache = (RangeIOData * ) MemoryContextAlloc (fcinfo -> flinfo -> fn_mcxt ,
314314 sizeof (RangeIOData ));
@@ -324,9 +324,9 @@ get_range_io_data(FunctionCallInfo fcinfo, Oid rngtypid, IOFuncSelector func)
324324 & typalign ,
325325 & typdelim ,
326326 & cache -> typioparam ,
327- & cache -> typiofunc );
327+ & typiofunc );
328328
329- if (!OidIsValid (cache -> typiofunc ))
329+ if (!OidIsValid (typiofunc ))
330330 {
331331 /* this could only happen for receive or send */
332332 if (func == IOFunc_receive )
@@ -340,7 +340,7 @@ get_range_io_data(FunctionCallInfo fcinfo, Oid rngtypid, IOFuncSelector func)
340340 errmsg ("no binary output function available for type %s" ,
341341 format_type_be (cache -> typcache -> rngelemtype -> type_id ))));
342342 }
343- fmgr_info_cxt (cache -> typiofunc , & cache -> proc ,
343+ fmgr_info_cxt (typiofunc , & cache -> typioproc ,
344344 fcinfo -> flinfo -> fn_mcxt );
345345
346346 fcinfo -> flinfo -> fn_extra = (void * ) cache ;
0 commit comments