Andrew Dunstan <andrew@dunslane.net> writes:
> On 11/04/2014 01:45 PM, Tom Lane wrote:
>> In short, I'd rather see this addressed through functions with slightly
>> higher-level APIs that are capable of covering more cases. In most cases
>> it'd be best if callers were using find_coercion_pathway() rather than
>> taking shortcuts.
> Well, then, do we really need a wrapper at all? Should we just be doing
> something like this?
> if (typoid >= FirstNormalObjectId)
> {
> Oid castfunc;
> CoercionPathType ctype;
> ctype = find_coercion_pathway(JSONOID, typoid,
> COERCION_EXPLICIT, &castfunc);
> if (ctype == COERCION_PATH_FUNC && OidIsValid(castfunc))
> {
> *tcategory = JSONTYPE_CAST;
> *outfuncoid = castfunc;
> }
> }
Well, of course, the question that immediately raises is why isn't this
code handling the other possible CoercionPathTypes ;-). But at least
it's pretty obvious from the code that you are ignoring such cases,
so yes I think this is better than what's there now.
regards, tom lane