231{
232 bool typisvarlena;
233
234
235 typoid = getBaseType(typoid);
236
237 *outfuncoid = InvalidOid;
238
239
240
241
242
243
244
245 switch (typoid)
246 {
247 case BOOLOID:
249 break;
250
251 case INT2OID:
252 case INT4OID:
253 case INT8OID:
254 case FLOAT4OID:
255 case FLOAT8OID:
256 case NUMERICOID:
257 getTypeOutputInfo(typoid, outfuncoid, &typisvarlena);
259 break;
260
261 case DATEOID:
263 break;
264
265 case TIMESTAMPOID:
267 break;
268
269 case TIMESTAMPTZOID:
271 break;
272
273 case JSONOID:
274 case JSONBOID:
275 getTypeOutputInfo(typoid, outfuncoid, &typisvarlena);
277 break;
278
279 default:
280
281 if (OidIsValid(get_element_type(typoid)) || typoid == ANYARRAYOID
282 || typoid == RECORDARRAYOID)
284 else if (type_is_rowtype(typoid))
286 else
287 {
288
290
291 if (typoid >= FirstNormalObjectId)
292 {
293 Oid castfunc;
294 CoercionPathType ctype;
295
296 ctype = find_coercion_pathway(JSONOID, typoid,
297 COERCION_EXPLICIT,
298 &castfunc);
299 if (ctype == COERCION_PATH_FUNC && OidIsValid(castfunc))
300 {
302 *outfuncoid = castfunc;
303 }
304 else
305 {
306
307 getTypeOutputInfo(typoid, outfuncoid, &typisvarlena);
308 }
309 }
310 else
311 {
312
313 getTypeOutputInfo(typoid, outfuncoid, &typisvarlena);
314 }
315 }
316 break;
317 }
318}