286{
287 bool typisvarlena;
288
289
290 typoid = getBaseType(typoid);
291
292 *outfuncoid = InvalidOid;
293
294
295
296
297
298
299
300 switch (typoid)
301 {
302 case BOOLOID:
304 break;
305
306 case INT2OID:
307 case INT4OID:
308 case INT8OID:
309 case FLOAT4OID:
310 case FLOAT8OID:
311 case NUMERICOID:
312 getTypeOutputInfo(typoid, outfuncoid, &typisvarlena);
314 break;
315
316 case DATEOID:
318 break;
319
320 case TIMESTAMPOID:
322 break;
323
324 case TIMESTAMPTZOID:
326 break;
327
328 case JSONOID:
329 case JSONBOID:
330 getTypeOutputInfo(typoid, outfuncoid, &typisvarlena);
332 break;
333
334 default:
335
336 if (OidIsValid(get_element_type(typoid)) || typoid == ANYARRAYOID
337 || typoid == RECORDARRAYOID)
339 else if (type_is_rowtype(typoid))
341 else
342 {
343
345
346 if (typoid >= FirstNormalObjectId)
347 {
348 Oid castfunc;
349 CoercionPathType ctype;
350
351 ctype = find_coercion_pathway(JSONOID, typoid,
352 COERCION_EXPLICIT,
353 &castfunc);
354 if (ctype == COERCION_PATH_FUNC && OidIsValid(castfunc))
355 {
357 *outfuncoid = castfunc;
358 }
359 else
360 {
361
362 getTypeOutputInfo(typoid, outfuncoid, &typisvarlena);
363 }
364 }
365 else
366 {
367
368 getTypeOutputInfo(typoid, outfuncoid, &typisvarlena);
369 }
370 }
371 break;
372 }
373}