• Tom Lane's avatar
    Fix "cannot accept a set" error when only some arms of a CASE return a set. · 080b7db7
    Tom Lane authored
    In commit c1352052, I implemented an
    optimization that assumed that a function's argument expressions would
    either always return a set (ie multiple rows), or always not.  This is
    wrong however: we allow CASE expressions in which some arms return a set
    of some type and others just return a scalar of that type.  There may be
    other examples as well.  To fix, replace the run-time test of whether an
    argument returned a set with a static precheck (expression_returns_set).
    This adds a little bit of query startup overhead, but it seems barely
    measurable.
    
    Per bug #8228 from David Johnston.  This has been broken since 8.0,
    so patch all supported branches.
    080b7db7
rangefuncs.out 51.1 KB