> + /* > + * Here, we cannot deparsing cast_expr directly, since > + * transformTypeSafeCast may have folded it into a simple > + * constant or NULL. Instead, we use source_expr and > + * default_expr to reconstruct the CAST DEFAULT clause. > + */ > > I am wondering how other places handle expression deparsing; do they > hold the original expression along with the transformed expression?
In my initial implementation of this, I modified CoalesceExpr to ensure that the default clause was evaluated if and only if the initial expression failed.
rebased, many variable names have been renamed, comments adjusted.
The new SAFE option on user defined cast functions looks good to me.
I am concerned that adding _safe overhead to all cast functions will be received poorly, but if it is poorly received then reverting isn't that hard.
I'm going to re-review the whole patch set, but I wanted to say that I like the main points of the changes so far.