• Tom Lane's avatar
    Improve the handling of result type coercions in SQL functions. · 913bbd88
    Tom Lane authored
    Use the parser's standard type coercion machinery to convert the
    output column(s) of a SQL function's final SELECT or RETURNING
    to the type(s) they should have according to the function's declared
    result type.  We'll allow any case where an assignment-level
    coercion is available.  Previously, we failed unless the required
    coercion was a binary-compatible one (and the documentation ignored
    this, falsely claiming that the types must match exactly).
    
    Notably, the coercion now accounts for typmods, so that cases where
    a SQL function is declared to return a composite type whose columns
    are typmod-constrained now behave as one would expect.  Arguably
    this aspect is a bug fix, but the overall behavioral change here
    seems too large to consider back-patching.
    
    A nice side-effect is that functions can now be inlined in a
    few cases where we previously failed to do so because of type
    mismatches.
    
    Discussion: https://postgr.es/m/18929.1574895430@sss.pgh.pa.us
    913bbd88
functions.c 61 KB