• Tom Lane's avatar
    Mark some more I/O-conversion-invoking functions as stable not volatile. · 3db6524f
    Tom Lane authored
    When written, textanycat, anytextcat, quote_literal, and quote_nullable
    were marked volatile, because they could invoke arbitrary type-specific
    output functions as part of casting their anyelement arguments to text.
    Since then, we have defined a project policy that I/O functions must not
    be volatile, as per commit aab353a6.
    So these functions can safely be downgraded to stable.  Most of the time
    this makes no difference since they'll get inlined anyway, but as noted
    by Andrew Dunstan, there are cases where the volatile marking prevents
    optimizations that the planner does before function inlining.  (I think
    I might have overlooked these functions in the earlier commit on the
    grounds that inlining would make it moot, but not so --- tgl)
    
    This change results in a change in the expected output of the json
    regression tests, because the planner can now flatten a sub-select
    that it failed to before.  The old output is preferable, but getting
    that back will require some as-yet-unfinished work on RowExpr handling.
    
    Marti Raudsepp
    3db6524f
catversion.h 2.53 KB