• Tom Lane's avatar
    Don't elide casting to typmod -1. · e5f6493e
    Tom Lane authored
    Casting a value that's already of a type with a specific typmod
    to an unspecified typmod doesn't do anything so far as run-time
    behavior is concerned.  However, it really ought to change the
    exposed type of the expression to match.  Up to now,
    coerce_type_typmod hasn't bothered with that, which creates gotchas
    in contexts such as recursive unions.  If for example one side of
    the union is numeric(18,3), but it needs to be plain numeric to
    match the other side, there's no direct way to express that.
    
    This is easy enough to fix, by inserting a RelabelType to update the
    exposed type of the expression.  However, it's a bit nervous-making
    to change this behavior, because it's stood for a really long time.
    (I strongly suspect that it's like this in part because the logic
    pre-dates the introduction of RelabelType in 7.0.  The commit log
    message for 57b30e8e is interesting reading here.)  As a compromise,
    we'll sneak the change into 14beta3, and consider back-patching to
    stable branches if no complaints emerge in the next three months.
    
    Discussion: https://postgr.es/m/CABNQVagu3bZGqiTjb31a8D5Od3fUMs7Oh3gmZMQZVHZ=uWWWfQ@mail.gmail.com
    e5f6493e
expressions.sql 4.67 KB